2017-04-11 234 views
0

命令依次在詹金斯,我创建了许多运行shell脚本命令作业:运行shell脚本在詹金斯

command1 
command2 
...etc 

command1是一个SSH命令,调用另一台服务器计算机上的shell脚本文件。我必须等到它完成后,在它之后,command2应该到来。

因此,如何在Jenkins作业中启动下一个命令(command2)时确保由command1开始的另一台机器上的脚本文件已经完成作业?

或者,如何才能确保command2不会启动,直到另一台机器上的shell脚本(由command1开始)已经完成?

回答

0

您可以查看“How to send many commands to shell and wait for the command behind ends”以链接命令并等待它们完成。

当您通过ssh会话执行命令时,您可能必须将该命令封装在能够循环/等待命令完成的脚本中。
请参阅“How can I make ssh wait until the command exits?”中的示例。
或(更简单的wraper):How do I know when a command run over ssh has finished?

#/bin/bash 
[email protected] 
echo "==== Command Output Finished ====" 

寻找在你的I/O例程的字符串==== Command Output Finished ====,以确定命令输出之间的边界是。 或者您可以尝试在他们自己的Jenkins shell构建步骤中隔离这些命令。
(不是不同的工作,只是在同一作业中的不同构建步骤)

+0

1.其实,我发现这个链接,您发送的,但我担心,如果我运行命令1这是一个SSH命令,在远程计算机上调用.sh文件时,此命令1将在我的计算机上成功返回并启动command2,而远程计算机上的任务(由command1通过.sh文件启动)尚未完成。它可能发生,不是吗?
2.隔离是否意味着我应该创建另一个jenkins工作?如果可能的话,我想避免它。或者我可以从另一个詹金斯工作开始詹金斯的工作,并等待它完成? (对不起,我是詹金斯的新手。)谢谢。 – Colossus

+0

@Colossus我编辑了答案,以解决您的2条评论。 – VonC

+0

只是与不同的构建步骤有关的问题。我发现它该怎么做,但问题依然存在,不是吗?如果我在不同的构建步骤中启动command1,可能会发生此命令已成功完成,但远程计算机上的任务(由command1通过.sh文件启动)尚未完成。或者当所有由command1生成的任务完成时command1被认为完成了?谢谢。 – Colossus