【问题标题】:Jenkins parameterized matrix jobJenkins 参数化矩阵作业
【发布时间】:2013-12-22 22:19:32
【问题描述】:

我正在设置 Jenkins 作业以对一些 c++ 代码运行一堆测试。该代码是在一项 Jenkins 作业期间生成的。有许多子项目,它们的代码在自己的文件夹中。

我的想法是有一个矩阵作业,其中每个配置都在一个代码文件文件夹上运行测试。虽然有两件事我不确定最好的方法......

  1. 我想将矩阵作业设置为在添加更多子文件夹时自动提取。类似于将文件夹列表作为参数传递给作业,并将该参数用作作业的轴。

  2. 我希望不在特定文件夹上运行测试,除非该文件夹中的某些代码已被父作业更改。

现在如何设置这个测试是完全开放的——我正在寻找想法。如果你曾经设置过这样的东西 - 你是怎么做到的?

【问题讨论】:

  • 如果您有单独的作业与版本控制中的子文件夹相关联,则仅测试已更改的代码。我使用wiki.jenkins-ci.org/display/JENKINS/Job+DSL+Plugin 为不同的文件夹动态添加相同的作业。
  • 对不起,我并不清楚 - 子文件夹和代码本身是由另一个工具生成的。该代码不受版本控制,因为它本身就是一个工件。

标签: matrix jenkins


【解决方案1】:

我有类似的任务 - 以可变数量的文件夹作为一个轴运行矩阵作业。这些文件夹在版本控制中,但很容易成为工件。我所做的是创建两个工作,一个主要和正常,另一个从属和矩阵。以下是需要在主作业中作为提升的 groovy 运行的代码:

import hudson.model.*
def currentBuild = Thread.currentThread().executable;
def jobName = 'SlaveMatrixJob' // Name of the matrix job to configure
def axisFolders = []
def strings =""

// Get the matrix job
def job = hudson.model.Hudson.instance.getItem(jobName)
assert job != null, "The job $jobName could not be found"

// Check it is a matrix job
assert job.getClass() == hudson.matrix.MatrixProject.class, "The job $jobName is of class '${job.getClass().name}', but expecting 'hudson.matrix.MatrixProject'"

// Get the folders
new File("C:\\Path\\Path").eachDirMatch ~/_test.*/, {it ->
   println "Got folder: ${it.name}"
   axisFolders << it.name
}

// Check if the array is empty
assert !axisFolders.isEmpty(), "No folders found to set in the matrix, aborting"

//Sort them
axisFolders.sort()

// Now set new axis list for test folders
def newAxisList = new hudson.matrix.AxisList()
newAxisList.add(new hudson.matrix.TextAxis('TEST_FOLDERS', axisFolders))
job.setAxes(newAxisList)
println "Matrix Job $jobName new axis list: ${job.getAxes().toString()}"

这基本上是获取 c:\path\path 中以 _test 开头的所有文件夹,然后将它们插入到名为 TEST_FOLDERSSlaveMatrixJob 参数中/strong>。

我不得不做两份工作,因为我无法在不安装其他插件的情况下进行此动态更新,而这在当时是不可能的。

对于第二点,您可以向脚本添加逻辑以检查自上次构建后文件夹是否已更新,并跳过未更新的文件夹。或者你可以搜索一些插件,但我的建议是使用脚本来完成更简单的任务。

【讨论】:

  • 谢谢,这与我开发的解决方案非常相似。最终,我选择保留一个列出所有源文件夹的配置文件——只要文件在源代码管理中得到更新,就会启动一项使用 REST API 更新另一个文件的配置的工作。感谢您的提示 - 我没有意识到您可以从工作中运行这些 groovy 的东西!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多