一尘不染

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

jenkins

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

我尝试使用python运行示例CLI交互式脚本,该脚本只是询问名称并随后将其打印出来,但Jenkins只是等待了很长时间才被吊死。我看到它要求输入,但是用户无法输入数据。

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

偏好: 我更喜欢使用Python,因为它有点轻巧,但是如果人们在使用其他语言方面取得了成功,我就可以使用。

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

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

对不起这篇文章!希望人们能帮助我!


阅读 312

收藏
2020-07-25

共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将值传递MyNameinteractivescript.sh提供给用户的第一个交互式提示。问题是您只能将值传递给第一个交互式提示。

Jenkins工作参数GUI

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

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

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

2020-07-25