为什么Jenkins有两种工作,包括多配置项目和自由式项目项目?我读到某个地方,一旦你选择其中一个,你就无法转换到另一个(很容易)。为什么我不总是选择多配置项目以便为将来的更改安全?
我想在Windows和Unix(以及其他平台)上为项目构建设置构建。我找到this question),它问同样的事情,但我没有得到答案。为什么我需要三个矩阵项目(而不是三个自由式项目),每个平台一个?为什么我不能将它们全部保存在一个矩阵中,平台是AND(例如)一个轴上的gcc版本和另一个上面的(我的)软件版本?
我也阅读了this blog post,但是在同一台机器上构建了所有内容,只有不同的Python版本。
简而言之:大多数人如何配置针对许多不同平台的多配置项目?
答案 0 :(得分:42)
这两种类型的工作有不同的功能:
如果您有一个想在Windows和Windows上构建的项目; Unix,你有两个选择:
您可以将gcc版本保留在一个轴上,将软件版本保留在另一个轴上。没有理由你不应该这样做。
您链接的问题有一个公平的问题,但是与您的问题没有直接关系的问题:在他的情况下,他有一个多配置工作 A ,其中 - 成功 - 触发另一份工作 B 。现在,在多配置作业中,如果其中一个配置失败,则整个作业失败(显然,因为您希望项目在所有配置上成功构建)。
恕我直言,要在多个平台上构建相同的项目,更好的方法是使用多配置样式的作业。答案 1 :(得分:6)
另一种选择是使用python构建步骤来检查当前的操作系统,然后调用适当的安装或构建脚本。在python脚本中,您可以将更新的环境保存到文件中,并使用EnvInject插件再次注入环境以进行后续构建步骤。根据构建环境的大小,您还可以使用SCons等多平台构建工具。
答案 2 :(得分:4)
一个选项是使用用户定义的轴与slave(windows,linux,...)结合使用,因此您需要为每个组合添加一个过滤器,并使用Conditional BuildStep插件为每个plataform设置特定的构建步骤(Executar shell,Windows命令,......)
此链接有一个教程,但它是葡萄牙语,但很容易根据图像进行处理... http://manhadalasanha.wordpress.com/2013/06/20/projeto-de-multiplas-configuracoes-matrix-no-jenkins/
答案 3 :(得分:3)
您可以使用源代码创建一个脚本(例如 build )和批处理文件(例如 build.bat )。在构建步骤中的Jenkins中,您可以调用 $ WORKSPACE / build - Windows将执行 build.bat ,而Linux将运行 build 。
答案 4 :(得分:2)
您可以在定义配置矩阵轴时使用jenkins创建的变量。例如: 您创建名为OSTYPE的从轴并检查两个从站(Windows和Linux)。然后,您创建两个单独的构建步骤并检查OSTYPE环境变量。
您可以使用改进的脚本语言,例如python,它是多平台的,并且可以在一个构建步骤中实现独立于从属名称的相同功能。
答案 5 :(得分:2)
如果你使用Windows和其他东西去矩阵路线,你会想要XShell插件。您只需创建两个构建脚本,例如cmd的“build.bat”和bash的“build”,并告诉XShell运行“build”。在每种情况下都会运行正确的。
答案 6 :(得分:1)
在Unix上运行批处理文件和在Unix上运行shell脚本的攻击:
在Unix上,使批处理文件以0退出状态退出:
ln -s /bin/true /bin/cmd
在Windows上,找到true.exe
,将其命名为sh.exe
并将其放在路径中的某个位置。
或者,如果您在Windows上安装了sh.exe
(来自Cygwin,Git或其他来源),请将其添加到Jenkins的shell脚本顶部:
[ -n "$WINDIR" ] && exit 0
答案 7 :(得分:1)
为什么不总是选择多配置作业类型?
有些原因浮现在脑海中:
所以从本质上讲:多配置作业是一个更复杂的事情,因为除非必要,否则应该避免复杂性,常规自由式作业是更好的默认。
答案 8 :(得分:0)
如果要选择运行作业的从站,则需要使用多配置项目(否则您将无法选择/限制运行它的从站 - 有三种方法可以执行此操作但是我已经尝试了所有这些(Tie插件仅适用于主作业,高级项目选项中的限制也不是摇滚安全触发器,因此您希望使用已被证明在今天正常工作的Slave轴。)