Git 当 url 的令牌部分时克隆不工作(身份验证错误)

Git clone not working when token part of the url (authentication error)

我正在将我们的内部 GitLab-CE 迁移到 GitLab-EE。在检查 CI 管道是否正常工作时,我注意到那些使用 CI_JOB_TOKEN 克隆存储库的管道不起作用。经过一些调试后,我设法将错误追踪到实际的 git 克隆命令。如果访问令牌是克隆 URL 的一部分,则该命令不起作用。为了验证我的假设,我创建了一个个人访问令牌并尝试使用命令克隆一个存储库 git clone https:\myusername:accesstoken@gitlab.internal/myusername/project1.git。该命令因身份验证错误而失败(gitlab nginx 中的 403)。

当我 运行 在交互模式下使用相同的命令时:git clone https:\myusername@gitlab.internal/myusername/project1.git 并在出现提示时使用我的访问令牌作为密码,命令工作正常。

知道问题出在哪里。是否有一些配置设置不允许使用 passwords/tokens 作为 URL.

的一部分

P.S。我们的服务器目前正在使用自签名证书,但我认为这不是问题,因为第二个命令工作正常。

经过一些测试和谷歌搜索后,我设法找到了解决方法。使用 shell 脚本与环境变量相结合,管道现在使用以下步骤 (.gitlab-ci.yml):

script:
  - echo 'echo $CI_JOB_TOKEN' > ~./.git-askpass
  - chmod +x ~./.git-askpass
  - export GIT_ASKPASS=~./.git-askpass
  - git clone https:\gitlab-ci-token@gitlab.internal/myusername/project1.git

现在,当 git clone 命令提示输入用户 gitlab-ci-token 的密码时,将执行脚本并将输出用作 password/token.

有趣的是,考虑到官方文档使用令牌作为 url (https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html#gitlab-cicd-job-token) 的一部分,并且因为它正在较旧的 gitlab 安装(旧版是 13.7.3 CE,新版是 14.7.0 EE)。