开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情
大家好,我是Java步兵营的二排长,首先需要申明一下组织上并未给我下发任何任务,我是自发组织进攻Jenkins阵地的。今天是发起进攻的前一日,我先行一步深入敌人内部打探敌人的虚实!
主线任务:占领Jenkins
本次需要占领的高地是Jenkins,为啥要拿下它:
- 对于研发工程师而言,Jenkins可以帮助我们自动化化构建与持续集成
- 对于测试工程师而言,Jenkins可以协助进行自动化测试
- 对于运维工程师而言,Jenkins可以协助进行自动化部署
据线人可靠消息它是一款使用Java语言开发的开源的自动化服务器。据说功能十分强大,通过界面点击或Jenkinsfile就可以执行相应的任务。Shift!看来这次又有一场硬仗要打!
DevOps
据说Jenkins与DevOps有密切联系,所以我打算先从DevOps所在地溜一圈,经过实地考察了解到原来DevOps是Development和Operations两个营合并的,Dev是软件开发营,Ops是IT运维营。他们都听从DevOps的统一指挥。通过自动化软件交付和架构变更的流程,使得项目从构建、测试、发布都更加便捷和可靠。
pipeline流水线
从DevOps阵地撤出时,我独自驾车驶往Jenkins阵地的pipeline流水线道路上疾驰,不得不说敌人的这条“高速公路”修的真是好,完美的用自动化形式展现了从软件版本控制库到用户的过程。给大伙看看pipeline长啥样:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Hello World'
}
}
}
post {
failure{
mail to: 'xxxx@qq.com',subject:'pipeline failed :{'
}
}
}
稍稍解释一下这个结构:
- pipeline:代表整条流水线,包含执行逻辑
- agent:指定流水线的执行位置(物理机、虚拟机或Docker)
- stages:流水线中多个stage的容器,至少包含一个stage
- stage:可以理解为一个阶段。每个阶段都要有一个名字(例如:Build就是名字)
- steps:代表阶段中一个或多个步骤(例如:echo就是一个步骤)
- post:整个pipeline或阶段完成后一些附加步骤,是可选的
根据pipeline或阶段完成状态,post部分分成多种条件块,包括:
- always:不论当前完成状态是什么都执行
- changed:只要当前完成状态和上次完成状态不同就执行
- fixed:上次完成状态为失败或不稳定,本次完成成功时执行
- regression:上一次完成状态为成功,当前完成状态为失败、不稳定或中止时执行
- aborted:当前执行结果是中止状态时执行
- failure:当前完成状态为失败时执行
- success:当前完成状态为成功时执行
- unstable:当前完成状态为不稳定时执行
- cleanup:清理条件块。不论当前完成状态是什么,在其他所有条件块执行完成后都执行
两座狙击塔
Jenkins中编辑流水线式,有两种不同的语法样式:
- 脚本式语法(scripted syntax):是Jenkins最开始实现的流水线,是一种在流水线脚本中定义逻辑和程序流程。对Groovy依赖颇深
//脚本式流水线
node('work_node1'){
stage('source'){
//从仓库获取代码
git 'git@xxxx:/xx/xx/shop.git'
}
stage('Compile'){
//运行gradle进行编译和单元测试
sh 'gradle clean compileJava test'
}
}
- 声明式语法(declarative syntax):是Jenkins提供的新选择。清晰的段落描述着每块区域的逻辑,显得更加有层次
//声明式流水线
pipeline {
agent {label 'worker_node1'}
stages {
stage('source') {
steps {
//从仓库获取代码
git 'git@xxxx:/xx/xx/shop.git'
}
}
}
stage('Compile'){
//运行gradle进行编译和单元测试
sh 'gradle clean compileJava test'
}
}
返程
今日情报收获满满,次日开始进行作战!计划第一日作战如下如下:
- 利用Docker安装Jenkins
- 配置Jenkins周边环境
- 制作一个简单的构建案例