配置在不同从站上运行的jenkins作业的最佳方法

时间:2015-04-22 18:36:00

标签: jenkins continuous-integration

我想在4个不同的奴隶(windows,linux,solaris,Mac)上运行Jenkins工作。我没有做4个不同的工作,而是想做一份工作。我可以使用Node参数在不同的slave上执行。我的工作运行一个脚本,它使用了奴隶的Jenkins工作区和一些其他脚本。我的脚本位于每个从属服务器上的不同文件夹中,其他必需的脚本位于不同的文件夹中。所以现在我为每个从属和硬编码的Jenkins工作区和其他所需的脚本路径创建了4个不同的作业。

有没有办法让我可以将所有路径放在一些类似JSON的结构中,并且依赖于slave会选择那些路径?所以我只能做一份工作。

请建议,提前致谢!

2 个答案:

答案 0 :(得分:1)

我的想法是使用例如“执行系统Groovy脚本”来获取slave值,然后使用if语句来分配正确的路径并在环境变量中创建可见的参数:

import hudson.model.Computer
import hudson.model.StringParameterValue
import hudson.model.ParametersAction

//get slave name
def slaveName = Computer.currentComputer().getNode().name
def path

//choose path
if(slaveName.equals("slave01")){
  path = "C:"
}
if(slaveName.equals("slave02")){
  path = "/root"
}
if(slaveName.equals("slave03")){
  path = "D:"
}

//pass path as env. variable
build.addAction(new ParametersAction(new StringParameterValue('path', path)))

然后你可以在命令中使用变量路径: echo %path% 或使用条件BuildStep插件为每个操作系统设置可分离的步骤,并控制何时应执行每个步骤

答案 1 :(得分:0)

Jenkins旨在检出版本控制系统(Subversion,Git等)中的文件并运行任务。您应该将脚本置于某种形式的版本控制中,而不是尝试在不同的从属设备上管理单独的文件,并让Jenkins在工作区中检出文件作为其构建过程的一部分。