【问题标题】:How Does Jenkins Deal With Interactive Shell Scripts?Jenkins 如何处理交互式 Shell 脚本?
【发布时间】:2012-07-26 16:36:19
【问题描述】:

我正在编写几个 Linux shell 脚本来移动一些代码,如果这些脚本可以是交互式的,那就太好了。

缺点是我想在 Jenkins 中执行其中一些脚本,但我不完全确定 Jenkins 如何处理脚本中的用户提示。我在这方面找不到很多东西,也没有资源继续测试它,所以任何建议都将不胜感激。

谢谢大家

【问题讨论】:

  • 您可能想查看expect(1)
  • 这是一个经典问题。在有限的意义上,交互式的东西对于人类呼叫者来说是件好事。但是批处理对于自动化(脚本调用者)来说要好得多。我建议编写几乎所有内容以供批处理使用,真的,除非您正在使用文字处理器或其他东西,因为从长远来看,批处理脚本的卓越可组合性最终会是一个巨大的胜利。这不仅仅是您可以更实际地构建批处理脚本的事实;使用批处理接口进行自动化测试也更容易,因此代码最终更可靠。
  • 谢谢。我一直在使用期望,但要做我想做的事,似乎有一些奇怪的解决方法,我宁愿避免

标签: linux shell jenkins


【解决方案1】:

如果 Jenkins 执行的命令需要输入,它就会坐在那里等待输入。该作业将挂起,您需要手动将其终止。解决此问题的一种方法是将预期的输入通过管道传输到命令中,例如

echo "input" | command

command < file_with_input

【讨论】:

  • 感谢您的快速回复。我实际上正在尝试做类似echo "Enter Password:"; read PASSWORD 的事情,并让用户即时输入他们的密码。从你上面所说的来看,这似乎是可以接受的(?)
  • read 会阻塞,直到您手动终止作业。鉴于您将结果存储在环境变量中,您可以在 Jenkins 作业中相应地设置该变量,并且如果未设置该变量,则在脚本中仅需要用户输入。
  • 对不起,我应该更明确一点。真正的命令是scp,所以除非你使用expect,否则它会强制提示。您说提示会“阻止”。我意识到它会停止进程并等待输入,但用户能否在 Jenkins 中响应该提示? (如果你看不出来的话,有点像 Jenkins 菜鸟)
  • 不,Jenkins 作业一旦开始就不是交互式的。如果发生这种情况,唯一真正的选择是终止工作。
  • @degausser,您可以使用 ssh 密钥绕过scp 的密码输入。
【解决方案2】:

您可以从 Jenkins 运行交互式 shell 脚本。

以下是相关文档:

http://www.buildengineers.org:8080/display/Tools/Running+interactive+Shell+Script+in+Jenkins

使用&lt;&lt;LimitString 选项,您可以从命令行运行shell 脚本。

您可以在 jenkins 配置的执行部分中提供输入。

希望这会有所帮助。

【讨论】:

  • 为什么只有链接的答案如此糟糕的好例子:您的链接已关闭
  • 网址不可访问
猜你喜欢
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2013-06-19
  • 2019-09-18
  • 2014-07-16
相关资源
最近更新 更多