使用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' } } 

我不确定,如果有任何其他问题,但它似乎工作,你没有错误的权限问题。