使用GitLab API v4无法创建annotated tag的问题如何解决?
问题根因
你原脚本中的curl请求被单引号包裹且前缀带#,属于被注释状态并未实际执行,之前所有标签都是通过git tag ${TAG}生成的轻量标签,自然没有附注信息;本地打附注标签报“Cannot autodetect email”是因为CI Runner的Git环境未配置基础用户信息。
解决方案1:修复本地打标签的报错问题
只需在打标签前给当前CI作业的仓库临时配置Git用户信息即可,该配置仅作用于当前作业的临时目录,不会产生全局影响:
script: # 临时配置Git用户信息,仅作用于当前仓库目录 - git config user.name "CI Tag Bot" - git config user.email "ci-bot@example.com" # 创建带附注的标签 - git tag -a ${TAG} -m "testtag" || true - git push origin ${TAG}
解决方案2:直接通过GitLab API创建带附注的标签
不需要本地操作Git,也不需要配置用户信息,直接去掉curl命令的注释即可,注意要删掉包裹curl的多余单引号和前缀的#:
script: - curl -X POST --header "PRIVATE-TOKEN: ${CI_TAG_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/repository/tags?tag_name=${TAG}&ref=master&message=testtag" || true
该方案可以完全删掉之前的git tag和git push命令,GitLab收到message参数后会自动创建带附注的annotated tag,不会生成轻量标签。如果需要同时添加发布说明,还可以追加&release_description=你的发布说明参数到请求URL后。
内容的提问来源于stack exchange,提问作者akse
相关产品推荐
相关产品推荐

