Jenkins如何处理交互式Shell脚本?

9

我正在编写一些Linux shell脚本,用于移动一些代码,并且如果这些脚本可以进行交互,那将会很好而且简单。

缺点是我希望在Jenkins中执行其中一些脚本,但我不完全确定Jenkins如何处理脚本中的用户提示。我没有找到任何关于此问题的信息,也没有资源去测试它,因此欢迎任何建议。

谢谢大家


你可能想要查看expect(1) - Carl Norum
这是一个经典问题。交互式的东西对于人类用户来说在某种程度上很好,但对于自动化(脚本调用者)来说,批处理更好。我建议几乎所有的东西都写成批处理形式,除非你在开发一个文字处理器之类的东西,因为从长远来看,批处理脚本的优越组合性最终会带来巨大的收益。不仅仅是因为你可以更实际地构建批处理脚本;使用批处理接口进行自动化测试也更容易,所以代码更可靠。 - user1277476
谢谢。我一直在使用expect,但为了做我想要的事情,似乎需要一些奇怪的解决方法,而我宁愿避免这种情况。 - degausser
2个回答

8
如果Jenkins执行的命令需要输入,它就会等待输入。作业将挂起,您需要手动终止它。应对这种情况的一种方法是将期望的输入流到命令中,例如:
echo "input" | command

或者

command < file_with_input

感谢您的快速回复。实际上,我正在尝试做类似于 echo "输入密码:"; read PASSWORD 的事情,并让用户即时输入他们的密码。从您上面的回答来看,这似乎是可以接受的(?)。 - degausser
1
read 命令会一直阻塞,直到你手动杀死作业。鉴于你正在将结果存储在环境变量中,你可以在 Jenkins 作业中相应地设置该变量,并且只有在变量未设置时才需要用户输入。 - Lars Kotthoff
不,Jenkins作业一旦启动就是非交互式的。唯一的真正选项是如果发生这样的情况,则终止作业。 - Lars Kotthoff
1
@degausser,你可以使用SSH密钥来避免在scp中输入密码。 - Carl Norum
@CarlNorum我同意你的看法,使用键可能是最好的做法,但我已经被指示不使用:( - degausser
显示剩余2条评论

-5

4
为什么只提供链接作为回答很糟糕的一个好例子:你提供的链接已经失效了。 - GhostCat
URL无法访问。 - Prasad Lele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接