我知道在这里已经有很多关于这个主题的问题了,我尝试了几乎所有他们提出的解决方案,但我目前正处于我无法实现的目的。工作(我想要的方式)。
我有在Jenkins中旋转的docker容器,在这个docker容器中我尝试克隆一个私有存储库。为此,我需要将我的公共Jenkins密钥添加到我的Git存储库,我的docker容器需要知道这个SSH密钥。
我已经可以通过在Jenkinsfile
中执行以下操作来完成此操作:
docker.image('php_jenkins_test').inside('--env COMPOSER_HOME=$WORKSPACE/.composer -v /etc/passwd:/etc/passwd:ro -v /home/jenkins/.ssh:/home/jenkins/.ssh:ro') {
sshagent(['jenkins-ssh-publickey']) {
sh "./test/run-tests.sh"
}
}
我将etc/passwd
和/home/jenkins/.ssh
作为只读卷挂载,原因如下:
/etc/passwd
。known_hosts
(以及我的钥匙?)需要在我的泊坞窗容器内知道。由于/etc/passwd
将jenkins用户映射到/home/jenkins
,因此我必须在我的客户机上安装Jenkins的SSH目录。sshagent
- 命令设置SSH套接字,以便我的密钥可以在我的容器中访问(如果我错了,请更正我,我对Jenkins和Docker来说相当新)。 / LI>
我发现/home/jenkins/.ssh
的安装有点......危险。我将它挂载为只读,但我在一个拥有70多个开发人员的组织中工作,如果其中一个人将我的代码作为示例并删除了:ro
,那么他们很可能会搞砸Jenkins' .ssh
- 文件夹,这非常非常糟糕。
所以我正在寻找一种方法来克隆私有存储库,而无需挂载.ssh
- 文件夹。毕竟,sshagent
- 插件的用途是什么?
由于我的docker容器安装了/etc/passwd
,因此它会在某个时间点查找/home/jenkins
- 文件夹。由于sshagent
将处理我认为的密钥,我只需要关注known_hosts
- 文件。所以我在Dockerfile中尝试了以下内容:
RUN mkdir -p /home/jenkins/.ssh
RUN chmod 700 /home/jenkins/.ssh
RUN ssh-keyscan -t rsa (url to git) >> /home/jenkins/.ssh/known_hosts
不幸的是,这将在root
- 用户下创建目录和文件,所以当我以jenkins
- 用户(Jenkins docker插件的作用)运行我的容器时,我无法访问{ {1}}。
所以我尝试在Jenkins用户运行的容器中的shell脚本中执行此操作:
/home/jenkins/...
再一次:没有运气,因为不允许jenkins用户在mkdir -p /home/jenkins/.ssh
chmod 700 /home/jenkins/.ssh
ssh-keyscan -t rsa (url to git) >> /home/jenkins/.ssh/known_hosts
中创建目录。
回到/home/
,让我们尝试添加以下行:
Dockerfile
再次没有运气,因为RUN chown $(id -u $(whoami)):$(id -g $(whoami)) -R /home/jenkins
会返回whoami
,而不是root
。所以,让我们在其中进行硬编码:
jenkins
再一次,没有运气。我现在收到的消息是" id:jenkins:没有这样的用户" 。
所以你有它:我被卡住了。 如何在Jenkins的docker容器中克隆私有存储库而无需挂载RUN chown $(id -u jenkins):$(id -g jenkins) -R /home/jenkins
- 文件夹?非常感谢有关此主题的任何帮助。我现在盯着这个太久了......