详解 Jenkins 自动化部署平台

原文来源:Jenkins自动化部署

Jenkins介绍

Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。

Jenkins能实时监控持续集成过程中所存在的问题,提高详细的日志文件和提醒功能,用图表的形式,形象地展示项目构建的趋势和稳定性。

CI/CD:持续集成,持续交付/持续部署

持续集成

CI(Continuous Integration):软件工程流程,可以帮助开发人员更加频繁地将代码更改合并到共享分支或“主干”中。一旦开发人员对应用所做的更改被合并,系统就会通过自动构建应用并运行不同级别的自动化测试(通常是单元测试和集成测试)来验证这些更改,确保这些更改没有对应用造成破坏。这意味着测试内容涵盖了从类和函数到构成整个应用的不同模块。如果自动化测试发现新代码和现有代码之间存在冲突,CI 可以更加轻松地快速修复这些错误。

就是说只要开发人员提交新的代码,Jenkins就会立刻将新代码与旧代码进行合并构建测试。确定新代码与原代码是否可以集成在一起。
在这里插入图片描述
持续交付

CD(Continuous delivery):软件工程手法,在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
在这里插入图片描述
持续部署

CD(Continuous Deployment):是持续交付的下一步,如果代码通过评审以后自动部署到生产环节中。在持续交付的基础上,自动部署到生产环境中。处于业务考虑,也可以选择不部署。要想持续部署,必须先实施持续交付。
在这里插入图片描述

Maven介绍

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。(用于在java项目中构建war包)

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于Maven的面向项目的方法,许多Apache Jakarta项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。

Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs。

安装Jenkins

Jenkins的rpm包下载

https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.183-1.1.noarch.rpm
[root@Jenkins ~]# rpm -ivh jenkins-2.183-1.1.noarch.rpm
[root@Jenkins ~]# /etc/init.d/jenkins start
[root@Jenkins ~]# netstat -anpt | grep java
tcp6 0 0 :::8080 :::* LISTEN 1635/java
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
71f1cd3fbe504d10b61504cab1cc8288

配置Jenkins

浏览器访问:http://192.168.225.112:8080
在这里插入图片描述
安装推荐的插件

也有可能出现部分插件没有安装成功,重试安装即可。
在这里插入图片描述
在这里插入图片描述
创建管理员用户
在这里插入图片描述
在这里插入图片描述
安装Jenkins必要插件

访问:http://192.168.225.112:8080
在这里插入图片描述
安装Publish Over SSH、Maven Integration插件,直接安装。
在这里插入图片描述
在这里插入图片描述
插件管理安装Maven Integration插件。
在这里插入图片描述
在这里插入图片描述
配置Jenkins并发执行数量

用于提高执行效率
Manage Jenkins >> Configure System>> Maven 项目配置
在这里插入图片描述
在这里插入图片描述

部署Tomcat

实验环境

192.168.225.111     git服务器
192.168.225.112     jenkins服务器
192.168.225.113     web(tomcat)服务器

1.配置git主机

安装git配置git用户

[root@git ~]# yum -y install git
[root@git ~]# useradd git
[root@git ~]# echo "123456" | passwd --stdin git`在这里插入代码片`

创建本地仓库probe

[root@git ~]# su - git
[git@git ~]$ mkdir probe.git
[git@git ~]$ cd probe.git/
[git@git probe.git]$ git --bare init

初始化空的 Git 版本库于 /home/git/probe.git/

[git@git probe.git]$ exit

克隆项目代码同步到自己创建的仓库中

[root@git ~]# git clone https://github.com/psi-probe/psi-probe
[root@git ~]# git clone git@192.168.225.111:/home/git/probe.git
正克隆到 'probe'...
git@192.168.225.111's password:
warning: 您似乎克隆了一个空版本库。
[root@git ~]# cp -rf psi-probe/* probe/
[root@git ~]# cd probe/
[root@git probe]# git add .
[root@git probe]# git config --global user.name “kun”
[root@git probe]# git config --global user.email kun@163.com
[root@git probe]# git commit -m "all probe"
…
create mode 100644 web/src/site/site.xml
create mode 100644 web/src/test/resources/logback-test.xml
[root@git probe]# git push origin master
git@192.168.225.111's password:
Counting objects: 1164, done.
Compressing objects: 100% (1118/1118), done.
Writing objects: 100% (1164/1164), 2.01 MiB | 0 bytes/s, done.
Total 1164 (delta 398), reused 0 (delta 0)
To git@192.168.225.111:/home/git/probe.git
* [new branch] master -> master

2.配置Jenkins主机

1)添加验证凭据
在Jenkins首页中点击“凭据”—系统—添加域
在这里插入图片描述
添加凭据
在这里插入图片描述
添加后的web主机
在这里插入图片描述
2)添加Publish Over SSH远程主机
在web主机创建远程目录

[root@web ~]# mkdir /data

Manage Jenkins >> Configure System >>往下翻最底部找到Publish over SSH —>> SSH Servers–“新增”选项
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3)配置Maven、JDK、Git环境

[root@jenkins ~]# which java
/usr/bin/java
[root@jenkins ~]# rm -rf /usr/bin/java
[root@jenkins ~]# tar xf jdk-8u191-linux-x64.tar.gz
[root@jenkins ~]# mv jdk1.8.0_191/ /usr/bin/java
[root@jenkins ~]# vim /etc/profile
export JAVA_HOME=/usr/bin/java/
export PATH=$PATH:$JAVA_HOME/bin/
[root@jenkins ~]# source /etc/profile
[root@jenkins ~]# javac -version
javac 1.8.0_191

在这里插入图片描述
Jdk的实际安装路径
在这里插入图片描述
设置maven

[root@jenkin ~]# tar xf apache-maven-3.6.1-bin.tar.gz
[root@Jenkins ~]# mv apache-maven-3.6.1 /usr/local/maven-3.6.1

在这里插入图片描述
配置Git

[root@Jenkins ~]# which git
/usr/bin/git

在这里插入图片描述
基本配置完成保存

  1. 配置web主机
[root@web ~]# tar xf apache-tomcat-8.5.16.tar.gz
[root@web ~]# tar xf jdk-8u191-linux-x64.tar.gz
[root@web ~]# mv jdk1.8.0_191/ /usr/local/java
[root@web ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat
[root@web ~]# vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@web ~]# source /etc/profile
[root@web ~]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

web主机生成密钥
发布公钥给Jenkins主机,后边项目构建后需要scp文件到本地

[root@web ~]# ssh-keygen
[root@web ~]# ssh-copy-id 192.168.225.112
  1. 新建Maven项目
    1)新建ltem
    在这里插入图片描述
    2)选择源码管理—选择git
    添加为:git@192.168.225.111:/home/git/probe.git
    在这里插入图片描述
    图中的警告因为没有生成密钥对给git,Jenkins默认用Jenkins用户去git拉下来代码,需要连接git用户主机

Jenkins用户生成密钥对

[root@Jenkins ~]# id jenkins
uid=988(jenkins) gid=982(jenkins)=982(jenkins)
[root@jenkins ~]# grep jenkins /etc/passwd
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/false

因为jenkin用户的shell是/bin/false,su不过去,所以使用-s指定shell切换到Jenkins用户

[root@Jenkins ~]# su -s /bin/bash jenkins
bash-4.2$ ssh-keygen
bash-4.2$ ssh-copy-id git@192.168.225.111

尝试连接git,验证密钥对是否成功

bash-4.2$ ssh git@192.168.225.111
[git@git ~]$ exit

3)选择build
在这里插入图片描述
4)构建后操作
在这里插入图片描述
在这里插入图片描述
当Jenkins利用maven打包成war包,web主机去Jenkins主机上下载war包到本地

Build构建
在这里插入图片描述
查看控制台输出
在这里插入图片描述
5.验证自动打包部署结果
注意:
有些项目的war包不能删除,删除war包,项目也就没有了

[root@web ~]# ls /usr/local/tomcat/webapps/
docs examples host-manager manager probe probe.war ROOT
[root@web ~]# ls /usr/local/tomcat/webapps/probe
css flags index.jsp js META-INF WEB-INF
[root@web ~]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 63947/java

访问tomcat
在这里插入图片描述
访问项目
在这里插入图片描述
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐