Jenkins 以根用户身份在文件中运行命令

Jenkins 以根用户身份在文件中运行命令,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个命令,它需要在JenkinsFile中使用root。但是当我在本地主机上运行它时,它会给出错误“sudonotfound”。JenkinsFile在源代码中 stage('Install packages') { sh("docker run --rm -v `pwd`:/app -w /app node yarn install") sh("sudo chown -R jenkins: ./node_modules") } 我已经试过了。temp sh脚本是在每个构建上创建的

我有一个命令,它需要在JenkinsFile中使用root。但是当我在本地主机上运行它时,它会给出错误“sudonotfound”。JenkinsFile在源代码中

stage('Install packages') {
  sh("docker run --rm -v `pwd`:/app -w /app node yarn install")
  sh("sudo chown -R jenkins: ./node_modules")
}
我已经试过了。temp sh脚本是在每个构建上创建的。 错误是

/var/jenkins\u home/workspace/boilerplate\u master-2ESKZDF4PBIXGKODFFKIVAND5RN5VWF6QLEGRZ44LZGESCULVC4Q@tmp/durable-14d87eaa/script.sh:第1行:sudo:未找到

您将看到“sudo未找到”,因为您的docker映像上未安装sudo。 检查默认用户ID。
对于Maven,它是根用户(ID:0)

用户可以映射到ID,而不是名称
即主机上的用户ID为1000,对应于映像中的用户节点

sh “chown -R 1000 /mydir”  /* Replace 1000 with actual user ID> */
如果用户ID匹配,上述命令将解决您的问题,否则它将为您的文件设置未知所有者

请尝试下面我根据您提供的Docker图像编写的Jenkins脚本

pipeline{
agent any
stages{
    stage('test'){
        steps{
            script{
                    def image = docker.image('mhart/alpine-node:8.11.3')
                    image.pull()
                    image.inside() {
                        sh 'id'
                        sh 'ls -lrt'
                        sh 'node yarn install'
                    }
              }
          }
      }
    }
}

尝试以“jenkins”用户的身份运行以下命令:

stage('Install packages') {
  sh("docker run --user='jenkins' --rm -v `pwd`:/app -w /app node yarn install")
}

如果Jenkins文件不是到处运行,那么编写它又有什么意义呢?我必须将每个系统的用户ID映射到主机ID。有什么解决方法吗?我们在Jenkins中广泛使用docker。我找到的唯一解决方法是使用与root用户一起运行的docker映像(docker社区不推荐),或者使用与主机的用户匹配的映像。当我执行
sh“chown-R 1000/mydir”
时,它返回了无效的spec
1001
。您使用的是哪个docker映像?Jenkins用户的用户ID是什么?docker图像是
mhart/alpine节点:8.11.3
,Jenkins用户的用户ID是1001。