仅当 jobA 通过时我才需要运行 jobB。仅当我的测试阶段成功通过时,我才必须创建一个发布标签(我已经在此处添加了一个代码)。我的存储库已经有“README.md”文件。我只是在测试阶段检查它的存在。所以,我的考验阶段总会过去的。请让我知道如何编写代码来创建发布标签。标签可以是例如 v1.1
stages:
- build
- test
- release
jobA:
stage: test
script:
- test -e README.md && exit 0
jobB:
stage: release
when: on_success
script:
# code for creating a release tag
GITLAB_API_TOKEN
(PAT - 个人访问令牌))之外,您现在还可以使用专用的私有project令牌:
请参阅 GitLab 13.9(2021 年 2 月)
支持 PRIVATE-TOKEN 使用 Release-CLI 创建版本
在此里程碑中,我们添加了将
与release-cli
一起使用的功能,如 创建版本 API 文档中所定义。PRIVATE-TOKEN
这可以覆盖创建发布的用户,并通过允许连接项目级别
或使用机器人用户帐户的PRIVATE-TOKEN
来支持自动化。PRIVATE-TOKEN
它可能无法完全回答您的问题,但希望它有所帮助。也许可以尝试以下方法。我的解决方案假设您有
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
例如在下一步中。
Gitlab 13.2 在 .gitlab-ci.yml 中引入了 release 关键字。不再需要创建“jobB”作业,您可以在主作业中添加关键字,只要它可以访问release-cli即可:
stages:
- build
- test
- release
jobA:
stage: test
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- test -e README.md && exit 0
release:
tag_name: $TAG
description: './path/to/CHANGELOG.md'
GitLab 文档有一些示例来动态提供 $TAG 和描述。
可能“依赖关系”机制是实现这一目标的正确工具。因此,您可以使用 README.MD(或测试结果文件夹)作为 jobA 中的工件,并在 jobB 中添加对 jobA 的依赖项
jobB:
....
dependencies:
- jobA
如果 jobA
失败,它不会为 jobB 提供依赖工件。因此,它也会失败。
(编辑)你检查过受保护的标签gitlab设置吗? (设置 -> 存储库 -> 受保护的标签) 默认设置为:
默认情况下,受保护的标签旨在:防止除维护者之外的所有人创建标签
防止任何人更新标签
防止任何人删除标签