Azure Devops Pipeline YAML 中的 Git 标记名称

Posted

技术标签:

【中文标题】Azure Devops Pipeline YAML 中的 Git 标记名称【英文标题】:Git tag name in Azure Devops Pipeline YAML 【发布时间】:2019-10-27 18:33:12 【问题描述】:

总结

如何在 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。那么...如何获取标签的名称?

【问题讨论】:

我尝试了以下操作:export VERSION_TAG=`git describe --tags` 。但是,这不起作用,因为....一些未知的原因。 不应该暴露一个构建变量吗?? @4c74356b41 应该是,但不是。请参阅下面的答案以获取解决方案。 【参考方案1】:

对于windows vm,可以使用下面的脚本来获取tag:

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'

【讨论】:

【参考方案2】:

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

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 中设置的局部变量用作值。

【讨论】:

本地我得到v0.0.0,但在天蓝色管道中我得到你的解决方案v0.0.0-5-g59265d7 @dhcgn 我有同样的问题。你找到答案了吗? @Echo 是的,请参阅我的问题中的 yaml:***.com/q/62230694/1776231(我使用了安装在 linux VM 上的 powershell)

以上是关于Azure Devops Pipeline YAML 中的 Git 标记名称的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure DevOps Pipeline 访问 SQL Server

如何从 Azure DevOps Pipeline 读取 Azure 文件共享文件

在 Azure DevOps Pipeline 模板中使用变量

在 azure 后端存储中使用状态文件将 terraform 的输出传递到 Azure Devops Pipeline

Azure DevOps Pipeline 更改服务结构应用程序的证书权限

Azure Devops Pipeline YAML 中的 Git 标记名称