当前位置:网站首页>Jenkins API groovy调用实践: Jenkins Core Api & Job DSL创建项目
Jenkins API groovy调用实践: Jenkins Core Api & Job DSL创建项目
2022-08-09 12:34:00 【学亮编程手记】
在大规模的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运行
创建完成
边栏推荐
- 用场景定义硬件,英码科技破解“边缘计算”密码
- Flutter入门进阶之旅(十)Dialog&Toast
- [HCIP Continuous Update] Principle and Configuration of IS-IS Protocol
- Data Mining-05
- ABP 6.0.0-rc.1的新特性
- 造自己的芯,让谷歌买单!谷歌再度开源 180nm 工艺的芯片
- FFmpeg库在win10上配置使用(不配置libx264)
- Flutter entry and advanced tour (6) Layout Widget
- 随机快排时间复杂度是N平方?
- ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
猜你喜欢
Flutter入门进阶之旅(二)Hello Flutter
[HCIP Continuous Update] Principle and Configuration of IS-IS Protocol
#物联网征文#小熊派设备开发实战
AI basketball referee, walking is special, ask harden care don't care
新起之秀 DPU,正在掀起数据中心变革!
【HCIP持续更新】IS-IS协议原理与配置
#Internet of Things essay#Xiaoxiong pie equipment development actual combat
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
基于CAP组件实现补偿事务与幂等性保障
工作任务统计
随机推荐
注:检测到当前使用的ADB不是HBuilder内置或自定义ADB:PID为:9544进程名称为:adb.exe 路径为:c:\users\administrator\appdata\local\and
Ten minutes to teach you how to use VitePress to build and deploy a personal blog site
流量焦虑背后是企业对客户关系管理的不足
Intra-group reverse order adjustment of K nodes
SQL Server查询优化 (转载非原创)
从NPU-SLAM-EDA技术分析
脱光衣服待着就能减肥,当真有这好事?
ERP不规范,同事两行泪 (转载非原创)
World's 4th mad scientist dies on his 103rd birthday
ABAP interview questions: how to use the System CALL interface of the ABAP programming language, direct execution ABAP server operating System's shell command?
微服务架构的核心关键点
关于Retrofit网络请求URL中含有可变参数的处理
系统提供的堆 VS 手动改写堆
Glory to the Blue Yonder, speeds up the strategic growth
Rust from entry to proficient 04 - data types
大佬们,请教一下,我看官方文档中,sqlserver cdc只支持2012版之后的,对于sqlser
MySQL 原理与优化,Group By 优化 技巧
中科院打脸谷歌:普通电脑追上量子优越性,几小时搞定原本要一万年的计算...
Flutter入门进阶之旅(一)-初识Flutter
AI篮球裁判火了,走步算得特别准,就问哈登慌不慌