在身份验证失败的情况下从gitlab ci执行reckonTagCreate

时间:2019-11-11 19:57:41

标签: gitlab-ci reckon-plugin

我已经设置了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通信的方式必须有一些特殊之处。

1 个答案:

答案 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插件时将其包围在其中