【问题标题】:How to run "sudo su" command in Jenkins Declarative pipeline?如何在 Jenkins 声明式管道中运行“sudo su”命令?
【发布时间】:2020-02-25 15:52:29
【问题描述】:

我有一个奇怪的情况,shell 命令“sudo su”在 Jenkins 声明式管道中没有按预期工作。以下是我的代码:

 stages {

     stage('Ansible-dynamichost-generation') {



           steps {
                   ansiColor('xterm') {


                                        sh 'chmod -R 777 /home/jenkins-slave/'
                                        sh 'sudo su ansible'


                                        sh '''#!/bin/bash -l 
                                        #Execute commands
                                         echo "$WORKSPACE"
                                         whoami
                                         '''

                                         }
                                 }
                            }

  }

此管道由 jenkins-slave 用户运行。但是,我在管道中有一个 shell 命令应该切换到一个名为“ansible”的用户。但是,当执行“whoami”命令时,它会返回“jenkins-slave”本身的输出。谁能帮忙看看这里出了什么问题?

【问题讨论】:

  • sudo -u ansible /bin/bash -c "...".
  • su 不会“切换”用户;它会启动一个新的 shell,以 as 该用户的身份运行。
  • @chepner 谢谢!是的,我在命令前使用“sudo -u ansible”。

标签: shell jenkins jenkins-pipeline jenkins-groovy jenkins-declarative-pipeline


【解决方案1】:

每个 sh 命令都在单独的页面中执行。 最好写一个 sh 并执行它会工作的操作

【讨论】:

  • 使用多个“sh”如何导致上述问题?你能详细说明一下吗?而且,我还尝试在一个“sh”块下调用所有 shell 命令,但问题仍然存在。
最近更新 更多