如何从Jenkins Job DSL Groovy代码创建和编辑管道定义文件

时间:2019-05-22 08:28:18

标签: jenkins-pipeline jenkins-groovy jenkins-job-dsl

我在适当的位置使用了普通的Job DSL代码(主脚本),可创建约100个测试作业。该方法是它们应该可以手动执行,以及我们希望在晚上具有执行它们的管道。 因此,还将创建管道作业(多个)。没问题

但是,由于主要的DSL groovy脚本会很大,所以我希望将相应的管道定义代码(将加载管道作业)放置在单独的文件中。由于作业太多,我已经将所有作业的配置放在一个单独的文件中,并在MAP中对其进行定义。 创建所有测试作业的逻辑放在主脚本中,并循环遍历位于单独文件中的MAP。效果很好。

不想对必须在管道定义中配置的作业名称进行硬编码(重复信息)!因此,计划是使用与创建测试作业相同的主脚本逻辑来创建管道定义文件。然后,通过MAP进行的每次迭代都可以获得所有相关信息,例如作业名称和目标主机等。

有什么想法可以从groovy job dsl脚本中在slave中创建和编辑单独的(管道定义)文件吗?

我尝试使用标准的常规代码创建文件。但是很明显,它们是在Jenkins Master中创建的。这必须在奴隶中。

def newFile = new File("${WORKSPACE}/scripts/jenkins_job_dsl/pipeline.conf")
print "${newFile}"

使用“新文件”时,我在种子作业中得到了它:

...
/home/builduser/workspace/Test_and_demo/Richard_Test/seed_job_richard/scripts/jenkins_job_dsl/pipeline.conf
FATAL: No such file or directory
13:33:50 java.io.IOException: No such file or directory
...

1 个答案:

答案 0 :(得分:0)

读取种子作业中已经存在的文件pipeline.conf是否是您的问题?

您应该可以使用readFileFromWorkspace,如下所示:

// read the file release.groovy from the seed job's workspace
// and configure a Groovy build step using that script
def releaseScript = readFileFromWorkspace('release.groovy')
job('example-1') {
    steps {
        groovyCommand(releaseScript)
    }
}

// read the file run.bat from a workspace of job project-a
// and use it to configure another job
def runScript = readFileFromWorkspace('project-a', 'run.bat')
job('example-2') {
    steps {
        batchFile(runScript)
    }
}
相关问题