Jenkins:克隆一个docker容器中的私有存储库

时间:2017-12-06 13:12:31

标签: git docker jenkins ssh git-clone

我知道在这里已经有很多关于这个主题的问题了,我尝试了几乎所有他们提出的解决方案,但我目前正处于我无法实现的目的。工作(我想要的方式)。

问题

我有在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作为只读卷挂载,原因如下:

  • Jenkins Docker插件以Jenkins用户身份运行。这个用户'我的Docker容器中不知道UID和GID。因此我必须挂载/etc/passwd
  • 当从Git仓库中取出时,我的known_hosts(以及我的钥匙?)需要在我的泊坞窗容器内知道。由于/etc/passwd将jenkins用户映射到/home/jenkins,因此我必须在我的客户机上安装Jenkins的SSH目录。
  • sshagent - 命令设置SSH套接字,以便我的密钥可以在我的容器中访问(如果我错了,请更正我,我对Jenkins和Docker来说相当新)。 / LI>
像我说的那样:这已经有效了。通过此设置,我可以在Jenkins中的docker容器中克隆私有git存储库。

那么问题是什么呢?

我发现/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 - 文件夹?非常感谢有关此主题的任何帮助。我现在盯着这个太久了......

0 个答案:

没有答案