如何在Docker容器内构建Jenkins-job后将ROOT所有权更改为jenkins

eqoofvh9  于 2023-10-17  发布在  Jenkins
关注(0)|答案(2)|浏览(154)

我在我的jenkins管道中构建了一步:

stage('Build') {
        agent {
            docker {
                image 'mymvnbasedimage:latest'
                args '-u root:root'
                reuseNode true
            }
        }
        steps {
                sh "ant"
            }
        }

它工作,一切都很好。但是,然后workspace将包含目录和文件所拥有的root不能删除的用户jenkins在下次运行时清理workpace

ls -lt ~/workspace/myjenkinsjob/dist/
total 185764
-rw-r--r-- 1 root root 190218240 Aug  3 19:49 buildresult-21.tar

当然,我可以补充:

stage('Chown to user Jenkins'){
            steps {
            echo 'Chown to user Jenkins'
            sh "sudo chown -R jenkins:jenkins ${WORKSPACE}"
            }
        }

但这是不好的,因为我必须添加在/etc/sudoers的权利,使chown的用户Jenkins。另外,我不能在chown的容器内操作,因为用户jenkins不存在。哪种变体,你可以咨询吗?请帮帮我

hts6caw3

hts6caw31#

我可能会建议将${WORKSPACE}设置为主机上具有文件夹的卷,并使用jenkins用户uid为jenkins在主机文件夹上设置适当的权限。host上的uid user应该等于docker容器中的uid。

wko9yo5t

wko9yo5t2#

我用的是下一个组装机

script {
    def jUserID = sh returnStdout: true, script: "id -u"
    jUserID = jUserID.trim()
    def jGroupID = sh returnStdout: true, script: "id -g"
    jGroupID = jGroupID.trim()
    sh "docker run --rm -v ./src:/src bash chown -R ${jUserID}:${jGroupID} /src/FOLDER_TO_CHOWN"
}

此外,我一直在考虑通过插件将Docker作为一个独立的阶段,比如

agent {
    docker {
        image 'bash'
        reuseNode true
    }
}
steps {
    sh 'chown -R ${jUserID}:${jGroupID} /code/FOLDER_TO_CHOWN'
}

但是我不知道如何在这种情况下定义一个变量,更不知道如何在命令中替换它。至少在写这个答案的时候)

相关问题