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

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

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

  1. stage('Build') {
  2. agent {
  3. docker {
  4. image 'mymvnbasedimage:latest'
  5. args '-u root:root'
  6. reuseNode true
  7. }
  8. }
  9. steps {
  10. sh "ant"
  11. }
  12. }

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

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

当然,我可以补充:

  1. stage('Chown to user Jenkins'){
  2. steps {
  3. echo 'Chown to user Jenkins'
  4. sh "sudo chown -R jenkins:jenkins ${WORKSPACE}"
  5. }
  6. }

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

hts6caw3

hts6caw31#

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

wko9yo5t

wko9yo5t2#

我用的是下一个组装机

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

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

  1. agent {
  2. docker {
  3. image 'bash'
  4. reuseNode true
  5. }
  6. }
  7. steps {
  8. sh 'chown -R ${jUserID}:${jGroupID} /code/FOLDER_TO_CHOWN'
  9. }

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

展开查看全部

相关问题