Azure Devops Pipeline YAML中的Git标记名称

时间:2019-06-13 07:56:00

标签: git azure-devops yaml azure-pipelines git-tag

摘要

如何在Azure Devops Pipeline YAML文件中获取当前git标记的名称?

我要做什么?

我正在Azure Devops中建立构建管道。当创建新的git标签时,管道触发。然后,我想构建docker映像并用git标记的名称标记它们。

我的YAML管道如下所示:

# Trigger on new tags.
trigger:
  tags:
    include:
    - '*'

stages:
- stage: Build
  jobs:
  - job: Build
    pool:
      vmImage: 'ubuntu-latest'

    steps:
    - script: export VERSION_TAG={{ SOMEHOW GET THE VERSION TAG HERE?? }}
      displayName: Set the git tag name as environment variable

    - script: docker-compose -f k8s/docker-compose.yml build
      displayName: 'Build docker containers'

    - script: docker-compose -f k8s/docker-compose.yml push
      displayName: 'Push docker containers'

我正在引用的docker-compose文件是这样的:

version: '3'
services:
  service1:
    image: my.privaterepo.example/app/service1:${VERSION_TAG}
    build:
      [ ... REDACTED ]
  service2:
    image: my.privaterepo.example/app/service2:${VERSION_TAG}
    build:
      [ ... REDACTED ]

如您所见,docker-compose文件中的标签名称来自环境变量VERSION_TAG。在YAML管道中,我试图基于当前的GIT标签设置环境变量VERSION_TAG。那...我怎么得到标签的名字?

2 个答案:

答案 0 :(得分:0)

好吧,这比我预期的要复杂一些。这是设置变量所需的步骤:

steps:
    - script: VERSION_TAG=`git describe --tags` && echo "##vso[task.setvariable variable=VERSION_TAG]$VERSION_TAG"
      displayName: Set the tag name as an environment variable

此脚本将变量VERSION_TAG设置为最新git标签的名称。它分三个步骤完成:

1:git describe --tags

打印当前/最新标签的名称

2:VERSION_TAG=`...`

将第1步的输出设置为局部变量

3:echo "##vso[task.setvariable variable=VERSION_TAG]$VERSION_TAG"

打印出一个在Azure Devops中设置变量的命令。将步骤2中设置的局部变量用作值。

答案 1 :(得分:0)

对于Windows vm,您可以使用以下脚本获取标签:

steps:
- powershell: |
   $CI_BUILD_TAG = git describe --tags
   Write-Host "##vso[task.setvariable variable=CI_BUILD_TAG]$CI_BUILD_TAG"
  displayName: 'Set the tag name as an environment variable'