触发另一个管道并设置变量

时间:2020-09-25 06:12:35

标签: azure-devops yaml azure-pipelines

我有一条管道。管道具有用于不同环境的变量。现在,我不想将管道复制成三个,而是希望有一个管道,而其他三个管道则以一个特定的变量开头。当调用主管道的管道完成时,则应分别为每个管道释放。 yaml和管道有可能吗?

1 个答案:

答案 0 :(得分:1)

如果只想结束两个已参数化的管道,则可能会存在传递该变量的问题。完美匹配似乎是runtime parameters。您可以使用REST API endpoint传递这些参数。这是一个示例示例,说明如何从管道运行REST API

'Team_Dev_FTW'

注意:此呼叫不同于上述端点。

但是我会推荐您templates。您可以使用它来提取公用部分并通过参数,这样看来它就适合您的情况。

模板

- pwsh: |
    
    $url = "https://dev.azure.com/thecodemanual/$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)?api-version=5.1"
    $build = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Bearer $env:MY_SECRET"}
    Write-Host "Pipeline = $($build | ConvertTo-Json -Depth 100)"

    $status = $build.status
    Write-Host $status
  name: initial
  env: 
    MY_SECRET: $(System.AccessToken)

主文件

parameters:
- name: name
  type: string
  default: 'lambdaNumbertOneFunctionName'
- name: arn
  type: string
  default: 'lambdaNumberOneFunctionArn'
- name: stepName
  type: string
  default: 'StepOne'
- name: value
  type: string
  default: 'testValue'

steps:
- bash: |
    echo "##vso[task.setvariable variable=${{ parameters.name }};isOutput=true]${{ parameters.value }}"
    echo "##vso[task.setvariable variable=${{ parameters.arn }};isOutput=true]${{ parameters.value }}"
    echo "##vso[task.setvariable variable=Test;isOutput=true]${{ parameters.value }}"
    echo "##vso[task.setvariable variable=Test2;isOutput=true]Yesy2"
  name: ${{ parameters.stepName }}

- script: |
    echo $(${{ parameters.stepName }}.${{ parameters.name }})
    echo $(${{ parameters.stepName }}.${{ parameters.arn }})
    echo $(${{ parameters.stepName }}.Test)
    echo $(${{ parameters.stepName }}.Test2)

您可以通过三种方式使用模板:

  • 在主版本中将所有三个部分定义为单独的阶段/职位
  • 在第二个版本中将所有三个部分定义为单独的阶段/作业,然后使用管道trigger触发它
  • 定义三个单独的管道并使用上述管道触发器触发它们