在主机上克隆Jenkins Docker插件将权限授予root

hc2pp10m  于 11个月前  发布在  Docker
关注(0)|答案(1)|浏览(101)

我的Jenkinsfile是这样的:

node {
     def image = docker.image('my-custom-image')
     image.inside("--user=root -e DOCKER_HOST=${env.DOCKER_HOST}") {
        stage('Install-tools') {
             withCredentials([usernamePassword(credentialsId: 'credentials-id', passwordVariable: 'PASS', usernameVariable: 'USER')]) {
                  sh "git clone https://$USER:$PASS@myrepo/tools.git"
                  // sh "chown -R build:build tools/"
             }
        }
        stage('clone') { 
           checkout scm
        }
        stage('Deploy') { 
           sh "python3 -u deployscripts/deploy.py"
        }
     }

}

字符串
如果我在上面运行它,Jenkins会失败,因为它不能删除工作区(返回一个大的Java异常)。
经过一些搜索,我决定取消注解sh "chown -R build:build tools/"行。root拥有的目录tools现在由build拥有。我不再得到无法删除工作区错误。
我不明白的是:
我的git clonemy-custom-image docker容器中运行。文件只在我的docker镜像中(这里没有使用任何-v)。用户rootmy-custom-image中是root。为什么它会在主机上创建root拥有的文件,阻止Jenkins删除工作区?

9gm1akwq

9gm1akwq1#

为什么它会在主机上创建root所有的文件,阻止Jenkins删除工作区?
因为Jenkins自动将-u <jenkins_user> -v ${env.WORKSPACE}:somedir -w somedir添加到image.inside内部的docker run参数中。实际上,您正在运行docker run,但在工作区目录中,这在大多数情况下比它应该的更令人困惑。我发现自己键入docker run命令更可预测。
其他CI/CD系统已经解决了这个问题,通过独占地在容器内工作,如github-actions,或者与其他执行克隆和管理的容器共享工作区目录,如gitlab-cicd。

相关问题