我试图通过ci
执行程序在本地运行docker
管道以进行调试,运行:
gitlab-runner exec docker <job_name>
在某个时间点,它需要克隆私人git
回购。
我使用的是gitlab建议的典型recipe。
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
......
答案 0 :(得分:0)
答案 1 :(得分:0)
我能够解决此问题,因为我的原因是因为私钥格式错误。
这是我的gitlab-ci.yml
的样子:
variables:
MY_PRIVATE_KEY: |
-----BEGIN RSA PRIVATE KEY-----
UYADFAIBAAKCAgEAtn4G7FlPz5IAqbxA0MTO8ip.........................
yo9Gob/UXA3RFpbTMPItenz6r9D9dn..................................
.................................
-----END RSA PRIVATE KEY-----
before_script:
- apt-get update -y
- 'which ssh-agent || ( apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$MY_PRIVATE_KEY")
如果ssh-add <(echo "$MY_PRIVATE_KEY")
无法正常工作,请将其替换为:
- echo -n "$MY_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
对我来说,此替代方法正在起作用。
答案 2 :(得分:0)
我不太了解如何在本地调试 git ci。就我个人而言,我不需要它,如果它是关于 ssh 和密钥的,它没有多大帮助,因为密钥的处理方式不同。
注意两点:
您的 .gitlab.yml 可能看起来像这样。根据您使用的映像,您必须安装 ssh-agent(before_script 部分的第一行)。
deploy:
image: ubuntu:latest
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
- ssh -t user@host "remote command && other command on remote"
$SSH_PRIVATE_KEY
在此脚本中未定义,而是作为掩码变量定义。见GitLab CI/CD environment variables