0

如何通过分支触发使用“阶段”下的特定模板?

扳机:

 branches

   include:

     - ci

     - prod

阶段:

  • 模板:ci.yml

    条件:and(eq(['build.sourceBranch'], 'ci'))

  • 模板:prod.yml

    条件:and(eq(['build.sourceBranch'], 'prod'))

尝试了上述条件,但没有奏效。我得到“意外的价值条件”。任何帮助表示赞赏

***** 通过将条件作为参数传递给模板,尝试了一种解决方案:

阶段:

  • 模板:ci.yml

    参数:

    条件:and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))

  • 模板:prod.yml

    参数:

    条件:and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/prod'))

获取“意外的参数条件”

管道结构:

master.yml(包含运行时参数) 阶段:

模板:ci.yml

参数:

条件:and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))

模板:prod.yml

参数:

条件:and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/prod'))

ci.yml

阶段:

  • 阶段:BuildApp

  • 阶段:BuildWeb

  • 阶段:DeployLocal

产品.yml

阶段:

  • 阶段:BuildApp

  • 阶段:BuildWeb

  • 阶段:部署产品

4

1 回答 1

1

如何通过分支触发使用“阶段”下的特定模板?

要解决此问题,我们可以在作业级别添加条件,例如:

stages:
- stage: Test1
  jobs:
  - job: ci
    displayName: ci
    pool:
      name: MyPrivateAgent
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))
    steps:
        - template: ci.yml

  - job: prod
    displayName: prod
    pool:
      name: MyPrivateAgent
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/prod'))
    steps:
        - template: prod.yml

检查文档指定条件以获取更多详细信息。

另一方面,我们也可以将条件设​​置为模板 yml 的参数,例如:

- template: ci.yml
  parameters:
    doTheThing: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/ci'))

模板 yml 文件:

# template.yml
parameters:
  doTheThing: 'false'
steps:
- script: echo This always happens!
  displayName: Always
- script: echo Sometimes this happens!
  condition: ${{ parameters.doTheThing }}
  displayName: Only if true

您可以查看线程YAML - Support conditions for templates了解更多详细信息。

希望这可以帮助。

于 2020-06-08T06:35:15.960 回答