Jenkins CI Pipeline scripting
Jenkins pipeline is a suite of Jenkins plugins. Pipelines can be seen as a sequence of stages to perform the tasks just detailed, among others, thus providing continuous releases of your application.
In Jenkins, Pipelines are specified by using a specific DSL following almost the same structure as Groovy to specify its statements and expressions. Pipelines has specific sentences or elements to define script sections, which follow the Groovy syntax.
A collection of examples, tips and tricks of scripting for the Jenkins Pipeline
How to get actual working directory:
def workspace = pwd()
Function for fetch direcotry name:
def getFolderName() {
def array = pwd().split("/")
return array[array.length - 2];
}
How to edit system PATH variable:
env.PATH = "${workspace}/env/bin:/usr/bin:${env.PATH}"
How to get git commit hash:
def commitHash = sh(returnStdout: true, script: 'git rev-parse HEAD').trim().take(7)
How to get commit message:
def commitText = sh(returnStdout: true, script: 'git show -s --format=format:"*%s* _by %an_" HEAD').trim()
How to get git commit hash from previous build:
@NonCPS
def prevBuildLastCommitId() {
def prev = currentBuild.previousBuild
def items = null
def result = null
if (prev != null && prev.changeSets != null && prev.changeSets.size() && prev.changeSets[prev.changeSets.size() - 1].items.length) {
items = prev.changeSets[prev.changeSets.size() - 1].items
result = items[items.length - 1].commitId
}
return result
}
How to get git commit hash from previous success build:
def getLastSuccessfulCommit() {
def lastSuccessfulHash = null
def lastSuccessfulBuild = currentBuild.rawBuild.getPreviousSuccessfulBuild()
if ( lastSuccessfulBuild ) {
lastSuccessfulHash = commitHashForBuild( lastSuccessfulBuild )
}
return lastSuccessfulHash
}
How to clone git repository?
def credentialsRepoId = 'GIT_ID'
def cloneRepository(def targetDir, def gitUrl, def branch) {
checkout([
$class: 'GitSCM',
branches: [[
name: '*/' + branch
]],
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: targetDir
]],
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: credentialsRepoId,
url: gitUrl
]]
])
}
How to transform JSON string to Groovy object?
def jsonParse(json) {
return new groovy.json.JsonSlurper().parseText(json)
}
// example
def json = '{"foo": "bar", "baz": "qux"}'
def data = jsonParse(json)
echo data.foo
echo data.baz
How to revers sort lists?
@NonCPS
def sortReverse(list) {
list.reverse()
}
How to get job status?
import groovy.json.JsonSlurper
def getJobStatus(String jobName){
def rx = httpRequest "https://jenkins.example.com/job/${jobName}/lastBuild/api/json"
def rxJson = new JsonSlurper().parseText(rx.getContent())
return rxJson['result']
}
How to get diff between two dates?
def timeDiff(st) {
def delta = (new Date()).getTime() - st.getTime()
def seconds = delta.intdiv(1000) % 60
def minutes = delta.intdiv(60 * 1000) % 60
return "${minutes} min ${seconds} sec"
}
// example
def start = new Date()
// another commands...
echo "Time spent: ${timeDiff(start)}"
How to check if date is in date range?
def testDate = Date.parse('yyyy-MM-dd', '2017-07-07')
def startDate = Date.parse('yyyy-MM-dd', '2017-06-03')
def endDate = Date.parse('yyyy-MM-dd', '2017-08-12')
boolean isWithinRange(Date testDate) {
return !(testDate.before(startDate) || testDate.after(endDate))
}
How to load data from csv file?
def filenames = readFile 'filenames.txt'
def filenameArray = filenames.split(",")
for(int i = 0; i < filenameArray.size(); i++) {
def file = filenameArray[i]
echo file
}
How to use docker?
node('docker') {
stage 'start database'
docker.image('redis:3.0.7-alpine').withRun { c ->
def ip = hostIp(c)
stage 'client set'
docker.image('redis:3.0.7-alpine').inside {
sh "redis-cli -h ${ip} set test 123"
}
stage 'client get'
docker.image('redis:3.0.7-alpine').inside {
sh "redis-cli -h ${ip} get test"
}
stage 'client del'
docker.image('redis:3.0.7-alpine').inside {
sh "redis-cli -h ${ip} del test"
}
}
}
def hostIp(container) {
sh "docker inspect -f {{.NetworkSettings.IPAddress}} ${container.id} > host.ip"
readFile('host.ip').trim()
}
How to list all jobs?
import jenkins.model.*
@NonCPS
def listJobs() {
Jenkins.instance.items.each {
println it.name
}
}
listJobs()
How to delete all build from job history?
def jobName = "education-webapp"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
How to load all slaves?
@NonCPS
def getSlaves() {
def slaves = []
hudson.model.Hudson.instance.slaves.each {
slaves << it.name
}
return slaves
}
for (String slave : getSlaves()) {
node(slave) {
sh "hostname"
}
}
How to load data from url?
def fetchDataFromRestApi(def url) {
def projectsApi = new URL("${url}")
return new groovy.json.JsonSlurper().parse(projectsApi.newReader())
}
How to load repository detail from Gitlab by using REST API?
@NonCPS
def getGitProjectDetails(def projectId, def gitUrl, def gitPrivateToken) {
def projectDetailsApi = new URL("${gitUrl}/projects/${projectId}?private_token=${gitPrivateToken}")
def projectDetails = new groovy.json.JsonSlurper().parse(projectDetailsApi.newReader())
def isActive = true
if( projectDetails.archived ) {
isActive = false
}
def details = new LinkedHashMap();
details.projectTags = projectDetails.tag_list
details.defaultBranch = projectDetails.default_branch
details.isActive = isActive
return details
}
// example
def projectDetails = getGitProjectDetails("project-name", "https://gitlab.com/", "supertrupersecrettoken")
echo projectDetails.projectTags
echo projectDetails.defaultBranch
echo projectDetails.isActive
Jenkins CI Pipeline scripting的更多相关文章
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- Jenkins CI&CD 自动化发布项目实战(下篇)
Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- Jenkins CI&CD 自动化发布项目实战(上篇)
Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...
- 如何在Jenkins CI 里调试
背景 厂内的CI系统把 Jenkins 和Github 连接了起来,这样Dev 只要通过github pr 就能够了解到测试job 运行的情况.有的时候,Dev会找到QA问,如何在Jenkins CI ...
- [转]利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
环境准备 Git: 安装部署使用略. Jenkins: 2.46.2版本安装部署略(修改jenkins执行用户为root,省得配置权限) JDK: 安装部署略. Maven: 安装部署略. 服务器免密 ...
- Jenkins流水线(pipeline)实战之:从部署到体验
关于Jenkins流水线(pipeline) Jenkins 流水线 (pipeline) 是一套插件,让Jenkins可以实现持续交付管道的落地和实施. 关于blueocean Blue Ocean ...
- 远程触发Jenkins的Pipeline任务
场景 虽然能配置提交代码时触发Jenkins任务,但有时并不需要每次提交代码都触发,而是仅在有需要时才执行. 除了在Jenkins页面上手动执行任务,还可以向Jenkins网站发起HTTP请求,触发指 ...
- 远程触发Jenkins的Pipeline任务的并发问题处理
前文概述 本文是<远程触发Jenkins的pipeline任务>的续篇,上一篇文章实战了如何通过Http请求远程触发指定的Jenkins任务,并且将参数传递给Jenkins任务去使用,文末 ...
- 如何在 Jenkins CI/CD 流水线中保护密钥?
CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...
随机推荐
- Python3实现机器学习经典算法(二)KNN实现简单OCR
一.前言 1.ocr概述 OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然 ...
- 微软职位内部推荐-Senior Software Engineer II-Sharepoint
微软近期Open的职位: SharePoint is a multi-billion dollar enterprise business that has grown from an on-prem ...
- hadoop Datanode Uuid unassigned
在配置hadoop的hdfs的时候,要首先格式化,然后才能启动,但是格式化的方式有的是不对出现Initialization failed for Block pool <registering& ...
- python单元测试之参数化
paramunittest下载地址:https://pypi.python.org/pypi/ParamUnittest/ 当然我们也可以通过pip install paramunittest方式进行 ...
- SpringMVC相关的面试题
1.什么是springMVC springmvc是spirng框架的一个模块,是一个基于MVC框架的web框架 2.springmvc的流程 a.客户端发送请求 b.前端控制器DispatcherSe ...
- Spring管理过滤器:org.springframework.web.filter.DelegatingFilterProxy
配置web.xml <filter> <filter-name>springSecurityFilterChain</filter-name> ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式—在AOP和remoting中被用的比较 ...
- Android性能测试工具APT
APT源码地址:https://code.csdn.net/Tencent/apt APT,Android Performance Testing Tools,适用于开发自测和定位性能瓶颈,帮助测试人 ...
- ZOJ2290_Game
题目意思是这样的,给定一个数N,第一个可以减去任意一个数(不能为N本身),然后接下来轮流减去一个数字,下一个人减去的数字必须大于0,且不大于2倍上一次被减去的数字. 把N减为0的人获胜. 看完题目后不 ...
- QoS专题-第5期-QoS实现之队列调度与报文丢弃
QoS实现之队列调度与报文丢弃 前面的专题里面介绍了通过优先级映射或者MQC对报文进行分类和标记,那么分类之后要做什么呢?那就是根据分类结果对报文进行流量控制处理.拥塞管理和拥塞避免就是两种流量控制手 ...