需要替换 azure devops 管道中预定义变量的别名值

时间:2021-01-06 15:16:15

标签: azure azure-devops azure-pipelines

我在两个管道之间启用了管道资源触发器。想用触发管道资源动态替换别名值。下面是管道代码

  resources:        
  pipelines:
  - pipeline: pipeline1
    project: onecom
    source: pipeline1-api
    trigger: 
      branches:
      - develop    
      - feat/*
  - pipeline: pipeline2
    project: onecom
    source: pipeline2-api 
    trigger:
      branches:
      - develop
      - feat
  variables:
  - name: apiname
    value:  $(resources.pipeline.<Alias>.pipelineName)
  - name: dockertag
    value: $(resources.pipeline.<Alias>.sourceCommit)
  - name: runname
    value: $(resources.pipeline.<Alias>.runName)

stages:
- stage: ScanImage

  jobs:
  - job: ScanImage

    pool:
    vmImage: 'ubuntu-16.04'

    steps:
    - script: echo $(apiname)
    - script: echo $(runname)

如果构建来自于 pipeline1,我想将 $(resources.pipeline..pipelineName) 中的 别名 值替换为 pipeline1 >source:pipeline1-api 和 pipeline2 如果构建来自源:pipeline2-api 动态。

2 个答案:

答案 0 :(得分:0)

请试试这个

  variables:
  - name: alias
    value: $(resources.triggeringAlias)

那么你可以尝试如下替换它

$(resources.pipeline.$(alias).pipelineName)

答案 1 :(得分:0)

<块引用>

如果构建来自源:pipeline1-api,我想将 $(resources.pipeline..pipelineName) 中的别名值替换为值 pipeline1,如果构建来自源:pipeline2-api,则替换为 pipeline2。

由于嵌套变量的值(例如 $(resources.pipeline.$(alias).pipelineName)) 在构建/发布管道中尚不支持。所以我们不能直接在变量中使用它:

  variables:
  - name: apiname
    value:  $(resources.pipeline.$(alias).pipelineName)

为了解决这个问题,我们需要添加一个内联的 powershell 来根据 resources.pipeline.<Alias>.pipelineName 的值设置变量 $(resources.triggeringAlias)

variables:
  - name: alias
    value: $(resources.triggeringAlias)


    - task: InlinePowershell@1
      inputs:
        script: |
          if ("$(alias)" -eq "PipelineA")
          {
            Write-Host ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.PipelineA.sourceCommit) | cut -c -7")
          }
          elseif ("$(alias)" -eq "PipelineB")
          {
            Write-Host ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.PipelineB.sourceCommit) | cut -c -7")
          }

更新:

<块引用>

你能帮我在 bash 中使用相同的配置吗? linux机器上的任务

- task: PowerShell@2
  displayName: 'Inline Powershell'
  inputs:
    TargetType: inline
    Script: |
      if ("$(alias)" -eq "PipelineA")
      {
        Write-Host ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.PipelineA.sourceCommit) | cut -c -7")
      }
      elseif ("$(alias)" -eq "PipelineB")
      {
        Write-Host ("##vso[task.setvariable variable=dockertag]$(resources.pipeline.PipelineB.sourceCommit) | cut -c -7")
      }
    pwsh: true