Gie*_*ers 7 git ssh git-clone jenkins docker
我知道在 SO 上已经有很多关于这个主题的问题,我尝试了他们提出的几乎所有解决方案,但我目前无法让它工作(我想要的方式)是)。
我有一个在 Jenkins 中启动的 docker 容器,在这个 docker 容器中,我尝试克隆一个私有存储库。为此,我需要将我的公共 Jenkins 密钥添加到我的 Git 存储库中,并且我的 docker 容器需要知道这个 SSH 密钥。
我已经能够通过在 my 中执行以下操作来做到这一点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"
}
}
Run Code Online (Sandbox Code Playgroud)
由于以下原因,我将我的etc/passwd
和/home/jenkins/.ssh
作为只读卷挂载:
/etc/passwd
.known_hosts
(和我的密钥?)需要在我的 docker 容器中知道。由于/etc/passwd
将 jenkins 用户映射到/home/jenkins
,我还必须在我的来宾计算机上安装 Jenkins 的 SSH 目录。sshagent
-command树立SSH插座等等,我的钥匙是我的容器内访问(纠正我,如果我错了,我是相当新的詹金斯和码头工人)。就像我说的:这已经有效了。通过此设置,我可以在 Jenkins 的 docker 容器中克隆私有 git 存储库。
我发现安装/home/jenkins/.ssh
有点......危险。我挂载为只读,但与70个多家开发商的组织工作,我如果其中一个需要我的代码示例和删除:ro
,没准他们会搞砸了詹金斯的.ssh
-folder,这是非常,非常坏的。
因此,我正在寻找一种无需挂载 - 文件.ssh
夹即可克隆私有存储库的方法。毕竟,这不是sshagent
-plugin 的用途吗?
由于我/etc/passwd
的/home/jenkins
docker容器安装了它,它会在某个时间点查找-folder。由于sshagent
会处理密钥,我想我只需要关心known_hosts
-file。所以我在我的 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
Run Code Online (Sandbox Code Playgroud)
不幸的是,这将在root
-user下创建目录和文件,因此当我以jenkins
-user身份运行我的容器(Jenkins docker 插件所做的)时,我无法访问/home/jenkins/...
.
因此,我尝试在由 Jenkins 用户运行的容器中的 shell 脚本中执行此操作:
mkdir -p /home/jenkins/.ssh
chmod 700 /home/jenkins/.ssh
ssh-keyscan -t rsa (url to git) >> /home/jenkins/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
再一次:没有运气,因为 jenkins-user 不允许在/home/
.
回到Dockerfile
,让我们尝试添加以下行:
RUN chown $(id -u $(whoami)):$(id -g $(whoami)) -R /home/jenkins
Run Code Online (Sandbox Code Playgroud)
再次没有运气,因为whoami
返回root
,而不是jenkins
。因此,让我们对其进行硬编码:
RUN chown $(id -u jenkins):$(id -g jenkins) -R /home/jenkins
Run Code Online (Sandbox Code Playgroud)
再一次,没有运气。我现在得到的消息是"id: jenkins: no such user"。
所以你知道了:我被卡住了。如何在 Jenkins 的.ssh
docker容器中克隆私有存储库而无需挂载-folder?非常感谢有关此主题的任何帮助。我现在盯着这个太久了......
归档时间: |
|
查看次数: |
2025 次 |
最近记录: |