jenkins版本:2.150.1
pipeline语法选择有:Scripted(脚本式) Declarative(声明式)
jenkins从2.5版本开始支持两种格式的写法,本文使用Declarative语法,Jenkins社区推荐的语法。
本文篇幅有限,省略了代码检查、单元测试、制品库管理等过程。
环境
2台服务器,jenkins和部署服务器,其中jenkins服务器也用作编译服务器,最合理的方式应该将jenkins和编译服务器分别独立。
jenkins服务器:linux CentOS 6.7
部署服务器:linux CentOS 6.7
项目:springboot 2.x
源码管理:SVN
添加节点
将jenkins服务器的/root/.ssh/id_rsa.pub内容添加至节点的/root/.ssh/authorized_keys文件下,若没有则创建
在jenkins服务器上执行 ssh ip 命令若能免密登录则配置成功
登录jenkins选择节点列表,点击New Node,添加节点的详细过程不做详细说明。
创建jenkins job
新建任务--> 选择流水线方式
pipeline{
agent none
stages{
stage('检出代码'){
agent {
label 'master'
}
steps{
checkout([$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '',
excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '',
locations: [[cancelProcessOnExternalsFail: true, credentialsId: '799a3fc0-7728-4579-a0dc-386af2bc8383',
depthOption: 'infinity', ignoreExternalsOption: true, local: '.',
remote: '']], quietOperation: true, workspaceUpdater: [$class: 'UpdateUpdater']])
//remote参数是项目的SVN地址
}
}
stage('构建'){
agent {
label 'master'
}
tools{ //tools的解释见下文
maven 'mvn-3.6.0'
}
steps{
sh "mvn clean package -DskipTests"//这里忽略了单元测试
}
}
stage("上传制品"){
agent {
label 'master'
}
steps{
stash(includes: "*/*.jar", name: "springboot.jar")
}
}
stage("下载制品"){
agent{
label ''//部署服务器的别名
}
steps{
unstash(name: "springboot.jar")
}
}
stage("部署"){
agent{
label ''//部署服务器的别名
}
steps{
sh "mv target/*.jar /项目路径/springboot.jar"//springboot项目的存放位置
sh "/项目路径/server.sh restart"//server.sh是springboot项目的启动脚本,需自行编写
}
}
}
}
tools解释
jenkins中可以定义全局工具 系统管理 --> 全局工具配置,这样在pipeline中使用tools{maven 'mvn-3.6.0'},会自动检测并安装,不需要手动安装到服务器了
checkout语法
checkout的pipeline语法太长,一般不自己写,用jenkins的pipeline-syntax自动生成
这里是以SVN为例,填写url,认证信息,本地工作空间
点击最下方的Generate Pipeline Script
工作空间
假设jenkins home的路径为/home/jenkins
创建了一个名为Example的jenkins任务
那么该任务的执行过程中文件的存放路径为:/home/jenkins/Example
若Checkout的Local Module directory为.,那么检出的文件就直接存放于/home/jenkins/Example
pipeline脚本的版本化
为了使pipeline脚本版本化,一般将pipeline脚本存放于SVN或Git中,然后使用Pipeline script from SCM的方式
填写脚本存放的SVN目录,认证信息,本地工作空间,Script Path
例如:
http: //.../pipeline/jenkinsfile-delopy.gy
SVN路径填写:http: //.../pipeline
Script Path填写:jenkinsfile-delopy.gy
注意Local Module directory
使用Pipeline script from SCM时,会先将脚本从SVN上检出到jenkins的工作目录,若脚本中包含了检出源代码的操作,可能会导致Local Module directory冲突,因此建议在配置Local Module directory时使用一个具有一定业务含义的目录,而不是用默认值
注意ProcessTreeKiller
jenkins会将job中产生的进程杀死
本例中在jenkins pipeline中执行server.sh启动springboot项目,jenkins任务结束后springboot项目的进程也会被杀死,这是jenkins的一个合理行为。
解决方法:
在参数化构建过程中添加:
JENKINS_NODE_COOKIE
dontKillMe
注意unstash和stash
stash步骤会将文件存储在tar文件中,对于大文件的stash操作会消耗Jenkins master的计算资源,Jenkins官方文档推荐,当文件大小为5~100MB时,应考虑使用其他方案,例如用制品仓库管理。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。