gpt4 book ai didi

azure-devops - Azure Devops - 在作业模板之间传递变量

转载 作者:行者123 更新时间:2023-12-02 04:22:13 24 4
gpt4 key购买 nike

Azure DevOps yaml 中的普通(非模板)作业支持作业间变量传递,如下所示:

jobs:
- job: A
steps:
- script: "echo ##vso[task.setvariable variable=skipsubsequent;isOutput=true]false"
name: printvar

- job: B
condition: and(succeeded(), ne(dependencies.A.outputs['printvar.skipsubsequent'], 'true'))
dependsOn: A
steps:
- script: echo hello from B

鉴于模板不支持 dependsOn,我如何在下面做类似的事情句法?我需要从第一个模板获取输出并将其作为“environmentSlice”传递给第二个模板。
- stage: Deploy
displayName: Deploy stage
jobs:
- template: build-templates/get-environment-slice.yml@templates
parameters:
configFileLocation: 'config/config.json'

- template: build-templates/node-app-deploy.yml@templates
parameters:
# Build agent VM image name
vmImageName: $(Common.BuildVmImage)
environmentPrefix: 'Dev'
environmentSlice: '-$(dependencies.GetEnvironmentSlice.outputs['getEnvironmentSlice.environmentSlice'])'

我希望将两个模板分开的原因是第二个模板是部署模板,我希望在命名第二个模板中的环境时从第一个模板输入。 IE。 node-app-deploy.yml(第二个模板)的初始部分是:
  jobs:
- deployment: Deploy
displayName: Deploy
# Because we use the environmentSlice to name the environment, we have to have it passed in rather than
# extracting it from the config file in steps below
environment: ${{ parameters.environmentPrefix }}${{ parameters.environmentSlice }}

更新:

接受的解决方案确实允许您在单独的模板之间传递变量,但不适用于我的特定用例。我希望能够动态命名第二个模板的“环境”部分,即 environment: ${{ parameters.environmentPrefix }}${{ parameters.environmentSlice }} ,但这只能静态命名,因为模板是在管道启动时编译的。

该解决方案的缺点是它在模板之间引入了隐藏的耦合。我更喜欢调用管道来协调模板之间的参数传递。

最佳答案

您可以申请 depend ondependency variable成模板。

请参阅以下示例:

为了让示例更清楚,这里有2个模板文件,一个是azure-pipelines-1.yml ,另一个是 azure-pipeline-1-copy.yml .

azure-pipelines-1.yml , 指定环境值作为输出变量:

parameters:
  environment: ''
jobs:
- job: preDeploy
  variables:
    EnvironmentName: preDeploy-${{ parameters.environment }}
  steps:
  - checkout: none
  - pwsh: |
      echo "##vso[task.setvariable variable=EnvironmentName;isOutput=true]$($env:ENVIRONMENTNAME)"
    name: outputVars

然后,在 azure-pipeline-1-copy.yml 使用依赖来获取这个输出变量:
jobs:
- job: deployment
  dependsOn: preDeploy
  variables:
    EnvironmentNameCopy: $[dependencies.preDeploy.outputs['outputVars.EnvironmentName']]
  steps:
  - checkout: none
  - pwsh: |
      Write-Host "$(EnvironmentNameCopy)"
    name: outputVars

最后,在 YAML 管道 ,只需要传递环境值
stages:
  - stage: deployQA
    jobs:
    - template: azure-pipelines-1.yml
      parameters:
        environment: FromTemplate1
    - template: azure-pipeline-1-copy.yml

现在,您可以在第二个模板作业中看到该值成功获取:

enter image description here

关于azure-devops - Azure Devops - 在作业模板之间传递变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59038584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com