Jenkins之pipline实现代码部署

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

  1. 在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 服务器代码版本

在这里插入图片描述
设置完毕
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lcongming/article/details/119651860