pipline 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色, 是运行在 jenkins 2.X 版本的核心插件, 简单来说 Pipline 就是一套运行于 Jenkins 上的工作流框架, 将原本独立运行于单个或者多个节点的任务连接起来, 实现单个任务难以完成的复杂发布流程, 从而实现单个任务很难实现的复杂流程编排和任务可视化, Pipeline 的实现方式是一套Groovy DSL, 任何发布流程都可以表述为一段 Groovy 脚本。
pipline 语法:
Stage:阶段, 一个 pipline 可以划分为若干个 stage, 每个 stage 都是一个操作步骤,比如 clone 代码、 代码编译、 代码测试和代码部署, 阶段是一个逻辑分组, 可以跨多个 node 执行。
Node:节点, 每个 node 都是一个 jenkins 节点, 可以是 jenkins master 也可以是 jenkins agent, node 是执行 step 的具体服务器。
Step:步骤, step 是 jenkins pipline 最基本的操作单元, 从在服务器创建目录到构建容器镜像, 由各类 Jenkins 插件提供实现, 一个 stage 中可以有多个 step, 例如: sh“make;
pipline 优势:
可持续性: jenkins 的重启或者中断后不影响已经执行的 Pipline Job;
支持暂停: pipline 可以选择停止并等待人工输入或批准后再继续执行;
可扩展: 通过 groovy 的编程更容易的扩展插件;
并行执行: 通过 groovy 脚本可以实现 step, stage 间的并行执行, 和更复杂的相互依赖关系;
1.创建 pipline job
2.测试简单 pipline job 运行
Pipeline 测试命令
3.执行 pipline job
4.自动生成拉取代码的 pipline 脚本:
点击 流水线语法 跳转至生成脚本 URL
首先生成流水线语法
其中第④步是要输入账户密码,如果原本已经设置可以直接选择root
生成流水线脚本
git branch: 'main', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git'
5.更改 pipline job
node {
stage("clone 代码"){
git branch: 'main', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git'
}
stage("代码构建"){
echo "代码构建"
}
stage("代码测试"){
echo "代码测试"
}
stage("代码部署"){
echo "代码部署"
}
6.执行 jenkins job
7.验证 git clone 日志
8.jenkins 服务器验证 clone 代码数据
(需要注意的是,slave服务器上 必须都要有这个路径文件
ll /var/lib/jenkins/workspace/pipline-test/
9.pipline 中执 shell 命令打包代码
node {
stage("clone 代码"){
sh 'rm -rf /var/lib/jenkins/workspace/pipline-test/*'
git branch: 'main', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git'
}
stage("代码构建"){
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && tar czvf code.tar.gz ./index.html'
}
stage("代码测试"){
echo "代码测试"
}
stage("代码部署"){
echo "代码部署"
}
}
10.pipline 部署示例:
注意:web1和web2服务器里的tomcat需要设置
mkdir -p /data/tomcat/tomcat_appdir # 保存 web 压缩包
mkdir -p /data/tomcat/tomcat_webdir # 保存解压后的web目录
mkdir -p /data/tomcat/tomcat_webapps # tomcat app 加载目录,在 server.xml 定义
在server.xml设置;
vim /usr/local/apache-tomcat-8.5.55/conf/server.xml
<Host name="localhost" appBase="/data/tomcat/tomcat_webapps"
unpackWARs="false" autoDeploy="false">
ln -sv /data/tomcat/tomcat_webdir/myapp /data/tomcat/tomcat_webapps/myapp #设置软链接
脚本式
node {
stage("clone 代码"){
sh 'rm -rf /var/lib/jenkins/workspace/pipline-test/*'
git branch: 'main', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git'
}
stage("代码构建"){
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && tar czvf code.tar.gz ./index.html'
}
stage("代码复制"){
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && scp code.tar.gz [email protected]:/data/tomcat/tomcat_appdir/'
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && scp code.tar.gz [email protected]:/data/tomcat/tomcat_appdir/'
}
stage("停止 tomcat 服务"){
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh stop"'
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh stop"'
}
stage("代码部署"){
sh 'ssh [email protected] "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
sh 'ssh [email protected] "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
}
stage("启动 tomcat 服务"){
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh start"'
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh start"'
}
}
执行并验证 pipline job:
声明式:
指定 node 节点 运行 job
- 在slave1和2上 apt-get install git -y
2.设置slave1和2 免密登录到两个web1.2
ssh-keygen
ssh-copy-id jack@10.0.0.105
ssh-copy-id jack@10.0.0.106
git branch: 'develop', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git'
声明一个节点;
node("jenkins-slave1"){
stage("clone 代码"){
sh 'rm -rf /var/lib/jenkins/workspace/pipline-test/*'
git branch: 'develop', credentialsId: 'c2da95c2-0b69-408f-8569-ae5e34f95395', url: '[email protected]:magedu/app1.git',
url: '[email protected]:magedu/app1.git'
}
stage("代码构建"){
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && tar czvf code.tar.gz ./index.html'
}
stage("代码复制"){
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && scp code.tar.gz [email protected]:/data/tomcat/tomcat_appdir/'
sh 'cd /var/lib/jenkins/workspace/pipline-test/ && scp code.tar.gz [email protected]:/data/tomcat/tomcat_appdir/'
}
stage("停止 tomcat 服务"){
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh stop"'
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh stop"'
}
stage("代码部署"){
sh 'ssh [email protected] "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
sh 'ssh [email protected] "rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir && tar xvf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"'
}
stage("启动 tomcat 服务"){
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh start"'
sh 'ssh [email protected] "/usr/local/apache-tomcat-8.5.55/bin/catalina.sh start"'
}
}
3.验证 slave 执行构建
4.验证 web 服务器代码版本
设置完毕