Gitlab CI/CD 自动标记发布

问题描述 投票:0回答:2

我试图让我的 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 作业输出中没有显示任何输出,如下图所示

enter image description here

continuous-integration gitlab-ci git-tag
2个回答
10
投票

好吧,不知道为什么这不起作用,但我发现我在第一个 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 凭证添加树管道变量来创建标签并将其从管道内推送到主分支,但它现在实际上可以工作。


0
投票

目前有 2 种方法可以使用自定义标签更改 gitlab 管道名称

  1. 使用工作流程:名称。如果您想更改默认标签,这很有用。但不是很有活力。

    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
    
  2. 使用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
    
© www.soinside.com 2019 - 2024. All rights reserved.