gradle - 是否可以从 gitlab 工作推送到 gitlab
问题描述
我想将标签推送到正在运行作业的 gitlab 存储库。我正在使用使用 grgit/JGit API 的 Gradle 插件。Reckon 正在管理语义版本控制,并且能够创建标签并将其推送到 Git 存储库。
首先,我想在 GitLab SaaS 中运行。而且我假设我需要一种令牌,因此出于安全原因我不必传递我的个人凭据?然后我还必须在 GitLab 托管环境中运行它。但我希望在这两种环境中它应该以相同的方式工作。
有一些类似部署密钥的东西,但我真的找不到任何关于如何使用它们的参考资料。但也许部署密钥并不是真正为这种操作而设计的。
.release-template:
stage:
release
image: adoptopenjdk:11-jdk-hotspot
dependencies:
- deliver
script:
- |
./gradlew reckonTagPush -Preckon.scope=$scope -Preckon.stage=$stage \
-Dorg.ajoberstar.grgit.auth.username=${???} \
-Dorg.ajoberstar.grgit.auth.password=${???}
artifacts:
paths:
- build/
#only:
# - master
when: manual #ONLY MANUAL RELEASES, ONLY FROM MASTER
release-major:
extends: .release-template
variables:
scope: major
stage: final
release-minor:
extends: .release-template
variables:
scope: minor
stage: final
release-patch:
extends: .release-template
variables:
scope: patch
stage: final
解决方案
如果您所做的只是向 repo 添加一个 git 标签,而不是添加提交、合并分支等,您可以简单地使用标签 API 创建一个新标签:
curl --request POST --header "PRIVATE-TOKEN: $(CI_JOB_TOKEN)" "https://gitlab.example.com/api/v4/projects/:project_id:/repository/tags?tag_name=test&ref=master"
该$CI_JOB_TOKEN
变量是Gitlab 自动提供给正在运行的作业的预定义变量。具体$CI_JOB_TOKEN
将持有一个非管理员 API 令牌,这对于标签 API 应该没问题。
如果您使用需要管理员权限的其他 API,则必须使用管理员的个人访问令牌。
推荐阅读
- spring - 表上的@Query 更新命令抛出空指针异常
- oauth-2.0 - 使用 Bot Framework 进行图形身份验证的最大超时限制是多少?如何设置?
- python - E128 延续线缩进不足,用于视觉缩进和 E122 延续线缺少缩进或在 flake8 中缩进
- spring-boot - junit 测试中的自定义属性,例如 application.setDefaultProperties
- html - 独特按钮形状上的伪元素和背景的透明度问题
- set - 如何在使用 Mathematica 的扑克游戏中检查手牌中是否包含一对牌?
- flutter - 导航到另一条路线后如何使用 Provider?
- javascript - 如何仅打印出真实的对象值?
- laravel - Laravel - 获取多对多表的附加属性
- render - 如何在 Blender 中快速渲染低分辨率的简单场景?