@xushengkai
2023-02-10T00:26:34.000000Z
字数 11849
阅读 445
自动化
[TOC]
持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作。
持续集成的目的,是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。
持续交付指的是频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
开发(git) -->git主库-->jenkins(git+jdk+tomcat+maven打包+测试)-->发布到tomcat服务器
Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中。
是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。
是监控软件开发流程
快速显示问题
提高开发效率
过程控制
- 易于安装: 不需要安装、不需要数据库,只需通过java -jar jenkins.war或部署到一个servlet容器中
- 易于配置:所有的配置都可能通过jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置
- 测试报告:生成JUnit或TestNG的测试报告.集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
- 文件识别: jenkins能跟踪每次构建生成哪些jar包以及使用哪个版本的jar包
- 分布式构建: 支持Jenkins能够让多台计算机一起构建/测试。
- 插件支持: jenkins可以通过第三方插件扩展,也可以根据团队需要开发插件
- 任务(Job)和构建(build):任务:(Job)是Jenkins的一个执行计划,是一系列操作的集合。构建:是Jenkins的任务的一次运行。

- 开发者检入代码到源代码仓库。
- CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
- CI系统会在对应的工作区内执行构建过程。
- (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
- (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
- CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。
Jenkins就是这么一个CI系统。之前叫做Hudson。
环境:一台4G内存的全新cent os 7虚拟机
[root@192 ~]# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2.git官网下载最新版本git
[root@192 ~]# wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz[root@192 ~]# lsanaconda-ks.cfg git-2.9.5.tar.gz
3.安装git
#解压安装包[root@192 ~]# tar xf git-2.9.5.tar.gz[root@192 ~]# cd git-2.9.5/#编译源码包[root@192 git-2.9.5]# make prefix=/usr/local/git all#源码安装[root@192 git-2.9.5]# make prefix=/usr/local/git install
修改环境变量
[root@192 git-2.9.5]# cd[root@192 ~]# vim /etc/bashrc#在最后一行添加环境变量PATH=$PATH:$HOME/bin:/usr/local/git/bin#立即生效[root@192 ~]# source /etc/bashrc#测试是否安装成功[root@192 ~]# git --versiongit version 1.8.3.1
关于bashrc和profile
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次!!!登录!!!时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
1.下载软件包
我提前下载好了,拷贝到我虚拟机上
注意:不能用jdk9和jdk10,和这个版本不兼容
[root@192 ~]# rz[root@192 ~]# lsgit-2.9.5.tar.gz jdk-8u151-linux-x64.tar.gz
2.解压安装
[root@192 ~]# tar xf jdk-8u151-linux-x64.tar.gz -C /usr/local/[root@192 ~]# cd /usr/local/[root@192 local]# lsbin games include lib libexec shareetc git jdk1.8.0_151 lib64 sbin src[root@192 local]# mv jdk1.8.0_151/ jdk
3.修改环境变量
[root@192 ~]# vim /etc/bashrc#在最后一行添加环境变量JAVA_HOME=/usr/local/jdkexport PATH=$PATH:$JAVA_HOME/bin#刷新立即生效[root@192 ~]# source /etc/bashrc
4.测试jdk
[root@192 ~]# java -versionjava version "1.8.0_151"Java(TM) SE Runtime Environment (build 1.8.0_151-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
提示:如果系统中已安装java-1.8.0-openjdk。java-1.8.0-openjdk 。java-1.8.0-openjdk请卸载他们。
1.下载和解压maven
官网地址:https://maven.apache.org/download.cgi#files
我提前下载好了,拷贝到我的虚拟机上
[root@192 ~]# lsapache-maven-3.5.3-bin.tar.gz#解压[root@192 ~]# tar xvzf apache-maven-3.5.3-bin.tar.gz -C /usr/local/[root@192 ~]# mv /usr/local/apache-maven-3.5.3/ /usr/local/maven
2.修改环境变量
[root@192 ~]# vim /etc/bashrc#在最后一行添加环境变量export M2_HOME=/usr/local/mavenexport M2=$M2_HOME/binPATH=$M2:$PATH:$HOME/bin:/usr/local/git/binexport JAVA_HOME=/usr/local/jdkexport PATH#刷新立即生效[root@192 ~]# source /etc/bashrc
3.测试maven
[root@192 ~]# mvn -versionApache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)Maven home: /usr/local/mavenJava version: 1.8.0_151, vendor: Oracle CorporationJava home: /usr/local/jdk/jreDefault locale: zh_CN, platform encoding: UTF-8OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
提前在官网下载的包,直接拷贝到虚拟机
1.解压安装
[root@192 ~]# lsapache-tomcat-9.0.1.tar.gz git-2.9.5[root@192 ~]# tar xvzf apache-tomcat-9.0.1.tar.gz -C /usr/local/[root@192 ~]# mv /usr/local/apache-tomcat-9.0.1/ /usr/local/tomcat
2.定义Tomcat所需环境变量
[root@192 ~]# vim /etc/profile#在最后一行添加环境变量CATALINA_HOME=/usr/local/tomcatexport CATALINA_HOME#刷新立即生效[root@192 ~]# source /etc/profile
3.启动tomcat
[root@192 ~]# /usr/local/tomcat/bin/startup.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarTomcat started.
4.测试tomcat
打开主机浏览器输入服务器加端口
192.168.200.152:8080
5.关闭tomcat
[root@192 ~]# /usr/local/tomcat/bin/shutdown.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

1.官网下载jenkins
官方网站: http://updates.jenkins-ci.org/download/war
请下载对应版本jenkins拷贝至虚拟机
[root@192 ~]# rz[root@192 ~]# lsjenkins.war
2.部署jenkins.war到tomcat下
[root@192 ~]# cp jenkins.war /usr/local/tomcat/webapps/
jenkins密码忘了,可以重置它,通过一下命令
关闭tomcat : /usr/local/tomcat/bin/shutdown.shrm -rf /usr/local/tomcat/webapp/jenkins*rm -rf ~/.jenkins*cp jenkins.war /usr/local/tomcat/webapps/启动tomcat即可访问jenkins
3.启动tomcat
[root@192 ~]# /usr/local/tomcat/bin/startup.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarTomcat started.
:注意:启动tomcat会自动解压webapps下的war包
1.添入以下文件密码到上图页面中
[root@192 ~]# cat .jenkins/secrets/initialAdminPassword295463bcd9f541bd86bb6d9cba798391#注意:每个人的都不一样
将本地密码复制并粘贴到下面,点击继续

选择推荐的插件安装
![]()
2.等待安装完成
![]()
因为网速原因,插件可能下载失败,没关系,把他们记录下来,点击继续,进去之后手动重新安装未安装好的插件
也可以重试,继续下载安装
3.创建用户
4.jenkins的分享地址
5.前台安装完成
如果这个页面过一会消失了。并且常时间空白。可能需要你登录了。换个浏览器,打开相同的地址就会出现认证页面。
![]()
6.欢迎界面
我们配置的是 git + maven 方式的 自动化部署 所以git和maven的相关插件是必须的 还有一个ssh用于机器间的文件传送
安装的过程请耐心等待
作用:
支持自动化将代码部署到tomcat容器安装过程:
系统管理-->插件管理-->可选插件-->过滤Deploy to container-->勾选,点击下边的按钮:直接安装,这个可能时间较久,等待即可。
管理插件

搜索插件,安装

安装完以后,可以返回首页继续安装,也可以重启
作用:
jenkins 利用maven编译,打包,所需插件安装图示和上面一样

安装GitHub Authentication

安装GitHub Branch Source,在可选插件中没用,在已安装中搜索,显示已安装

安装GitHub Organization Folder


所有的插件已经安装完成,重启Jenkins

重启就绪时,浏览器会自动刷新页面
注意:没有说的配置,请选择默认,不要乱选
系统管理->(全局工具配置)Global Tool Configuration,配置jdk,git,maven的根目录




安装插件locale
![]()
安装完重启

重启完成后设置语言

添加zh_CN保存
http://192.168.200.153:8080/jenkins/restart
http://192.168.200.153:8080/jenkins/reload
http://192.168.200.153:8080/jenkins/exit
目的:192.168.200.153 jinkens服务器上的maven将开发产生的*.war包。
通过SSH自动推送到远程tomcat 服务器上(192.168.0.109)。
需要手工配置ssh key。配合自动化推送192.168.200.153 Jenkins服务器
192.168.200.147 tomcat业务服务器
#生成密钥[root@192 ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:BnilZ4TxayzogbxcD3GzTpR9SNyfjwmC4debjKyZCPg root@192.168.200.153The key's randomart image is:+---[RSA 2048]----+| .++. || .oO... || o.Oo*... . || . . *oBooo o || .o = +oS+ + + ||...+ * +o + o . || .o...o+ || E . + || |+----[SHA256]-----+#发送密钥[root@192 ~]# ssh-copy-id 192.168.200.147/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"The authenticity of host '192.168.200.147 (192.168.200.147)' can't be established.ECDSA key fingerprint is SHA256:W6Jwu++IwI0SqmWqjhGpDIetIJu3S6VnKoRBXNqS0Fk.ECDSA key fingerprint is MD5:18:bc:5c:7c:8d:20:e6:c2:f2:fa:dd:7d:b6:58:00:bf.Are you sure you want to continue connecting (yes/no)? yes/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keysroot@192.168.200.147's password:Number of key(s) added: 1Now try logging into the machine, with: "ssh '192.168.200.147'"and check to make sure that only the key(s) you wanted were added.#测试免密登录[root@192 ~]# ssh 192.168.200.147Last login: Thu Dec 22 11:48:16 2022 from 192.168.200.1[root@192 ~]# ip a | grep inet | awk 'NR==3'inet 192.168.200.147/24 brd 192.168.200.255 scope global noprefixroute dynamic ens32[root@192 ~]# exit登出Connection to 192.168.200.147 closed.
复制cat出来的所有内容,粘贴到下一步页面上的key中。
[root@192 ~]# cat .ssh/id_rsa-----BEGIN RSA PRIVATE KEY-----MIIEpAIBAAKCAQEAzQftm+D6kUV/rQMnQpSxrnNfhIk5iR7caa9C5afl9EWfYghz3wd76d4pbiyUFagbBTYthwrJwZQN1xSDIqrTrKE2iwMDXmAJsiQM6UsO0Ng6EoUMMTDbwvb1QSXXNdBGdnb7cex7Dagb3pwYzYODDBooZMDLxIcqiIpHpIBmKnS1HcPD8aLeXYbWc8iUGTZXjoWsQMzlUsM7fgkzVDdjwaUvFgK6qpmRCAQfqtQKljipo3cyF391nqQkD2c+eHC3/5JSF6V0PMcMiKXivuV7aFGvPhcXQt65/ex6bRDseE/ob3qpV07HQ0ueG2eqQeE5GG3/QwU3aFBIcfgAJV6HzQIDAQABAoIBAQDE0mSN7EZ9qIrtSoaoytdbEZRTRew+rqqGpeGBV1FP0nozgMvDAYs5sbRx+EdcFtmBgkXoSjnuI7O5kg5k/DphkQ0sG4NjWKxWH3dpiU06vSfaWXCf1DhTDAHaPXpARaUu2f99mLd0H7pJU+4Xc7UcrAu01MOH8P2qv5wQ1dW90D1rbybDusEbiCd7hlz664nNAzXsHcM0tNCAB5QT0BC7n2TKVi6BMY3p/N7IlE7x+CuDpJoyiCGwL1KaslbleCQmDH4tvK0uLTeYFPNQrywNeLzmdfid5W2qthrkUGPFgmGHrSHsIhPfDpaBJKEBal7xq9dmLUM9PgrYx6UWqRl9AoGBAOx9fkDxnJNKS1NiP3F4JyXNRPrSW9ke7leXxeuhAMvd7XJAawAFqfMNpmtAo4RWxEFlPlJ2oNyMNSXJ5Q4FZH5cVTYlx7XFMnD2EjjMyP+7Xbp4JLy0YQAQE5s4jRcUS5+yR8631TCftP7YPmPddDqyxfyVD3CSFMbnYc+jVBTbAoGBAN3yCbo/NSdgKoTyFxirviOH9rFHjvZj3xc1ID2TEyhDSuEL5SUCYxDD8lWDXmv+KlTE4HCxETuqDXxp9LAEToZU3GbYD3spGRIG+cCOIqHycSg45kz7iwnCqqszP5Lo8y1sQdvC30V8+YYOKAywI1+40EMHRCd7/I53L+3e92J3AoGAS0UJ+SutdSfRX8HGhZwDgcGaseZgO3Pf0ltJMFz3Puvs1k9wfvpOhECU9lAFe2qOXm4V7vM48dliVRu0XskSmjFTIb/Wl6EjE9cOJ6vuUY7WHzJ8Jt+WfAmh4+aU6YKZK0P4HPBf13ENj4tOGET06HXcFC9xUZf9Ku2cMRU//r8CgYB5KUWYMCNTUJNFqmdjZ3ZQLUxF8TuhVFoYcD8efijKJRo+iuDX+Fqeb2netu2X5NO1HRktS+yNdsMP9UPHx0Ia4T7EwhSJdqEiDz7OmIldgV22yIEo63U2qdfDyCFfkN4YIO4/Cz4Z0CTjwtyoOIvHGLxQqynQqEXyfCxlHgBM9wKBgQDotVo+waStkjId0v3niKarwqxT5yg1s5Y2VPnLBzRIZAff0dyVUhUm4w9sDTZXa1Rh/cF1v6yS0pWqsDG2OBnJMJPEmNRzFNxMwI51phOse1JAMHmdDEZDxwMKKYibPKwcYgri5VRFv5xXUlW8i/Y+AFEkX1440FTHzd7Ht9TBgw==-----END RSA PRIVATE KEY-----



1.设置描述
2.选择版本控制器和仓库地址
3.设置触发器(保持默认)
4.设置构建(编译打包)
手动添加Goals and options:
clean package -Dmaven.test.skip=true
5.构建后操作
在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工件

- name:ssh server 因为之前的配置会默认出现tomcat业务服务器的名字
- source file:
target/*.war构建之后,在jenkins服务器上是可以自动看到war包的。(该路径不需要创建)ls /root/.jenkins/jobs/testjob1/builds/target/*.warRemove prefix:自动删除路径前缀(不需要创建路径前缀)
Remote directory:tomcat业务服务器上的路径,需要提前在192.168.200.154(tomcat)上创建该目录。用来存放网站源代码。(需要后台创建)
`[root@192 ~]# mkdir -p /jenkins/war- Exec command : tomcat(192.168.200.154)在接收到源码之后的自定义动作。
比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建)
#后台创建[root@192 ~]# mkdir /jenkins/sh[root@192 ~]# vim /jenkins/sh/deploy.sh#写上以下内容进行测试touch 1.txttouch 2.jpg[root@192 ~]# chmod +x /jenkins/sh/deploy.sh
点击保存,完成

如果构建失败,进入配置查看所有的配置是否正确

这里可以看到所有的操作,报错可以在这里查看

看到结果显示成功

代码和脚本
#脚本的执行结果[root@192 ~]# ls1.txt 2.jpg#查看代码[root@192 ~]# ls /jenkins/war/easy-springmvc-maven.war #推送过来的网站源码