使用docker代理jenkinspipe道中的git
当我尝试运行下面的pipe道时,会失败并显示以下错误:
克隆到“/go/src/github.com/gorilla/websocket”…
致命的:无法在passwd文件中查找当前用户:没有这样的用户
包github.com/gorilla/websocket:退出状态128
据我所知,问题是,jenkins启动容器与jenkins用户的用户名,以保持文件系统权限(docker运行-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' } }
用/ etc / passwd中不存在的用户标识运行时,很多程序将无法运行,而git是其中一个程序。
您必须为您的泊坞窗容器指定一个正确的-u
参数,也就是说,您的xxx.de/go_build_container
图像中存在一个xxx.de/go_build_container
,root(或0:0)是其中之一。 所以把这样的: args '-v=$WORKSPACE:/go/src/bitbucket.org/xxx/service_donation -u 0:0'
,它会工作。
然后,您将遇到另一个问题:在您的卷中创build的文件将属于您在容器中使用的UID,如果您想稍后在pipe道中重新使用这些文件,则可能需要添加一些chown
。
我发现另一个选项是挂载/ etc / passwd到容器。
agent { docker { image 'xxxx' args '-v=/etc/passwd:/etc/passwd' } }
我不确定,如果有任何其他问题,但它似乎工作,你没有错误的权限问题。