continuous-integration - Gitlab CI/CD 自动标记发布
问题描述
我试图让我的 gitlab 管道自动标记master
分支,但没有运气。
我想做的事
由于该项目是一个作曲家包,我想做的是从composer.json
文件中获取版本号,将其存储在一个变量中,然后将此变量与 git 一起使用来标记分支。
我在做什么
这是我的管道作业部分.gitlab-ci.yml
:
tagging:
stage: publish
image: alpine
only:
- master
script:
- version=$(cat composer.json | grep version | grep -Eo "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+")
- git tag "$(version)"
- git push --tags
错误
我实际上无法说出问题所在,因为 gitlab 作业输出中没有显示任何输出,如下图所示
解决方案
好的,不知道为什么这不起作用,但我发现我Version
在第一个 grep 命令中写(大写 V)而不是version
: 这不应该是问题的原因,因为在本地相同的命令管道返回 0 但不是错误。
我不想像@davide-madrisan 建议的那样在管道作业映像上安装额外的 cli 命令,因为我想让它尽可能简单。
技巧和窍门
此外,我发现这个有趣的 gitlab repo 正是我所需要的:
https ://gitlab.com/guided-explorations/gitlab-ci-yml-tips-tricks-and-hacks/commit-to-repos-during-ci/commit -to-repos-during-ci
结果
所以最后我想出了这个管道工作:
tagging:
stage: publish
only:
- master
script:
- git config --global user.name "${GITLAB_USER_NAME}"
- git config --global user.email "${GITLAB_USER_EMAIL}"
- tag=$(cat composer.json | grep version | grep -Eo "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+")
- git tag "$tag"
- git push --tags http://root:$ACCESS_TOKEN@$CI_SERVER_HOST/$CI_PROJECT_PATH.git HEAD:master
我只需要创建一个个人访问令牌并使用 git credentials 添加树管道变量来创建标签并将其从管道内推送到主分支,但它现在实际上可以工作了。
推荐阅读
- algorithm - 找到 2 名玩家游戏的最大合成向量和
- python - 有效地将 concurrent.futures 并行执行的结果合并到一个新的数据帧中,并在其他数据帧上循环
- google-colaboratory - 将数据集从 figshare 导入到 google colab?
- rust - 为什么我不能借我借的东西,为什么我可以移动一个方法的自我?
- python - 在python中安排5天的6天时间表
- android - 如何在主页片段中嵌入 YouTube 视频
- tensorflow - autokeras 模型转换为 tensorflowjs 模型
- python - 列表理解而不是嵌套的 for 循环
- monitoring - 如何显示前 K 个节点 wrt CPU 使用率?
- git - 使用 Github Actions 持续部署到 Heroku