在 Gitlab CI/CD 管道上获取最新的 git 标签

den*_*gas 5 git continuous-integration gitlab gitlab-ci

我想在 Gitlab 中设置一个 CI/CD 管道,它可以读取最新标签并获取最后一个标签以增加我的下一个版本应用程序。我带着这个配置来了:

stages:
  - version

calculate_version:
  image:
    name: alpine/git:latest
    entrypoint: [""]
  stage: version
  script:
    - VERSION=$(git tag);test -z "$VERSION" && echo "no version tag found" && exit 1
    - CMDLINE="$VERSION";
    - echo $VERSION
    - echo $CMDLINE > cmdline
  artifacts:
    paths:
      - cmdline
Run Code Online (Sandbox Code Playgroud)

但是我没有在 $VERSION 上列出标签。它看起来像 Gitlab 没有传递存储库上的标签。但是,如果我创建并推送一个新标签,它只会显示该新标签,而不是我预期的所有标签列表。

这是 GitLab ci/cd 的行为吗?如果是,我怎样才能在管道内获得我的回购中的所有标签?

Nic*_*ter 8

您可以使用Gitlab API获取标签

默认情况下,结果按最后更新的标签排序,所以如果你想得到最后一个,你可以像这样修改你的脚本块:

  script:
    - VERSION=$(curl -Ss --request GET --header "PRIVATE-TOKEN: <REPLACE_BY_A_VARIABLE>" "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/repository/tags" | jq -r '.[0] | .name')
    - test -z "$VERSION" && echo "no version tag found" && exit 1
Run Code Online (Sandbox Code Playgroud)


Moh*_*ufi 8

您可以非常轻松地完成此操作,无需很长的脚本代码。

script:
  - git fetch --tags
  - git tag --list | sort -V | tail -n1
Run Code Online (Sandbox Code Playgroud)

在变量 ${VER} 中分配您的版本:

script:
  - VER=$(git tag --list | sort -V | tail -n1)
Run Code Online (Sandbox Code Playgroud)