如何使用.gitlab-ci.yml文件创建发布标签

时间:2019-08-23 21:19:23

标签: tags release gitlab-ci

我仅在jobA通过时才运行jobB。仅当我的测试阶段成功通过时,我才需要创建一个release标签(我已经添加了一个代码来实现此目的)。我的存储库已经有“ README.md”文件。我只是在测试阶段检查它的存在。因此,我的测试阶段将始终通过。请让我知道如何编写代码来创建发布标签。标签可以是例如v1.1

Psr\Container\ContainerInterface

4 个答案:

答案 0 :(得分:1)

除了 Greg Wozanswer,其中使用了 GITLAB_API_TOKEN(一个 PAT -- PErsonal Access Token),您现在还可以使用专用的私有项目< /em> 令牌:

参见 GitLab 13.9(2021 年 2 月)

<块引用>

支持 PRIVATE-TOKEN 使用 Release-CLI 创建发行版

在这个里程碑中,我们添加了将 release-cliPRIVATE-TOKEN 结合使用的功能,如 Create a release API 文档中所定义。

这可以覆盖创建发布的用户,并通过允许连接项目级 PRIVATE-TOKEN 或使用机器人用户帐户的 PRIVATE-TOKEN 来支持自动化。

参见 DocumentationIssue

答案 1 :(得分:0)

可能dependencies机制是执行此操作的正确工具。因此,您可以将README.MD(或测试结果文件夹)用作 jobA 中的工件,并在 jobB < / p>

jobB: .... dependencies: - jobA

如果 jobA 失败,则不会为 jobB 提供相关的工件。因此,它也会失败。

(编辑) 您是否已检查受保护的标签 gitlab设置? (设置->存储库->受保护标签) 默认设置为:

  

默认情况下,受保护的标签旨在:

     

防止维护人员以外的所有人创建标签

     

防止任何人更新标签

     

防止任何人删除标签

答案 2 :(得分:0)

这是我的jobB的试用代码。但是,这不允许我从.gitlab-i.yml文件中推送git标签。它说我不能推动这个项目。

jobB:
  stage: release
  when: on_success
  # script:
  #   - curl --header 'Content-Type:application/json' --header "PRIVATE-TOKEN:46yMT-Aw_b5VRQjkkQkQ" --data '{}' --request POST http://127.0.0.1:3000/api/v4/projects/gitlab_training/repository/tags

  script:
    # - git tag -d v4
    - git tag -a v4 -m "Version created by gitlab-ci Build"
    - git push https://gitlab-ci-token:gfM_9zYDdyG1ZspiEKH5@gitlab.apexsemi.com/apex/gitlab_training.git/ HEAD:master
    # - git push origin v4
    - git push origin :refs/tags/v4

答案 3 :(得分:0)

它可能无法完全回答您的问题,但希望对您有所帮助。也许尝试以下。我的解决方案假定您拥有package.json的版本,因为这是最流行的情况-但是,如果您使用任何其他方式来定义版本,则没有错:

version:
  stage: version
  only:
    - master
  script:
    - VERSION_NUMBER=$(node -p "require('./package.json').version")
    - "curl --header \"PRIVATE-TOKEN: $GITLAB_API_TOKEN\" --request POST  \"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/repository/tags?tag_name=v${VERSION_NUMBER}&ref=$CI_COMMIT_SHA&message=Tagged%20with%20version%20v${VERSION_NUMBER}\""

然后您可以使用:

publish:
  stage: publish
  only:
    - tags
  script:
    - npm version --no-git-tag-version ${CI_COMMIT_TAG:1}
    - npm publish --access public

例如在下一步中。