Git tag name in Azure Devops Pipeline YAML

会有一股神秘感。 提交于 2020-01-04 03:13:05

问题


Summary

How do I get the name of the current git tag in an Azure Devops Pipeline YAML-file?

What Am I Trying to Do?

I am setting up a build pipeline in Azure Devops. The pipeline triggers when a new git tag is created. I then want to build docker images and tag them with the git tag's name.

My YAML pipeline looks something like this:

# 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'

And the docker-compose file I am referencing something like this:

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 ]

As you can see, the tag name in the docker-compose file is taken from the environment variable VERSION_TAG. In the YAML pipeline, I am trying to set the environment variable VERSION_TAG based on the current GIT tag. So... how do I get the name of the tag?


回答1:


Ok, this was a bit trickier than I expected. Here's the step required to set the variable:

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

This script sets the variable VERSION_TAG to the name of the latest git tag. It does so in three steps:

1: git describe --tags

Prints the name of the current/latest tag

2: VERSION_TAG=`...`

Sets the output of step 1 to a local variable

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

Prints out a command that sets the variable in Azure Devops. The local variable set in step 2 is used as the value.




回答2:


For windows vm, you can use the script below to get 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'


来源:https://stackoverflow.com/questions/56575840/git-tag-name-in-azure-devops-pipeline-yaml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!