在不更改 git 存储库结构的情况下解决此问题的一种方法是执行以下步骤:
1. 获取 ssh 主机密钥
获取您正在运行的服务器的 ssh 主机密钥。对于gitlab.com
:
- 跑
ssh-keyscan gitlab.com > known_hosts
- 检查是否与此处
ssh-keygen -lf known_hosts
报告的指纹一致 。
- 复制 的内容并将其粘贴到存储库
known_hosts
上调用的变量上。SSH_KNOWN_HOSTS
这一步只需要一次。
2.配置job使用ssh
before_script:
- git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com".insteadOf "git@gitlab.com:"
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
"ssh://git@gitlab.com"
如果您尝试这样做,则git clone git@gitlab.com:
该位可能会有所不同pip install -e git+ssh://git@gitlab.com/...
; 根据您的需要进行调整。
此时,您的 CI 可以使用 ssh 从另一个(私有)存储库中获取。
3.【奖励干货】
使用这个技巧来写它:
.enable_ssh: &enable_ssh |-
git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com".insteadOf "ssh://git@gitlab.com"
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
并在需要它的工作上启用它
test:
stage: test
before_script:
- *enable_ssh
script:
- ...