当我尝试运行下面的管道时,它会因此错误而失败:
克隆到' /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'
}
}
答案 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'
}
}
我不确定,如果有任何其他问题,但似乎有效,而且您没有错误权限的问题。