亲爱的 Stackoverflow 社区,
我正在尝试使用 docker 映像作为构建过程的容器来设置 Jenkins CI 管道。我正在定义一个 Jenkinsfile 以将构建管道作为代码。我正在做这样的事情:
node {
docker.withRegistry('http://my.registry.com', 'docker-credentials') {
def buildimage = docker.image('buildimage:latest');
buildimage.pull();
buildimage.inside("")
{
stage('Checkout sources') {
git url: '...', credentialsId: '...'
}
stage('Run Build and Publish') {
sh "..."
}
}
}
}
不幸的是,我偶然发现了 Docker 管道插件的奇怪行为。在构建输出中,我可以看到 Image.inside(...) 命令使用
docker run -t -d -u 1000:1000 ...
这使得我的构建失败,因为 Dockerfile 中定义的用户没有 UID 1000 ...实际上是另一个用户。我什至尝试指定 Jenkinsfile 中应使用哪个用户
node {
docker.withRegistry('http://my.registry.com', 'docker-credentials') {
def buildimage = docker.image('buildimage:latest');
buildimage.pull();
buildimage.inside("-u otheruser:othergroup")
{
stage('Checkout sources') {
git url: '...', credentialsId: '...'
}
stage('Run Build and Publish') {
sh "..."
}
}
}
}
但这会导致生成的 docker run 命令中出现重复的 -u 开关
docker run -t -d -u 1000:1000 -u otheruser:othergroup ...
显然只有第一个 -u 被应用,因为我的构建仍然失败。我还使用 whoami 进行了调试来验证我的假设。
所以我的问题是:我怎样才能改变这种行为?是否有一个开关可以关闭 -u 1000:1000 ?这还是一个错误吗?我实际上喜欢使用 Docker 插件,因为它简化了使用 Jenkins 中维护的凭证的自己的 docker 注册表的使用。但是,如果 Docker 插件不可用,是否有另一种简单的方法可以实现我的目标?
预先感谢您抽出时间