Jenkins构建CI/CD

什么是CI/CD:持续集成/持续发布—-开发(git) —>git主库—>jenkins(git+jdk+tomcat+maven打包+测试)—>发布到tomcat服务器

Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件.

为什么要 CI / CD 方法简介

软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。

它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少基于有缺陷或失败的先前版本开发新代码的机会。

这种方法有三种主要方法,每种方法都根据最适合您的策略进行应用。

持续集成(Continuous Integration, CI): 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。

持续部署(Continuous Deployment, CD): 部署到测试环境、预生产环境/灰度环境、生产环境。

持续交付(Continuous Delivery, CD): 将最终产品发布到生产环境、给用户使用。

一、jenkins介绍

Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL(代码仓库地址),将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到Tomcat容器中。

1、Jenkins概述
  1. 是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建的一些定时执行的任务。JenkinsJava语言编写,可在Tomcat等流行的容器中运行,也可独立运行。

jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。

2、Jenkins目标

① 持续、自动地构建/测试软件项目。

② 监控软件开发流程,快速问题定位及处理,提高开发效率。

3、Jenkins特性
  1. 开源的java语言开发持续集成工具,支持CICD
  2. 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
  3. 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
  4. 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
  5. 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  6. 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如gitsvnmavendocker等。

工作流程图:

Jenkins CI/CD 应用 - 图1

  1. 测试环境中:
  2. 1.开发者会将代码上传到版本库中。
  3. 2.jenkins通过配置版本库的连接地址,获取到源代码。
  4. 3.jenkins获取到源代码之后通过参数化构建(或者触发器)开始编译打包。
  5. 4.jenkins通过调用mavenAnt或者Gradle)命令实现编译打包过程。
  6. 5.生成的war包通过ssh插件上传到远程tomcat服务器中通过shell脚本自动发布项目。
  7. 生产环境:
  8. 测试环境将项目测试没问题后,将项目推送到线上正式环境。
  9. 1.可以选择手动。
  10. 2.也可以通过调用脚本推送过去。

4、产品发布流程

产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线

持续集成(Continuous integration,简称CI)

持续部署(continuous deployment)

持续交付(Continuous delivery)

Jenkins CI/CD 应用 - 图2

二、部署应用Jenkins+Github+Tomcat实战

准备环境:

两台机器

git-server ——https://github.com/bingyue/easy-springmvc-maven

jenkins-server —-192.168.246.212—-最好是3个G以上

java-server ——-192.168.246.210

https://github.com/bingyue/easy-springmvc-maven

Jenkins2.303.1版本安装

Yum安装

1.配置 Jenkins的yum源
  1. # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  2. # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  3. # yum install epel-release java-11-openjdk-devel -y
  4. # yum install jenkins -y
  5. # systemctl daemon-reload

2.启动Jenkins
  1. # systemctl start jenkins
  2. # systemctl status jenkins
  3. [root@jenkins yum.repos.d]# tail -f /var/log/jenkins/jenkins.log

Jenkins CI/CD 应用 - 图3

3.访问登录

当您第一次访问一个新的 Jenkins 实例时,系统会要求您使用自动生成的密码将其解锁

1.浏览到http://localhost:8080(或您在安装时为 Jenkins 配置的任何端口)并等待解锁 Jenkins页面出现

Jenkins CI/CD 应用 - 图4

2.从 Jenkins 控制台日志输出中,复制自动生成的字母数字密码(在 2 组星号之间)。

Jenkins CI/CD 应用 - 图5

3.使用插件自定义 Jenkins 或者 推荐安装插件,这里飞哥使用的推荐安装插件。。。

Jenkins CI/CD 应用 - 图6

Jenkins CI/CD 应用 - 图7

4.创建第一个管理员用户

Jenkins CI/CD 应用 - 图8

Jenkins CI/CD 应用 - 图9

Jenkins CI/CD 应用 - 图10

War包安装

1.下载安装包

百度搜索openjdk11、tomcat、maven、jenkins
openjdk11经过测试之后,不能监控当前版本jenkins。我这里换成了jdk8的
jdk官网:https://www.oracle.com/java/technologies/downloads/
jenkins官网:https://www.jenkins.io/
tomcat官网:https://tomcat.apache.org/
maven官网:https://maven.apache.org/

Jenkins CI/CD 应用 - 图11
image.png

Jenkins CI/CD 应用 - 图13

Jenkins CI/CD 应用 - 图14

Jenkins CI/CD 应用 - 图15

  1. [root@jenkins ~]# wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
  2. [root@jenkins ~]# wget https://get.jenkins.io/war/2.303/jenkins.war
  3. [root@jenkins ~]# wget https://downloads.apache.org/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz
  4. [root@jenkins ~]# wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.70/bin/apache-tomcat-8.5.70.tar.gz
  5. 还有openjdk11
  6. [root@jenkins ~]# cd /usr/local
  7. [root@jenkins local]# tar -xvzf apache-maven-3.8.2-bin.tar.gz
  8. [root@jenkins local]# tar -xvzf apache-tomcat-8.5.70.tar.gz
  9. [root@jenkins local]# tar -xvzf openjdk-11+28_linux-x64_bin.tar.gz
  10. [root@jenkins local]# mv jdk-11/ java
  11. [root@jenkins local]# mv apache-tomcat-8.5.70 tomcat
  12. [root@jenkins local]# rm -rf tomcat/webapps/*
  13. [root@jenkins local]# mv apache-maven-3.8.2 java/maven
  14. [root@jenkins ~]# cp jenkins.war /usr/local/tomcat/webapps/

2.配置环境变量
  1. [root@jenkins ~]# vim /etc/profile
  2. JAVA_HOME=/usr/local/java
  3. MAVEN_HOME=/usr/local/java/maven
  4. PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
  5. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME MAVEN_HOME
  6. [root@jenkins ~]# java -version
  7. openjdk version "11.0.12" 2021-07-20 LTS
  8. OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
  9. OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)
  10. [root@jenkins ~]# mvn -v
  11. Apache Maven 3.8.2 (ea98e05a04480131370aa0c110b8c54cf726c06f)
  12. Maven home: /usr/local/java/maven
  13. Java version: 11, vendor: Oracle Corporation, runtime: /usr/local/java
  14. Default locale: en_US, platform encoding: UTF-8
  15. OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
  16. [root@jenkins ~]# /usr/local/tomcat/bin/startup.sh

补充:如果启动访问报错

请更换jdk版本为1.8的,修改环境变量配置,重新启动即可;

3.访问登录

Jenkins CI/CD 应用 - 图16

Jenkins CI/CD 应用 - 图17

Jenkins CI/CD 应用 - 图18

4.插件安装
  1. 安装插件:
  2. 所需的插件:
  3. Maven插件 Maven Integration plugin
  4. 发布插件 Deploy to container Plugin
  5. 需要安装插件如下:
  6. =====================================================================================
  7. 安装插件
  8. Deploy to container ---支持自动化代码部署到tomcat容器
  9. GIT plugin 可能已经安装,可在已安装列表中查询出来
  10. Maven Integration jenkins利用Maven编译,打包所需插件
  11. Publish Over SSH 通过ssh连接
  12. ssh 插件
  13. 安装过程:
  14. 系统管理--->插件管理---->可选插件--->过滤Deploy to container---->勾选--->直接安装

Jenkins CI/CD 应用 - 图19

Jenkins CI/CD 应用 - 图20

Jenkins CI/CD 应用 - 图21

Jenkins CI/CD 应用 - 图22

Jenkins CI/CD 应用 - 图23

Jenkins CI/CD 应用 - 图24

5.配置国内源

因为Jenkins下载,默认是国外地址,如果插件下载失败,我们就替换为国内地址
官方下载插件慢 更新下载地址
Jenkins 安装时会默认从updates.jenkins-ci.org 拉取,我们需要换成国内源——清华大学开源软件镜像站。
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
cd {你的Jenkins工作目录}/updates 进入更新配置位置

  1. [root@jenkins-server1 updates]# pwd
  2. /root/.jenkins/updates #这是Jenkins默认的工作目录
  3. [root@localhost updates]# vim default.json #修改配置文件
  4. s/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /root/.jenkins/updates/default.json #官方源替换清华源
  5. s/http:\/\/www.google.com/https:\/\/www.baidu.com/g #google替换成百度
  6. 或者直接进行一下操作(一步到位,不需要多步操作)
  7. [root@localhost ~]# sed -i 's/https:\/\/updates.jenkins.io\/download/http:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /root/.jenkins/updates/default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' /root/.jenkins/updates/default.json

之后,在网站后面加上restart进行jenkins重启。
http://192.168.153.147:8080/jenkins/restart

5.邮箱配置(可选)

安装邮件插件,才能确保邮件发送成功。否则可能不会发送邮件

Jenkins CI/CD 应用 - 图25

Jenkins CI/CD 应用 - 图26

Jenkins CI/CD 应用 - 图27

Jenkins CI/CD 应用 - 图28

Jenkins CI/CD 应用 - 图29

Jenkins CI/CD 应用 - 图30

Jenkins CI/CD 应用 - 图31

Jenkins CI/CD 应用 - 图32

可看到邮箱确实接收到了邮件,则配置成功;

当然邮箱能接收到邮件的前提是,邮箱要开启smtp服务

Jenkins CI/CD 应用 - 图33

6.配置Jenkins私钥
  1. [root@jenkins ~]# ssh-keygen
  2. [root@jenkins ~]# cat /root/.ssh/id_rsa

Jenkins CI/CD 应用 - 图34

7.添加后端服务器
  1. 公钥发送到后端服务器,才能实现免密;
  2. [root@jenkins ~]# ssh-copy-id -i root@192.168.153.194

Jenkins CI/CD 应用 - 图35

8.配置JDK和Maven

虽然Jenkins服务器上,已经安装了JDK和maven工具,但是,还需要在Jenkins服务中,进行配置;

这样Jenkins才能自动化的使用两个工具;

Jenkins CI/CD 应用 - 图36

Jenkins CI/CD 应用 - 图37

Jenkins CI/CD 应用 - 图38

Jenkins CI/CD 应用 - 图39

Jenkins CI/CD 应用 - 图40

如果有多个jdk和maven需要配置的话,可以点击新增jdk或者新增maven;

9.构建发布任务

Jenkins CI/CD 应用 - 图41

Jenkins CI/CD 应用 - 图42

Jenkins CI/CD 应用 - 图43

https://github.com/bingyue/easy-springmvc-maven

这里是我再github上,找的一个测试的小项目。能进行编译打包

Jenkins CI/CD 应用 - 图44

Jenkins CI/CD 应用 - 图45

如果有多个后端服务器,可以点击 ADD server进行添加;

10.java服务器添加脚本
  1. [root@java-server ~]# mkdir -p /data/application
  2. 上传jdk
  3. [root@java-server ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
  4. [root@java-server ~]# cd /usr/local/
  5. [root@java-server local]# mv jdk1.8.0_191/ java
  6. 下载tomcat
  7. [root@java-server ~]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.42/bin/apache-tomcat-8.5.42.tar.gz
  8. [root@java-server ~]# tar xzf apache-tomcat-8.5.42.tar.gz -C /data/application/
  9. [root@java-server ~]# cd /data/application/
  10. [root@java-server application]# mv apache-tomcat-8.5.42/ tomcat
  11. 设置环境变量
  12. [root@java-server ~]# vim /etc/profile
  13. export JAVA_HOME=/usr/local/java
  14. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
  15. export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
  16. export TOMCAT_HOME=/data/application/tomcat
  17. [root@java-server ~]# source /etc/profile
  18. 测试:
  19. [root@java-server ~]# java -version
  20. 删除tomcat默认发布目录下面的内容:
  21. [root@java-server ~]# rm -rf /data/application/tomcat/webapps/*
  22. [root@java-server ~]# cd /data/application/tomcat/webapps/
  23. [root@java-server webapps]# ls
  24. 创建目录和脚本:
  25. [root@java-server ~]# mkdir /opt/script #创建脚本目录
  26. [root@java-server ~]# vim app-jenkins.sh #创建脚本
  27. 脚本内容在后面:
  28. [root@java-server ~]# chmod +x app-jenkins.sh #添加执行权限
  29. [root@java-server ~]# mv app-jenkins.sh /opt/script/
  30. 脚本内容:
  31. [root@java-server script]# cat app-jenkins.sh
  32. #!/usr/bin/bash
  33. #本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。
  34. #================
  35. #Defining variables
  36. export JAVA_HOME=/usr/local/java
  37. webapp_path="/data/application/tomcat/webapps"
  38. tomcat_run="/data/application/tomcat/bin"
  39. updata_path="/data/update/`date +%F-%T`"
  40. backup_path="/data/backup/`date +%F-%T`"
  41. tomcat_pid=`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`
  42. files_dir="easy-springmvc-maven"
  43. files="easy-springmvc-maven.war"
  44. job_path="/root/upload"
  45. #Preparation environment
  46. echo "Creating related directory"
  47. mkdir -p $updata_path
  48. mkdir -p $backup_path
  49. echo "Move the uploaded war package to the update directory"
  50. mv $job_path/$files $updata_path
  51. echo "========================================================="
  52. cd /opt
  53. echo "Backing up java project"
  54. if [ -f $webapp_path/$files ];then
  55. tar czf $backup_path/`date +%F-%H`.tar.gz $webapp_path
  56. if [ $? -ne 0 ];then
  57. echo "打包失败,自动退出"
  58. exit 1
  59. else
  60. echo "Checking if tomcat is started"
  61. if [ -n "$tomcat_pid" ];then
  62. kill -9 $tomcat_pid
  63. if [ $? -ne 0 ];then
  64. echo "tomcat关闭失败,将会自动退出"
  65. exit 2
  66. fi
  67. fi
  68. cd $webapp_path
  69. rm -rf $files && rm -rf $files_dir
  70. cp $updata_path/$files $webapp_path
  71. cd /opt
  72. $tomcat_run/startup.sh
  73. sleep 5
  74. echo "显示tomcat的pid"
  75. echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
  76. echo "tomcat startup"
  77. echo "请手动查看tomcat日志。脚本将会自动退出"
  78. fi
  79. else
  80. echo "Checking if tomcat is started"
  81. if [ -n "$tomcat_pid" ];then
  82. kill -9 $tomcat_pid
  83. if [ $? -ne 0 ];then
  84. echo "tomcat关闭失败,将会自动退出"
  85. exit 2
  86. fi
  87. fi
  88. cp $updata_path/$files $webapp_path
  89. $tomcat_run/startup.sh
  90. sleep 5
  91. echo "显示tomcat的pid"
  92. echo "`ps -ef | grep tomcat | grep -v grep | awk '{print $2}'`"
  93. echo "tomcat startup"
  94. echo "请手动查看tomcat日志。脚本将会自动退出"
  95. fi

11.调用maven打包命令

Jenkins CI/CD 应用 - 图46

12.启用邮箱

Jenkins CI/CD 应用 - 图47

13.构建项目

Jenkins CI/CD 应用 - 图48

Jenkins CI/CD 应用 - 图49

三、Jenkins+Gitlab

Jenkins服务器去拉取代码。所以要下载git客户端

  1. [root@jenkins-server ~]# yum -y install git

Jenkins CI/CD 应用 - 图50

开始一个简单的项目

Jenkins CI/CD 应用 - 图51

Jenkins CI/CD 应用 - 图52

Jenkins CI/CD 应用 - 图53

Jenkins CI/CD 应用 - 图54

Jenkins CI/CD 应用 - 图55

Jenkins CI/CD 应用 - 图56

Jenkins CI/CD 应用 - 图57

Jenkins CI/CD 应用 - 图58

  1. [root@jenkins ~]# cat /root/.ssh/id_rsa //查看Jenkins服务器的私钥

Jenkins CI/CD 应用 - 图59

Jenkins CI/CD 应用 - 图60

Jenkins CI/CD 应用 - 图61

Jenkins CI/CD 应用 - 图62

Jenkins端配置好之后,还应在gitlab端配置Jenkins服务器的公钥

在jenkins服务器上查看公钥

Jenkins CI/CD 应用 - 图63

复制粘贴到gitlab

Jenkins CI/CD 应用 - 图64

然后去构建项目。自动拉取代码

Jenkins CI/CD 应用 - 图65

注意看拉取到了哪个目录下

Jenkins CI/CD 应用 - 图66

在Jenkins服务器上认证

在这个目录下能找到自己拉取git的项目;证明项目成功完成

  1. [root@jenkins ~]# ls /root/.jenkins/workspace/demo
  2. beifen.sh

四、Jenkins git参数化构建

git参数化构建:开发人员推送代码之前,对此版本的代码,打一个标签(tag)。我们可以认作为是此套代码的版本号。后续可以方便我们进行版本之间的切换。尤其是刚上线一套代码有问题,可以运用jenkins立即进行版本回退/切换;

Gitlab仓库代码准备:
image.png
首先,需要安装插件”Git Parameter”。如图

Jenkins CI/CD 应用 - 图68

手动测试:

  1. [root@gitlab ~]# git clone git@192.168.182.128:root/easy-springmvc-maven.git
  2. [root@gitlab ~]# cd easy-springmvc-maven
  3. [root@gitlab easy-springmvc-maven]# cd src/main/webapp/
  4. [root@gitlab easy-springmvc-maven]# cat src/main/webapp/index.jsp

Jenkins CI/CD 应用 - 图69

  1. [root@gitlab easy-springmvc-maven]# git add *
  2. [root@gitlab easy-springmvc-maven]# git commit -m "修改用户为密码"
  3. [root@gitlab easy-springmvc-maven]# git tag -a "v1.0" -m "修改用户为密码"
  4. [root@gitlab easy-springmvc-maven]# git tag #查看一下
  5. v1.0
  6. [root@gitlab easy-springmvc-maven]# git push origin v1.0
  7. [root@gitlab easy-springmvc-maven]#

image.png

配置Jenkins参数化构建

Jenkins CI/CD 应用 - 图71

点击”高级”

Jenkins CI/CD 应用 - 图72

Jenkins CI/CD 应用 - 图73

Jenkins CI/CD 应用 - 图74

五、Jenkins多节点配置

在企业里面使用Jenkins自动部署+测试平台时,每天更新发布几个网站版本,很频繁,但是对于一些大型的企业来讲,Jenkins就需要同时处理很多的任务,这时候就需要借助Jenkins多个node或者我们所说的Jenkins分布式SLAVE,今天我们带大家来学习Jenkins多实例的配置;

添加Linux平台Jenkins SLAVE配置:

  1. 由于Jenkins是Java程序,添加的SLAVE客户端服务器必须安装Java JDK环境;
  2. 创建远程执行Jenkins任务的用户,一般为Jenkins用户,工作目录为/home/Jenkins;
  3. Jenkins服务器免秘钥登录Slave服务器或者通过用户名和密码登录;

Jenkins-master Jenkins-slave1

1.添加从节点

Jenkins CI/CD 应用 - 图75

Jenkins CI/CD 应用 - 图76

Jenkins CI/CD 应用 - 图77

2.参数详解

  1. 名字:节点的名字
  2. 描述:说明这个节点的用途等
  3. of executors:并发构建数量
  4. 远程工作目录:用于存放jenkins的工作空间的
  5. 标签:分配job会以标签的名称去分配
  6. 用法:节点的使用策略
  7. 启动方法:windows的话就不要给自己添堵了,选择 Java web start

Jenkins CI/CD 应用 - 图78

Jenkins CI/CD 应用 - 图79

Jenkins CI/CD 应用 - 图80

3.指定java命令路径

Jenkins CI/CD 应用 - 图81

Jenkins CI/CD 应用 - 图82

4.测试从节点

项目指定到哪个节点运行。

Jenkins CI/CD 应用 - 图83

Jenkins CI/CD 应用 - 图84

Jenkins CI/CD 应用 - 图85