2

我想创建一个构建管道,开发人员需要在属性文件中设置一些东西,该文件使用前端 GUI 填充。

我尝试使用 python 运行示例 CLI 交互式脚本,该脚本只要求输入一个名称并在之后将其打印出来,但 Jenkins 只是等待了很长时间然后就挂了。我看到它要求输入,但用户无法输入数据。

编辑:目前将Jenkins作为服务运行..或者有没有人推荐的好插件,或者它是我创建python脚本的方式?

偏好: 我更喜欢使用 Python,因为它有点轻量级,但如果人们使用其他语言取得成功,我可以组成。

使用 GUI 菜单来填充数据会很酷,因为我可以使用选项框、下拉菜单并使其变得花哨,但这不是必需的,CLI 比我们当前的部署要好得多。

顺便说一句,在运行 Python 2.7 和 Java 1.7 的 Windows 7 笔记本电脑上运行所有这些

对论文感到抱歉!希望人们可以帮助我!

4

1 回答 1

1

抱歉,Jenkins 不是交互式应用程序。它是为自动执行而设计的。

获取 Jenkins 作业(以及从该作业执行的所有内容)的输入的唯一可行方法是使用在作业开始之前填充的作业参数。诚然,用于参数输入的 Jenkins GUI 不是最好的,但它可以完成这项工作。一旦 Jenkins 作业在作业开始时收集了作业参数,它就可以在作业期间的任何时间将这些参数传递给它执行的任何东西(Python、shell 等)。要做到这一点,必须有两件事是真实的:

  • 您需要在作业开始之前收集所有输入数据
  • 无论您的工作调用什么(Python、shell 等)都需要能够以交互方式而不是通过命令行接收它们的输入。

如何获取程序的输入

一个设计良好的脚本应该能够简单地接受命令行上的参数:

./goodscript.sh MyName将是最简单的方法,其中值MyName将存储在$1脚本的第一个参数中。后续命令行参数将在 variables$2等中可用$3

./goodscript.sh -name MyName -age 30将是一种更好的方法,脚本可以通过在参数值之前指定参数名称来获取多个参数,而不管它们的顺序如何。您可以阅读有关使用getopt进行这种参数传递方法的信息

上面的两个示例都假设goodscript.sh编写得足够好,能够处理这些命令行参数。如果脚本没有显式处理命令行参数,那么做上面的事情是没有用的。

您可以将一些输出“管道”到一个交互式脚本,该脚本并非旨在显式处理命令行参数:
echo MyName | ./interactivescript.sh将值传递给提供给用户MyName的第一个交互式提示。interactivescript.sh这样做的问题是您只能将值传递给第一个交互式提示。

Jenkins 作业参数 GUI

就像我上面说的,您可以使用 Jenkins GUI 来收集各种作业参数(下拉列表、复选框、文本输入)。我假设您知道如何使用参数设置 Jenkins 作业。如果没有,请在作业配置中单击“此构建已参数化”复选框。如果您不知道如何设置,那就是另一个问题,需要单独解释。

但是,一旦您的 Jenkins 作业预先收集了所有参数,您就可以在“执行 shell”步骤中引用它们。如果您使用的是 Windows,则将它们称为%PARAM_NAME%,而对于 Linux,则称为$PARAM_NAME.

解释你需要什么帮助:让你的脚本接受命令行参数,或者从詹金斯作业 GUI 传递这些命令行参数,我将进一步扩展这个答案

于 2013-02-15T14:34:13.650 回答