文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 13:57

关注

 在大规模的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地址)

  1. pipelineJob("test-schdule-service") { 
  2.   description("this is my first job"
  3.   keepDependencies(false
  4.   parameters { 
  5.     choiceParam("test", [1, 2, 3], ""
  6.   } 
  7.   definition { 
  8.     cpsScm { 
  9.       scm { 
  10.         git { 
  11.           remote { 
  12.             github("https://gitlab.com/xxx/xxx.git""https"
  13.             credentials("24982560-17fc-4589-819b-bc5bea89da77"
  14.           } 
  15.           branch("*/master"
  16.         } 
  17.       } 
  18.       scriptPath("Jenkinsfile"
  19.     } 
  20.   } 
  21.   disabled(false

2.通过Playground转换DSL -> XML

url: http://job-dsl.herokuapp.com/


3.通过Jenkins Core Api创建项目

  1. import javax.xml.transform.stream.StreamSource 
  2. import jenkins.model.Jenkins 
  3.  
  4. //创建项目 
  5. void createOrUpdateJob(String name, String xml) { 
  6.     def j = Jenkins.instance 
  7.     String fullName = name 
  8.     if(name.contains('/')) { 
  9.         j = j.getItemByFullName(name.tokenize('/')[0..-2]) 
  10.         name = name.tokenize('/')[-1] 
  11.     } 
  12.     Jenkins.checkGoodName(name
  13.     if(j.getItem(name) == null) { 
  14.         println "Created job \"${fullName}\"." 
  15.         j.createProjectFromXML(name, new ByteArrayInputStream(xml.getBytes())) 
  16.         j.save() 
  17.     } 
  18.     else if(j.getItem(name).configFile.asString().trim() != xml.trim()) { 
  19.         j.getItem(name).updateByXml(new StreamSource(new ByteArrayInputStream(xml.getBytes()))) 
  20.         j.getItem(name).save() 
  21.         println "Job \"${fullName}\" already exists.  Updated using XML." 
  22.     } 
  23.     else { 
  24.         println "Nothing changed.  Job \"${fullName}\" already exists." 
  25.     } 
  26.  
  27. try { 
  28.     //just by trying to access properties should throw an exception 
  29.     itemName == null 
  30.     xmlData == null 
  31.     isPropertiesSet = true 
  32. } catch(MissingPropertyException e) { 
  33.     println 'ERROR Can\'t create job.' 
  34.     println 'ERROR Missing properties: itemName, xmlData' 
  35.     return 
  36.  
  37. String xmlData = """-- 1. test-schdule-service --> 
  38.  
  39.      
  40.     this is my first job 
  41.     false 
  42.      
  43.          
  44.              
  45.                  
  46.                     'java.util.Arrays$ArrayList'
  47.                         'string-array'
  48.                             1 
  49.                             2 
  50.                             3 
  51.                          
  52.                      
  53.                     <name>testname
  54.                      
  55.                  
  56.              
  57.          
  58.          
  59.             https://github.com/https://gitlab.com/xxx/xxx.git/ 
  60.          
  61.      
  62.      
  63.     'org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition'
  64.         Jenkinsfile 
  65.         false 
  66.         'hudson.plugins.git.GitSCM'
  67.              
  68.                  
  69.                     https://github.com/https://gitlab.com/xxx/xxx.git.git 
  70.                     24982560-17fc-4589-819b-bc5bea89da77 
  71.                  
  72.              
  73.              
  74.                  
  75.                     <name>*/mastername
  76.                  
  77.              
  78.             2 
  79.             false 
  80.             Default 
  81.             'hudson.plugins.git.browser.GithubWeb'
  82.                 https://github.com/https://gitlab.com/xxx/xxx.git/ 
  83.              
  84.          
  85.      
  86.     false 
  87.  
  88. ""
  89. String itemName = "my-first-pipeline" 
  90.  
  91. createOrUpdateJob(itemName, xmlData) 

4.通过Jenkins Script Console运行


创建完成


 

来源:DevOps云学堂内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯