实践: Jenkins Core Api & Job DSL创建项目

网友投稿 279 2023-05-21

[[373964]]

 在大规模的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 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.

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)  1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.

4.通过Jenkins Script Console运行

创建完成

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:手机来电查询,一键查手机号归属地
下一篇:一文带你了解 chatgpt
相关文章

 发表评论

暂时没有评论,来抢沙发吧~