在Azure构建管道中的整个阶段中都保留对defaultWorkingDirectory的更改

问题描述 投票:0回答:1

我有一个类似于以下内容的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

azure azure-devops yaml azure-pipelines
1个回答
1
投票

根据我的测试,此问题的原因是两个阶段在不同的代理计算机上运行。

例如:阶段A->代理计算机名称:'fv-az146',阶段B->代理计算机名称:'fv-az151']

您可以在构建日志->初始化作业

中检查代理信息。

Initialize job

是否有任何方法可以在整个阶段保持更改,而不是重置它们?

由于您不想发布工件,因此可以尝试使用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中保留更改。

© www.soinside.com 2019 - 2024. All rights reserved.