Bash Jenkins反向运行shell脚本?
我的jenkins服务器存在以相反顺序运行shell命令的问题。 我指定要运行的命令Bash Jenkins反向运行shell脚本?,bash,jenkins,tomcat6,sh,jenkins-plugins,Bash,Jenkins,Tomcat6,Sh,Jenkins Plugins,我的jenkins服务器存在以相反顺序运行shell命令的问题。 我指定要运行的命令 将文件复制到另一台服务器 运行更新脚本 比如说, $nohup scp -i .ssh/blah -o StrictHostKeyChecking=no foo.txt tomcat@foo.coo.com:/tmp/FOO.txt &> /dev/null $nohup ssh -t -t -n -i .ssh/blah -o StrictHostKeyChecking=no tomcat@fo
$nohup scp -i .ssh/blah -o StrictHostKeyChecking=no foo.txt tomcat@foo.coo.com:/tmp/FOO.txt &> /dev/null
$nohup ssh -t -t -n -i .ssh/blah -o StrictHostKeyChecking=no tomcat@foo.coo.com '/home/tomcat/bin/update.sh /tmp/FOO.txt.war'
相反,jenkins输出控制台将显示:
[workspace] $ /bin/sh -xe /tmp/tomcat6-tomcat6-tmp/hudson8724999678434432030.sh
+ echo 1
1
+ echo 2
2
+ echo 3
3
+ echo 4
4
使用
&>
重定向stdout和stderr是bashshell的一个特性。如果您想使用bash特定的特性,那么需要让Jenkins知道应该使用bash执行构建步骤
这可以通过两种方式实现:
1) 更改Jenkins全局配置中的默认shell或
2) 构建步骤的第一行必须以#开头/bin/bash…
请注意,
/bin/sh
并不总是指向/bin/bash
的符号链接。您是否尝试过将这两个命令保存在一个文件中,省略nohup
,并调用该脚本文件?我的jenkins作业的设置方式阻止我将命令移动到脚本文件中,因为它们都是批处理任务。但是,我知道如果从单个脚本执行,它将正确运行。所以问题可能不在詹金斯身上——你是在为第一项任务打基础,然后立即开始下一项任务。如果完成第一个命令所需的时间大于完成第二个命令所需的时间,那么第一个命令当然会提前完成。如果这些事情的顺序真的很重要,为什么不直接将第一个命令放在后台运行呢?所有命令都不应该在后台运行,因为&>/dev/null应该将stderr重定向到stout。还是我错了?我删除了&它成功了=虽然我仍然想知道为什么它被视为后台作业而不是重定向,但我错误地认为/bin/sh与/bin/bash有符号链接,但事实并非如此。因此,我创建了一个到bash的符号链接,所有内容都已备份并运行。谢谢这是解决问题的一种方法。如果操作系统更新覆盖了/bin/sh,您可能需要继续重新解决它。另外,请注意,默认情况下,-xe选项附加到shell中。如果要保留此行为(-x在执行命令之前回显每个命令-方便!--如果任何命令返回非零状态代码,e将使脚本失败-否则您的shell步骤永远不会失败!-),如果使用选项#2,则使用#/bin/bash-xe