Linux Jenkins切换用户并执行命令

Linux Jenkins切换用户并执行命令,linux,shell,jenkins,jenkins-pipeline,Linux,Shell,Jenkins,Jenkins Pipeline,我正在尝试切换Jenkins文件中的用户,然后运行命令。在Linux机器上运行此命令确实有效,但是在Jenkins中运行时,我会出现以下错误: su: unrecognized option '--stop' Try `su --help' for more information. 我希望执行的命令: su - testuser -c 'testcontrol --stop --app testfeed --no_prompt_on_change' 我的文件: node { echo

我正在尝试切换Jenkins文件中的用户,然后运行命令。在Linux机器上运行此命令确实有效,但是在Jenkins中运行时,我会出现以下错误:

su: unrecognized option '--stop'
Try `su --help' for more information.
我希望执行的命令:

su - testuser -c 'testcontrol --stop --app testfeed --no_prompt_on_change'
我的文件:

node {
  echo 'Stopping Feed'
  CHEF_SERVER = sh (script: 'grep chef_server_url /etc/chef/client.rb | awk -F\'/\' \'{print $3}\'', returnStdout: true).trim()
  TARGET_SERVER = "foo"
  stage('Switching userstopping process') {
    try {
        echo sh(script: "ssh ${CHEF_SERVER} salt ${TARGET_SERVER} cmd.run \\'su - testuser -c 'testcontrol --stop --app testfeed --no_prompt_on_change'\\'", returnStdout: true)
    }
    catch (e) {
        // catch error code here
    }
  }
}

尝试将脚本命令中的内容推送到文件中。看起来你正在做一系列的转义,如果你只做
sh./switch\u userstopping\u process.sh'
,你可能会避免这些转义。这样,您还可以在jenkins之外运行脚本,以确保其正常工作

来自Jenkins World 2016的一次演讲:“如果可能,将构建逻辑放入外部脚本”

您可以在shell脚本中轻松地执行
echo
,并且可以更轻松地实现获取
CHEF_服务器的部分,将其临时存储在groovy变量中,然后在另一个shell脚本中使用。事实上,以下是您的整个管道:

node {
  sh './switch_userstopping_process.sh'
}
我不确定你对捕获逻辑的具体想法。也许这会持续下去。享受管道