【问题标题】:How to get variable values from pipeline resources in azure pipelines如何从 azure 管道中的管道资源中获取变量值
【发布时间】:2021-10-22 19:28:37
【问题描述】:

基本上,我有 2 个单独的 Azure 管道(CI、CD)。而且,我只为 CI 管道启用了触发器。一旦 CI(构建)管道完成,它应该触发 CD 管道。而且,我在 CI 管道中传递参数和变量。但是,我也想在 CD 管道中使用相同的 CI 参数值。

### CI Pipeline ###
parameters:
- name: environment
  displayName: 'Choose Environment'
  type: string
  default: Dev
  values:
    - Dev
    - Qa
    - Stage
    - Demo
    - Live

variables:
- group: PoC-Web
- group: PoC-Secrets
- name: version

在 CI 管道中,使用环境参数并声明版本变量。现在,我想在 CD 管道中使用这些值。

### CD Pipeline ###
resources:
  pipelines:
  - pipeline: web-ci
    source: PoC-Web-CI
    trigger:
     branches: 
      include:
        - cicd/azure-pipelines
        - develop
stages:
- stage: 'Package_Deploy'
  jobs:
  - deployment: 'Deploy_to_Server'
    environment: 'PoC-Web.PoC_WEB_SERVER'
    strategy:
      rolling:
        deploy:
          steps:
          - task: CmdLine@2
            inputs:
              script: |              
                echo "Fetching CI Pipeline Environment Variables"
                echo "Pipeline-ID: $(resources.pipeline.web-ci.pipelineID)"
                echo "Source-Commit: $(resources.pipeline.web-ci.sourceCommit)"
                echo "Version: $(resources.pipeline.web-ci.version)"
                echo "Version: $(resources.pipeline.web-ci.variables.version)"
                echo "environment: $(resources.pipeline.web-ci.parameters.environment)"
                echo "environment: $(resources.pipeline.web-ci.templateParameters.environment)"

在上面的 CD 管道中,可以得到 pipeline-Id & Source-Commit(即预定义的变量)。但无法获取用户定义的变量和参数值,如版本和参数。

我们将不胜感激。

【问题讨论】:

    标签: azure-devops azure-pipelines-yaml


    【解决方案1】:

    对于您的情况,我会使用 Pipeline Artifacts。你可以在这里找到完整的描述https://tsuyoshiushio.medium.com/how-to-pass-variables-with-pipeline-trigger-in-azure-pipeline-5771c5f18f91

    在 CI 管道中

    将所有必要的变量导出到文本文件,然后将其作为工件发布。

      - task: CmdLine@2
        displayName: Create artifact from variables
        inputs:
          script: |
            echo "##vso[task.setvariable variable=FOO;]$(FOO)" >  $(Build.ArtifactStagingDirectory)/pipeline.env
      - task: PublishBuildArtifacts@1
        displayName: publish variables
        inputs:
          PathtoPublish: '$(Build.ArtifactStagingDirectory)'
          ArtifactName: 'variables'
          publishLocation: 'Container'
    

    在 CD 管道中

    创建一个任务,它将下载包含变量的工件。

    - task: DownloadBuildArtifacts@0
      displayName: 'Download variables'
      inputs:
        buildType: 'specific'
        project: '<YOUR_PROJECT_ID_HERE>'
        pipeline: '<YOUR_PIPELINE_ID_HERE>'
        buildVersionToDownload: 'latest'
        downloadType: 'specific'
        downloadPath: '$(System.ArtifactsDirectory)'
    

    【讨论】:

    • 您好 Cloudziu,感谢您的回答。如果我们使用的是 azure 托管管道,它工作正常。在我的情况下,我正在使用滚动策略部署(即 environment.machine_name),它工作不正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多