首页 > 解决方案 > Jenkins groovy 无法通过 https 端口使用 oauth 令牌克隆 gitlab 存储库

问题描述

我无法使用 oauth2 令牌通过 https 通过 jenkins groovy 从 gitlab 签出代码。

使用相同的 oauth 令牌在 git cli 上进行克隆。我还可以通过 curl 在同一台机器上列出我所有的 Gitlab 项目。

但无法通过 groovy 管道使用 Oauth2 令牌调用 git clone。

约束:Jenkins 服务器需要通过 groovy 脚本使用 oauth2 令牌通过 https 端口(仅)与 gitlab 服务器通信。我想使用 jenkins 凭证管理器来存储 Oauth2 令牌 - 而不是直接通过 s 脚本传递它

错误:状态码 128:stderr:远程:HTTP Basic:访问被拒绝

**用于结帐的 Groovy 代码**

checkout([$class: 'GitSCM', branches: [[name: "*/$GIT_BRANCH"]], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[credentialsId: "$GIT_CREDS_ID", url: "$GIT_URL"]]])

问题是 $GIT_CREDS_ID :只选择具有 SSH 私钥或用户名/密码组合的凭据 ID。但不选择具有 Oauth 令牌的凭证 ID(在安装 git lab 插件后创建)

错误 :


Warning: CredentialId "2002" could not be found. # same is being listed under jenkins credentials
 > git rev-parse --is-inside-work-tree # timeout=10
...
Caused by: hudson.plugins.git.GitException: Command "git fetch --tags --progress https://git.my-gitlab-site.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout: 
stderr: remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://git.my-gitlab-site.git/'


相同的 oauth 令牌可以通过 curl 、 git cli 正常工作,即使我直接在 git 的 https url 中传递它,例如: https://oauth2:SomeDummyToken@git.aa.st/c-swajai/poc_devops_coe.git

但不能通过詹金斯使用相同的。

系统详情 Jenkins 版本。2.172

操作系统“亚马逊 Linux”版本“2”

发现一个相关的错误: https ://issues.jenkins-ci.org/browse/JENKINS-36863

标签: jenkinsgroovyoauth-2.0gitlabjenkins-groovy

解决方案


我发现了一个相关的oldbug(状态:已解决),它似乎在最新版本的 jenkins 中重新出现。其他面临类似问题的解决方法。

创建用户名和密码类型的新凭据

用户名:AnyRandomString
密码:YourOauthToken
凭据 ID:任何自定义数字/字符串

克隆时在 groovy 脚本中使用上述凭证 ID。现在您可以使用 Oauth 令牌在 443 端口上使用 https url 克隆 git


推荐阅读