持续集成(Continuous Integration): 简单讲就是项目多模块之间功能频繁的提交测试,方便快速定位发现问题。可以包含 自动化构建Continuous Build、自动化测试Continuous Test、自动化集成Continuous Intergration等几个部分。 持续部署(Continuous Deployment): 见名知意,就是快速的部署到各种环境之中,主要是打包完成后怎么把程序在特定的环境给运行起来,(开发环境,测试环境,stage环境,预发布环境,生产环境等。) 持续交付(Continuous Delivery, CD): 一般来说,这个概念是指新的功能,一点一点的面向用户完成,交付给用户使用体验的过程。
本文测试环境的机器信息如下:
IP | 介绍 |
---|---|
192.168.171.128 | svn |
192.168.171.129 | jenkins |
192.168.171.132 | 程序部署运行主机 |
本文只是演示大体流程,在真正的企业使用过程中需要不断优化,标准、流程、自动、平台等都进行相关整合配置。
在129机器安装jenkins,(过程可以参考https://www.linuxsre.cn/wiki/Kubernetes/24)
#安装jdk8 过程省略
#jenkins安装
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.204.4-1.1.noarch.rpm
[root@localhost ~]# rpm -ivh jenkins-2.204.4-1.1.noarch.rpm
[root@localhost ~]# vim /etc/sysconfig/jenkins
JENKINS_PORT="5500" #<<-要修改的内容
[root@localhost ~]# vim /etc/init.d/jenkins
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
/usr/java/jdk1.8.0_231/bin/java #<<-要修改的内容
"
###启动jenkins
systemctl daemon-reload
systemctl start jenkins.service
systemctl status jenkins.service
/sbin/chkconfig jenkins on
#访问网站http://192.168.171.129:5500/ ,输入下面的密码
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
90ea2f5d72214021951e905190617259
#后面安装推荐插件即可。
svn安装(128机器),参考文档https://www.linuxsre.cn/wiki/linux/92 的前半部分,不需要配置https;这里svn的安装过程省略,svn的访问地址192.168.171.128:3690 账号密码 ops/123456
maven安装(129机器)
#下载地址http://maven.apache.org/download.cgi
[root@localhost ~]# unzip apache-maven-3.6.3-bin.zip
[root@localhost ~]# mv apache-maven-3.6.3 /usr/local/
#环境变量
[root@localhost ~]# vim /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$JAVA_HOME/bin:$PATH:$MAVEN_HOME/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# mvn --version
#仓库目录配置
[root@localhost ~]# mkdir -pv /usr/local/mvn_repo
[root@localhost ~]# chmod 777 -R /usr/local/mvn_repo
[root@localhost ~]# vim /usr/local/apache-maven-3.6.3/conf/settings.xml
<localRepository>/usr/local/mvn_repo</localRepository>
jenkins 先配置以下内容,如下表和下图所示。
配置模块 | 内容 |
---|---|
Configure Global Security -- Access Control | 开启Allow users to sign up |
Configure Global Security -- Access Control | 测试学习开启,生产关闭Anyone can do anything |
Global Tool Configuration --Maven Configuration Default settings provider | settings file in filesystem |
Global Tool Configuration --Maven Configuration filepath | /usr/local/apache-maven-3.6.3/conf/settings.xml |
Global Tool Configuration --Maven Configuration Default global settings provider | /usr/local/apache-maven-3.6.3/conf/settings.xml |
Global Tool Configuration -- JDK Name | jdk8 |
Global Tool Configuration -- JDK JAVA_HOME | /usr/java/jdk1.8.0_231/ |
Global Tool Configuration -- Maven installations Name | maven |
Global Tool Configuration -- Maven installations MAVEN_HOME | /usr/local/apache-maven-3.6.3 |
![]() |
插件安装 |
---|
Subversion |
Deploy to container |
Git |
Subversion Plug-in |
java的demo项目代码创建过程参考文档https://www.linuxsre.cn/wiki/linux/154 ;将代码保存到svn中,在vscode中安装TortoiseSVN 0.1.1插件
这里直接将目录整个import到svn中(windows机器上需要安装svn客户端),需要输入svn的账号密码,如下图所示:
在jenkins里面创建新项目,点击New item, Enter an item name名字叫demo;项目类型选择Freestyle project
开始构建,回到project里面选择刚才创建的project,点击Build now. (这里可能会出现谷种问题,我遇到了Could not find artifact ** and ‘parent.relativePath‘ points at no local POM @ line 5, column 10 报错,删除pom.xml里面的
重新提交svn,重新build后解决)
132机器,配置tomcat8
#jdk1.8安装过程省略
[root@localhost ~]# mkdir /export
[root@localhost ~]# mv apache-tomcat-8.5.63.zip /export/
[root@localhost ~]# cd /export/
[root@localhost export]# unzip apache-tomcat-8.5.63.zip
[root@localhost export]# vim apache-tomcat-8.5.63/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="manager-script"/>
<user username="admin" password="123456" roles="manager-gui, mananger-status,manager-script"/>
[root@localhost export]# vim apache-tomcat-8.5.63/webapps/manager/META-INF/context.xml #修改允许访问权限
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" />
#启动
[root@localhost export]# cd apache-tomcat-8.5.63/bin/
[root@localhost bin]# chmod +x ./*
[root@localhost bin]# ./startup.sh
#测试管理账号密码,访问http://192.168.171.132:8080/,点击manager webapp ,输入账号密码(username="admin" password="123456"),尝试登陆。
按下图配置,构建后的包位置与名字,url访问路径/demo/ ,要发布到哪个tomcat上
配置触发构建(通过远程url调用触发构建部署过程)
在jenkins的project demo中,配置Build Triggers, 设置Authentication Token 为一串随机数
这里jenkins触发url地址是: http://192.168.171.129:5500//job/demo/build?token=efwfwoi83fnmsl30 ;可以在浏览器中访问这个地址进行触发构建。
配置svn hooks,实现提交代码触发构建。
[root@localhost svn]# pwd
/data/svn
[root@localhost svn]# cd hooks/
[root@localhost hooks]# ll
total 36
-rw-r--r-- 1 root root 1977 Mar 4 08:40 post-commit.tmpl
-rw-r--r-- 1 root root 1638 Mar 4 08:40 post-lock.tmpl
-rw-r--r-- 1 root root 2289 Mar 4 08:40 post-revprop-change.tmpl
-rw-r--r-- 1 root root 1567 Mar 4 08:40 post-unlock.tmpl
-rw-r--r-- 1 root root 3426 Mar 4 08:40 pre-commit.tmpl
-rw-r--r-- 1 root root 2434 Mar 4 08:40 pre-lock.tmpl
-rw-r--r-- 1 root root 2786 Mar 4 08:40 pre-revprop-change.tmpl
-rw-r--r-- 1 root root 2122 Mar 4 08:40 pre-unlock.tmpl
-rw-r--r-- 1 root root 2780 Mar 4 08:40 start-commit.tmpl
[root@localhost hooks]# cp post-commit.tmpl post-commit
[root@localhost hooks]# vim post-commit
#!/bin/sh
curl http://192.168.171.129:5500/job/demo/build?token=efwfwoi83fnmsl30
[root@localhost hooks]# chmod +x post-commit
修改代码src\main\java\com\example\demo\controller\TestControllerRest.java (改一下 return "Hello world! @@@@";),commit提交后,查看构建过程,以及web站点内容是否改变。
总结: 使用简单,但是管理并不集中,缺乏标准化,流程,审批,等环节。版本回滚,多环境发布等。对项目信息的管理薄弱,总之还有很多需要改善的地方,个人认为在运维平台中封装jenkins效果会更好。