您现在的位置是:亿华云 > 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)