当前位置:网站首页>Jenkins API groovy calling practice: Jenkins Core Api & Job DSL to create a project
Jenkins API groovy calling practice: Jenkins Core Api & Job DSL to create a project
2022-08-09 13:43:00 【Study on programming's note】
在大规模的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运行
创建完成
边栏推荐
猜你喜欢
Go Affair, How to Become a Gopher and Find a Go Job in 7 Days, Part 1
The new features of ABP 6.0.0 - rc. 1
WSA工具箱安装应用商店提示无法工作怎么解决?
面试题精选:神奇的斐波那契数列
Flutter入门进阶之旅(五)Image Widget
某高校的R语言数据分析期末作业
5G China unicom AP:B SMS ASCII 转码要求
Redis源码剖析之字典(dict)
系统提供的堆 VS 手动改写堆
ViewPager fragments of nested data blank page abnormal problem analysis
随机推荐
How to reduce the size of desktop icons after the computer is reinstalled
系统提供的堆 VS 手动改写堆
ctfshow七夕杯2022
5G China unicom AP:B SMS ASCII 转码要求
CPU-MIPS32指令架构(无内锁流水线微处理器)
jenkins api创建自定义pipeline
Periodic sharing of Alibaba Da Tao system model governance
Rust 入门指南(使用JSON)
陈强教授《机器学习及R应用》课程 第十六章作业
我的2020年终总结
电脑重装系统后桌面图标如何调小尺寸
如何求最大公约数?
5G China unicom AP:B SMS ASCII Transcoding Requirements
联通网管协议框图
5G China unicom 一般性异常处理
流量焦虑背后是企业对客户关系管理的不足
数据挖掘-06
Flutter入门进阶之旅(三)Text Widgets
史上最猛“员工”,疯狂吐槽亿万富翁老板小扎:那么有钱,还总穿着同样的衣服!...
驻波比计算方法