我设置了 GitLab 和 GitLab CI 来托管和测试我的一些私人存储库。对于此系统下的作曲家模块,我设置了 Satis 来解析我的私有包。
显然这些私有包需要 ssh 密钥来克隆它们,并且我在终端中可以使用它 - 我可以运行composer install并获取这些包,只要我添加了密钥ssh-add
在壳里。
但是,当在 GitLab CI 中运行我的测试时,如果项目具有任何这些依赖项,则测试将无法完成,因为我的 GitLab 实例需要身份验证才能获取 deps(显然),并且测试失败并提示Host key verification failed
.
我的问题是如何设置,以便运行程序运行测试时无需密码即可向 gitlab 进行身份验证?我尝试在我的跑步者中放置无密码 ssh 密钥~/.ssh
文件夹,但是构建甚至不会添加键“evalssh-agent -s
“随后的 ssh-add 似乎失败,表示代理未运行......
另请参阅其他解决方案:
- git 子模块权限(参见马可·A.的回答 https://stackoverflow.com/a/42224451/831180)
- 工作令牌并覆盖 git 配置中的存储库(请参阅a544jh 的回答 https://stackoverflow.com/a/49552383/831180)
这里是 SSH 密钥的完整操作方法:
总体设计
- 生成一对 SSH 密钥
- 将私有变量添加为项目的安全环境变量
- 使私有的可用于 GitLab-CI 上的测试脚本
- 将公共密钥添加为每个私有依赖项上的部署密钥
生成一对 SSH 公钥和私钥
生成一对不带密码的 SSH 公钥和私钥:
ssh-keygen -b 4096 -C "<name of your project>" -N "" -f /tmp/name_of_your_project.key
将 SSH 私钥添加到您的项目中
您需要将密钥作为安全环境变量添加到您的项目中,如下所示
下列的:
- browse
https://<gitlab_host>/<group>/<project_name>/variables
- 单击“添加变量”
- 填写文本字段
Key
with SSH_PRIVATE_KEY
- 填写文本字段
Value
使用 SSH 私钥本身
- 点击“保存更改”
将 SSH 私钥公开给您的测试脚本
为了使您的私钥可用于您的测试脚本,您需要添加
以下内容给您的.gitlab-ci.yml
file:
before_script:
# install ssh-agent
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# run ssh-agent
- eval $(ssh-agent -s)
# add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
# disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
# WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
代码片段来自 GitLab 文档 https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc//ci/ssh_keys/README.md
将公共 SSH 密钥添加为所有私有依赖项的部署密钥
您需要将公共 SSH 密钥注册为所有私有密钥的部署密钥
依赖关系如下:
- browse
https://<gitlab_host>/<group>/<dependency_name>/deploy_keys
- 单击“新部署密钥”
- 填写文本字段
Title
与您的项目名称
- 填写文本字段
Key
使用公共 SSH 密钥本身
- 单击“创建部署密钥”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)