我有一个类似于以下内容的YAML文件:
stages:
- stage: A
pool:
vmImage: 'windows-2019'
jobs:
- job: a
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
#edits file "$(System.DefaultWorkingDirectory)/myfolder/myfile.json"
- stage: B
dependsOn: A
pool:
vmImage: 'windows-2019'
jobs:
- job: b
steps:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
#uses file "$(System.DefaultWorkingDirectory)/myfolder/myfile.json"
我将管道分为两个阶段; A:编辑存储库中的文件,B:处理已编辑的文件。
我的问题是,文件似乎在阶段之间被重置。有什么方法可以在整个阶段中保留更改,而不是重置它们?
我不想像在阶段b中那样发布工件,等等,尽管不在上面的YAML中,我正在运行多个包含硬编码文件路径的PowerShell脚本文件,覆盖文件路径以指向它只是一团糟在运行舞台之前,请在工件目录中。
An
根据我的测试,此问题的原因是两个阶段在不同的代理计算机上运行。
例如:阶段A->代理计算机名称:'fv-az146',阶段B->代理计算机名称:'fv-az151']
您可以在构建日志->初始化作业
中检查代理信息。是否有任何方法可以在整个阶段保持更改,而不是重置它们?
由于您不想发布工件,因此可以尝试使用Self-hosted agents运行两个阶段。
您需要向代理添加需求,以确保这些阶段在相同的自托管代理上运行。
根据this doc:
[requires关键字受专用池支持。
我们无法在Microsoft托管的代理中指定特定的“代理功能”。因此我们不能确保两个阶段可以在同一代理上运行
更新:
由于两个阶段都在同一代理上运行,所以阶段B中的“签出”步骤可能会覆盖阶段A中的文件。
所以您还需要在阶段B中添加- checkout: none
。>
这里是更新的Yaml模板:
stages: - stage: A pool: name: Pool name demands: - Agent.Name -equals agentname1 jobs: - job: a steps: - task: PowerShell@2 ... - stage: B dependsOn: A pool: name: Pool name demands: - Agent.Name -equals agentname1 jobs: - job: b steps: - checkout: none - task: PowerShell@2 ...
[整个工作流程:阶段A编辑文件并将其保存到$(System.DefaultWorkingDirectory)。
然后,阶段B可以直接使用$(System.DefaultWorkingDirectory)中的文件。
$(System.DefaultWorkingDirectory)中的文件将在阶段A和B中保留更改。