我仅在jobA通过时才运行jobB。仅当我的测试阶段成功通过时,我才需要创建一个release标签(我已经添加了一个代码来实现此目的)。我的存储库已经有“ README.md”文件。我只是在测试阶段检查它的存在。因此,我的测试阶段将始终通过。请让我知道如何编写代码来创建发布标签。标签可以是例如v1.1
Psr\Container\ContainerInterface
答案 0 :(得分:1)
除了 Greg Woz 的 answer,其中使用了 GITLAB_API_TOKEN
(一个 PAT -- PErsonal Access Token),您现在还可以使用专用的私有项目< /em> 令牌:
参见 GitLab 13.9(2021 年 2 月)
<块引用>在这个里程碑中,我们添加了将 release-cli
与 PRIVATE-TOKEN
结合使用的功能,如 Create a release API 文档中所定义。
这可以覆盖创建发布的用户,并通过允许连接项目级 PRIVATE-TOKEN
或使用机器人用户帐户的 PRIVATE-TOKEN
来支持自动化。
参见 Documentation 和 Issue。
答案 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
例如在下一步中。