首页 > 解决方案 > 是否可以从 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

标签: gradlegitlabgitlab-cigit-push

解决方案


如果您所做的只是向 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,则必须使用管理员的个人访问令牌。


推荐阅读