我尝试通过docker
执行器在本地运行ci
管道以进行调试,方法是运行:
gitlab-runner exec docker <job_name>
在某个时间点,它需要克隆一个私有的git
存储库。
我使用的是gitlab建议的典型食谱。
variables:
MY_PRIVATE_KEY: <my_private_key>
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$MY_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
但是,在尝试将密钥添加到代理时:
$ ssh-add <(echo "$MY_PRIVATE_KEY")
Enter passphrase for /dev/fd/63: Running after script...
ERROR: Job failed: exit code 1
FATAL: exit code 1
我肯定我的钥匙上没有passphrase
。
3条答案
按热度按时间7tofc5zh1#
我不知道如何在本地调试git ci,我个人不需要它,如果它是关于ssh和它的键,它没有太大帮助,因为键的处理是不同的。
记住两件事:
1.不要把你的私钥保存在gitlab仓库中(作为一个文件),也不要把它放到ci脚本中,使用gitlab的功能:掩码变量:https://docs.gitlab.com/ee/ci/variables
1.你可能会在存储私钥时遇到一些问题,因为gitlab对变量的格式有一些限制。一个可行的解决方案是将密码设为base64。加载密钥“/dev/fd/63”时发生GITLAB CI错误:无效格式错误:作业失败:退出代码1
你的.gitlab.yml可能看起来像这样,根据你使用的映像,你必须安装ssh-agent(before_script部分的第一行)。
$SSH_PRIVATE_KEY
未在此脚本中定义,而是作为掩码变量。请参见GitLab CI/CD environment variablesavwztpqn2#
您确定私钥内容设置正确吗?
尝试在
ssh-add
之前添加echo $MY_PRIVATE_KEY
此外,我建议通过Gitlab CI/CD secrets注入,而不是在您的
.gitlab-ci.yml
中mpgws1up3#
我能够管理这个问题,在我的情况下,这是因为一个错误的私钥格式。
下面是我的
gitlab-ci.yml
的外观:如果
ssh-add <(echo "$MY_PRIVATE_KEY")
不起作用,请将其替换为:对我来说,这种变通办法是有效的。