链接Azure DevOps CI和CD Yaml管道

时间:2020-08-31 21:10:27

标签: azure-devops yaml azure-pipelines

我创建了两个Yaml管道。

  1. CI yaml管道,可生成工件并将工件上传到Nexus存储库。
  2. 我想设计用于从Nexus Repository下载工件并部署到多个环境的CD Yaml管道。

当我使用经典发行管道时,可以从CI管道链接已发布的构建工件。 enter image description here enter image description here

但是,当我使用YAML CD流水线时,我不知道如何链接CI流水线,以便可以从CI构建中提取$(Build.BuildNumber)。到目前为止,这是我尝试过的。

  "dependencies": {
    "strapi": "3.1.4",
    "strapi-admin": "file:packages/strapi-admin",
    "strapi-connector-bookshelf": "3.1.4",
    "strapi-plugin-content-manager": "3.1.4",
    "strapi-plugin-content-type-builder": "3.1.4",
    "strapi-plugin-documentation": "3.1.4",
    "strapi-plugin-email": "3.1.4",
    "strapi-plugin-upload": "3.1.4",
    "strapi-plugin-users-permissions": "3.1.4",
    "strapi-utils": "3.1.4"
  },

,并尝试使用此变量从CI构建中获取BuildNumber。 $(resources.pipeline.test.Build.BuildNumber),但看起来这种语法是错误的。

任何人都可以分享,如果您知道如何使它正常工作?

谢谢您的帮助。

2 个答案:

答案 0 :(得分:1)

要从CI管道链接已发布的构建工件,可以使用称为“下载构建工件”的内置任务。

enter image description here

在任务设置中,您可以按照其项目,构建管道和构建版本选择工件,就像在Classic UI发布管道中可以执行的操作一样。

这是任务的示例脚本:

- task: DownloadBuildArtifacts@0
  name: {task name}
  inputs:
    buildType: 'specific'
    project: '{project id}'
    pipeline: '{pipeline id}'
    buildVersionToDownload: 'latest'
    downloadType: 'single'
    artifactName: '{artifact name}'
    downloadPath: '$(System.ArtifactsDirectory)'

该任务具有输出变量BuildNumber。您可以使用{taskname}.BuildNumber来获取从中下载工件的内部版本号。

答案 1 :(得分:0)

该信息似乎无法在变量中使用(尚未)。我尝试了这些变量:

- script: |
    echo '$(Build.TriggeredBy.BuildNumber)'!
    echo '$(Build.TriggeredBy.BuildId)'!
    echo '$(Build.TriggeredBy.DefinitionId)'!
    echo '$(Build.TriggeredBy.DefinitionName)'!
    echo '$(Build.TriggeredBy.ProjectID)'!
    echo '$(Build.BuildNumber)'!
    echo '$(Build.RequestedFor)'!
    echo '$(Build.RequestedForEmail)'!
    echo '$(Build.RequestedForId)'!

这就是我得到的:

$(Build.TriggeredBy.BuildNumber)!
$(Build.TriggeredBy.BuildId)!
$(Build.TriggeredBy.DefinitionId)!
$(Build.TriggeredBy.DefinitionName)!
$(Build.TriggeredBy.ProjectID)!
20200901.12!
Microsoft.VisualStudio.Services.TFS!
!
00000002-0000-8888-8000-000000000000!

所以我只为$(Build.BuildNumber)获得了有意义的价值。

因此,要获取管道触发器的内部版本号,可以使用REST API:

variables:
  devopsAccount : 'thecodemanual'
  projectName : 'DevOps Manual'

steps:
- pwsh: |
    # Get a build info
    $uri = "https://dev.azure.com/$(devopsAccount)/$(projectName)/_apis/build/builds/$(Build.BuildId)?api-version=6.0-preview.6&expand=all"

    Write-Host $uri

    # Invoke the REST call
    $result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}

    $buildNumber = $result.triggerInfo.version
    Write-Host $buildNumber

    echo "##vso[task.setvariable variable=triggeredByBuildNumber]$buildNumber"
- script: |
    echo '$(triggeredByBuildNumber)'!

通过这种方法,我检索了20200901.14,它是构建触发器的正确​​值。

并且触发器信息具有更多详细信息:

    "triggerInfo": {
        "artifactType": "Pipeline",
        "alias": "test",
        "projectId": "4fa6b279-3db9-4cb0-aab8-e06c2ad550b2",
        "pipelineTriggerType": "PipelineCompletion",
        "source": "kmadof.dm-so-46",
        "pipelineId": "3320",
        "version": "20200901.14"
    },

如果您需要一些。