您现在的位置是:亿华云 > IT科技类资讯
实践: Jenkins Core Api & Job DSL创建项目
亿华云2025-10-09 03:16:44【IT科技类资讯】6人已围观
简介在大规模的Jenkins实践中创建项目也是一个问题,如何通过模板自动化的创建Jenkins项目呢? 可以通过安装Job Dsl插件后,通过 Dsl直接创建项目。也可以通过工具将dsl转换为xml,然后
在大规模的实践Jenkins实践中创建项目也是一个问题,如何通过模板自动化的创建创建Jenkins项目呢? 可以通过安装Job Dsl插件后,通过 Dsl直接创建项目。项目也可以通过工具将dsl转换为xml,源码下载实践然后再通过Jenkins API创建项目。创建相对比较第一种方式更加直接一些,项目由于时间问题今天暂时分享第二种创建项目的实践方式。
1.根据Job DSL API生成模板
我们需要先安装好Job Dsl 插件,创建然后执行DSL创建项目。企商汇项目地址:https://jenkinsci.github.io/job-dsl-plugin/

例如: 使用官网的实践example。这里定义了一个流水线项目,创建配置了项目的项目信息包括(项目描述、项目参数、源码库实践Jenkinsfile地址)
pipelineJob("test-schdule-service") { description("this is my first job") keepDependencies(false) parameters { choiceParam("test",创建 [1, 2, 3], "") } definition { cpsScm { scm { git { remote { github("https://gitlab.com/xxx/xxx.git", "https") credentials("24982560-17fc-4589-819b-bc5bea89da77") } branch("*/master") } } scriptPath("Jenkinsfile") } } disabled(false) }2.通过Playground转换DSL -> XML
url: http://job-dsl.herokuapp.com/

3.通过Jenkins Core Api创建项目
import javax.xml.transform.stream.StreamSource import jenkins.model.Jenkins //创建项目 void createOrUpdateJob(String name, String xml) { def j = Jenkins.instance String fullName = name if(name.contains(/)) { j = j.getItemByFullName(name.tokenize(/)[0..-2]) name = name.tokenize(/)[-1] } Jenkins.checkGoodName(name) if(j.getItem(name) == null) { println "Created job \"${ fullName}\"." j.createProjectFromXML(name, new ByteArrayInputStream(xml.getBytes())) j.save() } else if(j.getItem(name).configFile.asString().trim() != xml.trim()) { j.getItem(name).updateByXml(new StreamSource(new ByteArrayInputStream(xml.getBytes()))) j.getItem(name).save() println "Job \"${ fullName}\" already exists. Updated using XML." } else { println "Nothing changed. Job \"${ fullName}\" already exists." } } try { //just by trying to access properties should throw an exception itemName == null xmlData == null isPropertiesSet = true } catch(MissingPropertyException e) { println ERROR Can\t create job. println ERROR Missing properties: itemName, xmlData return } String xmlData = """<!-- 1. test-schdule-service --> <flow-definition> <actions></actions> <description>this is my first job</description> <keepDependencies>false</keepDependencies> <properties> <hudson.model.ParametersDefinitionProperty> <parameterDefinitions> <hudson.model.ChoiceParameterDefinition> <choices class=java.util.Arrays$ArrayList> <a class=string-array> <string>1</string> <string>2</string> <string>3</string> </a> </choices> <name>test</name> <description></description> </hudson.model.ChoiceParameterDefinition> </parameterDefinitions> </hudson.model.ParametersDefinitionProperty> <com.coravy.hudson.plugins.github.GithubProjectProperty> <projectUrl>https://github.com/https://gitlab.com/xxx/xxx.git/</projectUrl> </com.coravy.hudson.plugins.github.GithubProjectProperty> </properties> <triggers></triggers> <definition class=org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition> <scriptPath>Jenkinsfile</scriptPath> <lightweight>false</lightweight> <scm class=hudson.plugins.git.GitSCM> <userRemoteConfigs> <hudson.plugins.git.UserRemoteConfig> <url>https://github.com/https://gitlab.com/xxx/xxx.git.git</url> <credentialsId>24982560-17fc-4589-819b-bc5bea89da77</credentialsId> </hudson.plugins.git.UserRemoteConfig> </userRemoteConfigs> <branches> <hudson.plugins.git.BranchSpec> <name>*/master</name> </hudson.plugins.git.BranchSpec> </branches> <configVersion>2</configVersion> <doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations> <gitTool>Default</gitTool> <browser class=hudson.plugins.git.browser.GithubWeb> <url>https://github.com/https://gitlab.com/xxx/xxx.git/</url> </browser> </scm> </definition> <disabled>false</disabled> </flow-definition> """ String itemName = "my-first-pipeline" createOrUpdateJob(itemName, xmlData)4.通过Jenkins Script Console运行

创建完成

很赞哦!(4)