在Gitlab CI/CD管道上获取最新的git标记
我想在Gitlab中设置一个CI/CD管道,它可以读取最新的标记并获取最后一个标记以增加我的下一个版本应用程序。我提供了以下配置:在Gitlab CI/CD管道上获取最新的git标记,git,continuous-integration,gitlab,gitlab-ci,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
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的行为吗?如果是,如何在管道内获取回购协议中的所有标签?您可以使用 默认情况下,结果按最后更新的标记排序,因此,如果要获取最后一个标记,可以按如下方式修改脚本块:
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
您可以使用 默认情况下,结果按最后更新的标记排序,因此,如果要获取最后一个标记,可以按如下方式修改脚本块:
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
如果没有GitLab API,您只需使用:
script:
git describe --abbrev=0 2>/dev/null || echo ''
在变量中赋值以与您的版本进行比较:
script:
last_v=$(git describe --abbrev=0 2>/dev/null || echo '')
如果使用2>/dev/null隐藏错误代码未找到标记,则返回最后一个标记或空字符串
⚠️ 警告:
测试后,将标记消息留空将创建一个轻量级标记,并且上面的命令将不起作用。如果没有GitLab API,您只需使用:
script:
git describe --abbrev=0 2>/dev/null || echo ''
在变量中赋值以与您的版本进行比较:
script:
last_v=$(git describe --abbrev=0 2>/dev/null || echo '')
如果使用2>/dev/null隐藏错误代码未找到标记,则返回最后一个标记或空字符串
⚠️ 警告:
测试后,将标记消息留空将创建一个轻量级标记,并且上面的命令将不起作用。?$CI\u COMMIT\u标记为,如果我只是在没有标记的情况下提交,则不会返回任何标记。$CI\u COMMIT\u标记为,如果我只是提交而没有标记,它不会返回任何标记。有没有办法在管道内部获取标记?如果你没有jq但有docker,你可以用docker run-rm-I imega/jqIs替换jq,有没有办法在管道内部获取标记?如果你没有jq但有docker,你可以用docker run-rm-I imega/jq替换jq