Jenkins可以处理gui / non-gui交互式python或java程序吗?

时间:2013-02-14 22:16:50

标签: python jenkins jenkins-plugins user-interaction build-pipeline

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

我尝试使用python运行示例CLI交互式脚本,只需要一个名称并在之后打印出来,但Jenkins只是等了很久才被绞死。我看到它要求输入,但用户无法输入数据。

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

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

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

BTW,在运行Python 2.7和Java 1.7的Windows 7笔记本电脑上运行所有这些

对于这篇文章感到抱歉!希望人们可以帮助我!

1 个答案:

答案 0 :(得分:1)

很抱歉,但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作业。如果没有,请在作业配置中单击“此构建参数化”复选框。如果你无法弄清楚如何设置它,这是一个不同的问题,需要单独解释。

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

解释您需要帮助的内容:让您的脚本接受命令行参数,或者从jenkins作业GUI传递这些命令行参数,我将进一步扩展此答案