首页 > 解决方案 > 在 Gitlab CI/CD 管道上获取最新的 git 标签

问题描述

我想在 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

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

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

标签: gitcontinuous-integrationgitlabgitlab-ci

解决方案


您可以使用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

推荐阅读