使用具有写入权限的 Gitlab 部署密钥

san*_*sbl 6 ssh gitlab gitlab-ci gitlab-ci-runner

我目前正在运行 CE 版本 8.17.4,并且正在尝试设置具有写访问权限的部署密钥(从 8.16 开始),以便我的运行器实例可以将构建工件提交回存储库。我采取了以下步骤来设置它:

  • 在 runner 实例上,我使用以下命令生成了 ssh 密钥对: 

    sudo ssh-keygen -t rsa -C "label" -b 4096

  • 生成的密钥对已保存到/home/gitlab-runner/.ssh/id_rsa并受密码保护。

  • 在 Gitlab 中,我从管理控制台创建了一个公共部署密钥,并将id_rsa.pub的内容粘贴到适当的字段中,并验证密钥指纹是否匹配。我选中了“允许写访问”框。 
  • 在我希望从运行程序启用存储库访问的私有项目中,我启用了新创建的公共部署密钥。
  • 这是一个 LaTeX 文档库,因此在.gitlab-ci.yml文件中,我在构建 pdf 后发出以下脚本:

    after_script:   - "git commit -am 'autobuild PDF'"   - "git push origin master"

提交更改后,构建在 runner 上成功运行,直到git push origin master命令,并抛出此错误:

fatal: Authentication failed for 'http://gitlab-ci-token:xxxxxxxxxxxxxxxx@host/project.git/'

好的。几个问题:

  1. 如果部署密钥只是一个 SSH 密钥,它不应该连接到安全端口还是有关系?我没有找到太多关于使用这个新的写权限部署关键特性的文档,所以我在上面采取的步骤中遗漏了什么吗?
  2. 我是否需要在提交消息中包含[ci skip]以避免循环 CI 构建?我在此功能的原始发行票中看到了这个问题,但没有看到是否需要执行此步骤。 

谢谢你的帮助!

小智 1

Jawad 的评论对我有用:你需要强制 SSH。例如

git remote add ssh_remote git@host:user/project.git
git push ssh-remote HEAD:dev
Run Code Online (Sandbox Code Playgroud)

谢谢贾瓦德