抱歉,Jenkins 不是交互式应用程序。它专为自动执行而设计。
获取 Jenkins 作业(以及从该作业执行的所有内容)的输入的唯一可行方法是使用在作业开始之前填充的作业参数。诚然,用于参数输入的 Jenkins GUI 不是最好的,但它可以完成这项工作。一旦 Jenkins 作业在作业开始时收集了作业参数,它就可以在作业期间的任何时间将这些参数传递给它执行的任何东西(Python、shell 等)。要做到这一点,必须满足两件事:
- 您需要在作业开始之前收集所有输入数据
- 无论您的工作调用是什么(Python、shell 等),都需要能够以非交互方式而是通过命令行接收其输入。
如何获取程序的输入
一个设计良好的脚本应该能够简单地接受命令行上的参数:
./goodscript.sh MyName 将是最简单的方法,其中值MyName 将存储在脚本的第一个参数$1 中。后续命令行参数将在变量$2、$3等中可用。
./goodscript.sh -name MyName -age 30 将是一种更好的方法,脚本可以通过在参数值之前指定参数名称来获取多个参数,而不管它们的顺序如何。您可以阅读有关使用getopt 进行这种参数传递方法的信息
以上两个示例都假定goodscript.sh 编写得足够好,能够处理这些命令行参数。如果脚本没有显式处理命令行参数,那么上面的操作是没有用的。
您可以将某些输出“通过管道”传递到并非旨在显式处理命令行参数的交互式脚本:
echo MyName | ./interactivescript.sh 会将值 MyName 传递给 interactivescript.sh 提供给用户的第一个交互式提示.这样做的问题是您只能将值传递给第一个交互式提示。
Jenkins 作业参数 GUI
就像我上面所说的,您可以使用 Jenkins GUI 来收集各种作业参数(下拉列表、复选框、文本输入)。我假设您知道如何使用参数设置 Jenkins 作业。如果没有,请在作业配置中单击“This build is parameterized”复选框。如果您不知道如何设置,那就是另一个问题,需要单独解释。
但是,一旦您的 Jenkins 作业预先收集了所有参数,您就可以在 “执行 shell” 步骤中引用它们。如果您使用的是 Windows,则将它们引用为 %PARAM_NAME%,而对于 Linux,则引用它们为 $PARAM_NAME。
说明您需要什么帮助:让您的脚本接受命令行参数,或从 jenkins 作业 GUI 传递这些命令行参数,我将进一步扩展此答案