在jenkins管道中使用gitkins代理

时间:2017-02-23 21:15:48

标签: jenkins docker jenkins-pipeline

当我尝试运行下面的管道时,它会因此错误而失败:

  

克隆到' /go/src/github.com/gorilla/websocket' ...

     

致命:无法在passwd文件中查找当前用户:没有这样的用户

     

package github.com/gorilla/websocket:退出状态128

据我了解,问题是,jenkins使用jenkins用户的userid启动容器,以保持文件系统权限正确(docker run -t -d -u 108:113 ....)但是我怎么能用git呢?

pipeline {
agent none
stages {

...

    stage('Build Code') {
        agent {
            docker {
                image 'xxx.de/go_build_container'
                args '-v=$WORKSPACE:/go/src/bitbucket.org/xxx/service_donation'
            }
        }
        environment {
            HOME = "."
        }
        steps {
            sh 'cd /go/src/bitbucket.org/xxx/service_donation && go get github.com/gorilla/websocket'

        }
    }

2 个答案:

答案 0 :(得分:3)

使用/ etc / passwd中不存在的用户ID运行时,许多程序将无法运行,git就是其中一个程序。

您必须为docker容器指定一个正确的-u参数,即xxx.de/go_build_container图像中存在的参数,root(或0:0)就是其中之一。 所以放一些像args '-v=$WORKSPACE:/go/src/bitbucket.org/xxx/service_donation -u 0:0'这样的东西就行了。

然后,您将面临另一个问题:在您的卷中创建的文件将属于您在容器中使用的UID,如果您希望稍后在您的容器中重复使用这些文件,则可能需要添加一些chown管道

答案 1 :(得分:2)

我找到的另一个选项是将/ etc / passwd挂载到容器中。

        agent {
            docker {
                image 'xxxx'
                args '-v=/etc/passwd:/etc/passwd'
            }
        }

我不确定,如果有任何其他问题,但似乎有效,而且您没有错误权限的问题。