我试图让我的 GitLab 管道自动标记
master
分支,但没有成功。
由于该项目是一个composer包,所以我想要做的是从
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 作业输出中没有显示任何输出,如下图所示
好吧,不知道为什么这不起作用,但我发现我在第一个 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 凭证添加树管道变量来创建标签并将其从管道内推送到主分支,但它现在实际上可以工作。
目前有 2 种方法可以使用自定义标签更改 gitlab 管道名称
使用工作流程:名称。如果您想更改默认标签,这很有用。但不是很有活力。
variables:
PROJECT1_PIPELINE_NAME: 'Default pipeline name' # A default is not required.
workflow:
name: '$PROJECT1_PIPELINE_NAME'
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
variables:
PROJECT1_PIPELINE_NAME: 'MR pipeline: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME'
- if: '$CI_MERGE_REQUEST_LABELS =~ /pipeline:run-in-ruby3/'
variables:
PROJECT1_PIPELINE_NAME: 'Ruby 3 pipeline'
- when: always # Other pipelines can run, but use the default name
使用curl命令在脚本步骤中动态设置它,这对于像$Version这样的动态计算值非常有用
get_unique_semversion:
extends: .get_unique_semversion
stage: version_setup
after_script:
- GitVersion_FullSemVer="$(grep 'GitVersion_FullSemVer=' gitversion.properties)"
- GitVersion_FullSemVer="${GitVersion_FullSemVer#GitVersion_FullSemVer=}"
- CUSTOM_PIPELINE_NAME="$CI_COMMIT_MESSAGE v:$GitVersion_FullSemVer"
- CUSTOM_PIPELINE_NAME=$(echo "$CUSTOM_PIPELINE_NAME" | tr -d '\n')
- apk update
- apk add curl
- >
curl
-H "Job-Token: $CI_JOB_TOKEN"
-X PUT
--data "name=$CUSTOM_PIPELINE_NAME"
$CI_API_V4_URL/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/metadata