我写这篇文章包含以下文件共享库(REF https://jenkins.io/doc/book/pipeline/shared-libraries/)(在瓦尔/ generateJobsForJenkinsfiles.groovy):
/**
* Creates jenkins pipeline jobs from pipeline script files
* @param gitRepoName name of github repo, e.g. <organisation>/<repository>
* @param filepattern ant style pattern for pipeline script files for which we want to create jobs
* @param jobPath closure of type (relativePathToPipelineScript -> jobPath) where jobPath is a string of formated as '<foldername>/../<jobname>' (i.e. jenkins job path)
*/
def call(String gitRepoName, String filepattern, def jobPath) {
def pipelineJobs = []
def base = env.WORKSPACE
def pipelineFiles = new FileNameFinder().getFileNames(base, filepattern)
for (pipelineFil in pipelineFiles) {
def relativeScriptPath = (pipelineFil - base).substring(1)
def _jobPath = jobPath(relativeScriptPath).split('/')
def jobfolderpath = _jobPath[0..-2]
def jobname = _jobPath[-1]
echo "Create jenkins job ${jobfolderpath.join('/')}:${jobname} for $pipelineFil"
def dslScript = []
//create folders
for (i=0; i<jobfolderpath.size(); i++)
dslScript << "folder('${jobfolderpath[0..i].join('/')}')"
//create job
dslScript << """
pipelineJob('${jobfolderpath.join('/')}/${jobname}') {
definition {
cpsScm {
scm {
git {
remote {
github('$gitRepoName', 'https')
credentials('github-credentials')
}
branch('master')
}
}
scriptPath("$relativeScriptPath")
}
}
configure { d ->
d/definition/lightweight(true)
}
}
"""
pipelineJobs << dslScript.join('\n')
//println dslScript
}
if (!pipelineJobs.empty)
jobDsl sandbox: true, scriptText: pipelineJobs.join('\n'), removedJobAction: 'DELETE', removedViewAction: 'DELETE'
}
所以我们必须针对不同的任务像计划jenkinsfile审查不同的工作,申请jenkinsfile申请,销毁jenkinsfile以销毁我们创建的任何东西。所以没有旧的工作。 所有需要加载到一个分支,当我尝试通过主jenkins文件加载多个jenkinsfile时,stage方法仍然合并管道。 我需要自动化方法的帮助,而不是手动配置每个jenkins文件。 –
如果你需要[在Jenkinsfile之间共享一些groovy代码,那里有一个插件](https://github.com/jenkinsci/workflow-cps-global-lib-plugin)。 – hakamairi