我已经设置了CI,以便在所有测试均成功完成master分支上的新提交后,可以手动创建一个发行标签。为此,我在CI配置中创建了一个手动步骤,如下所示:
.release-template:
stage:
releasing
dependencies:
- assemble
script:
- ./gradlew reckonTagPush -Preckon.scope=$scope -Preckon.stage=$stage -Dorg.ajoberstar.grgit.auth.username=$GIT_USER -Dorg.ajoberstar.grgit.auth.password=$GIT_PASSSWORD
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
此设置失败,并显示身份验证错误。
Execution failed for task ':reckonTagPush'.
> org.eclipse.jgit.api.errors.TransportException: https://gitlab-ci-token@gitlab.com/<group>/<project>.git: not authorized
我正在共享运行器上在gitlab.com上运行它。
用户名和密码在项目的gitlab ci变量中配置。当在gitlab运行程序中使用的同一docker映像内本地运行时,它可以正常工作。因此,gitlab运行程序执行gradle任务或与gitlab git repo通信的方式必须有一些特殊之处。
答案 0 :(得分:0)
通过添加以下脚本解决了推送到git repo的访问权限的问题:
script:
- url_host=`git remote get-url origin | sed -e "s/https:\/\/gitlab-ci-token:.*@//g"`
- git remote set-url origin "https://gitlab-ci-token:$GIT_TOKEN@$url_host"
- ./gradlew reckonTagPush -Preckon.scope=$scope -Preckon.stage=$stage -Dorg.ajoberstar.grgit.auth.username="$GIT_USER" -Dorg.ajoberstar.grgit.auth.password="$GIT_TOKEN"
此处最显着的变化是设置git远程URL,以及在将gitlab ci变量传递给reckon插件时将其包围在其中