Gitlab Ci中自动生成版本号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gitlab Ci中自动生成版本号相关的知识,希望对你有一定的参考价值。
参考技术A 开发环境:Gitlab社区版11.3 集成k8s集群与gitlab-runner以下简单介绍在.gitlab-ci.yml文件中自动生成应用版本号及在job中传递版本号过程
Gitlab中有三种变量使用方式:预定义变量、后台(UI)中设置及自定义环境变量
详细参考这里: GitLab CI/CD variables | GitLab
我们规划每次发版时,自动取系统日期的yyyymmddhhmm形式作为版本号,因此,这里必须采用自定义变量形式。
实现原理是在build阶段生成版本号,并使用artifacts将其传递到其他job。
由于gitlab版本比较低,因此在写脚本时和其他版本稍有不同,比如"needs“关键字它就不支持
简单说明:
总结:gitlabCi挺好用,就是共享动态变量有点费劲:)
Gitlab CI/CD 自动标记发布
【中文标题】Gitlab CI/CD 自动标记发布【英文标题】:Gitlab CI/CD auto tagging release 【发布时间】:2021-11-29 02:09:20 【问题描述】:我正在尝试让我的 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 作业输出中没有显示输出,如下图所示
【问题讨论】:
之前可以cat composer.json
进行调试。我认为 grep 命令失败是因为找不到文件或模式。
在之前添加set -xv
命令可能有助于调试。
最后用jq
代替grep
解析JSON 文件怎么样?
【参考方案1】:
好的,不知道为什么这不起作用,但我发现我在第一个 grep 命令中写了Version
(大写V)而不是version
:这不应该是原因的问题,因为在本地相同的命令管道返回 0 但不是错误。
我不想像 @davide-madrisan 建议的那样在管道作业映像上安装额外的 cli 命令,因为我想让它尽可能简单。
提示和技巧
此外,我发现这个有趣的 gitlab 存储库正是我所需要的: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 添加树管道变量来创建标签并将其从管道内推送到主分支,但它现在确实可以工作了。
【讨论】:
以上是关于Gitlab Ci中自动生成版本号的主要内容,如果未能解决你的问题,请参考以下文章