centos7.6+jenkins.war+subversion(svn)+eclipse实现持续部署
一、环境及工具准备
1.操作系统版本:cnetos7.6.1810
2.IDE工具:eclipse(版本: 2020-12 (4.18.0))
3.虚拟机工具:Vmware 15
4.远程连接和传输工具:Xshell 6、FlashFXP
5.jenkins.war包:2.273
下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.273/jenkins.war
二、环境搭建
1.准备3台centos
三台centos作用如下:
主机A:部署subversion服务
主机B:部署jenkins程序
主机C:部署应用
PS:3台主机要网络互通
2.关闭3台主机防火墙
systemctl start firewalld.service
可通过查看防火墙状态检验
firewall-cmd --state
3.主机A部署subversion服务器
3.1安装subversion
yum install -y subversion
3.2创建具体的版本库
svnadmin create /myutil/svn/repository/jenkins
- svnadmin:命令
- create:创建
- /myutil/svn/repository/demo:版本库位置
3.3进入版本库,设置权限
cd /myutil/svn/repository/jenkins/conf
修改配置文件
vim svnserve.conf
- 将第 19 行# auth-access = write 注释打开,设置匿名用户操作为none
- 将第 20 行# auth-access = write 注释打开:auth-access = write,表明该版本库不接受匿名访问
- 将第 27 行注释打开:password-db = passwd,表明使用同目录下的 passwd 文件保存用户信息
- 将第 34 行注释打开:authz-db = authz,表明使用同目录下的 authz 文件保存权限信息设置用户密码
添加用户
vim passwd
svnuser = 123456
PS:添加版本库帐号svnuser,密码为123456
设置用户权限
vim authz
[/]
svnuser = rw
* =
PS:表示在jenkins版本库的根目录下,svnuser用户允许读写,其他用户没有任何权限
3.4启动subversion(svn)服务
svnserve -d -r /myutil/svn/repository
- svnserve:svn服务命令
- -d:后台运行
- -r:指定服务根目录
- /myutil/svn/repository:svn服务根目录
3.5查看svnserve服务进程
netstat -lnpt|grep svnserve
4.主机B、主机C安装jdk、tomcat
参考网址:
(1)安装jdk:https://blog.csdn.net/weixin_43824267/article/details/110385122
(2)安装tomcat:https://blog.csdn.net/weixin_43824267/article/details/112170091
5.主机B安装maven
参考网址:https://blog.csdn.net/weixin_43824267/article/details/112168050
6.修改主机B的tomcat配置
6.1进入tomcat解压目录的server.xml
vim /myutil/tomcat/tomcat8080/conf/server.xml
6.2修改 URL 地址的编码解码字符集
URIEncoding="UTF-8"
7.主机C设置tomcat用户
因为自动化部署后,是由程序来访问tomcat,所以要设置个tomcat用户
7.1进入到主机C的tomcat的用户角色配置文件
vim /myutil/tomcat/tomcat8080/conf/tomcat-users.xml
7.2将以下内容追加到tomcat-users跟标签内
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcatuser" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status" />
PS:表示添加了tomcatuser用户,密码为123456,拥有的角色是manager-gui,manager-script,manager-jmx,manager-status
7.3修改IP限制
修改两处配置文件的IP限制,对IP放开
vim /myutil/tomcat/tomcat8080/webapps/host-manager/META-INF/context.xml
将第20行的allow=“127.\d+.\d+.\d+|::1|0:0:0:0:0:0:0:1"修改为allow=”^.*$"
vim /myutil/tomcat/tomcat8080/webapps/manager/META-INF/context.xml
同理,将第20行的allow=“127.\d+.\d+.\d+|::1|0:0:0:0:0:0:0:1"修改为allow=”^.*$"
7.4启动tomcat,测试用户
/myutil/tomcat/tomcat8080/bin/startup.sh
稍等一会,tomcat启动后,在浏览器地址栏输入:
http://192.168.1.115:8080/
PS:192.168.1.115是主机C的IP,8080是tomcat服务器端口。要注意关闭好主机C的tomcat
点击测试刚才创建的用户密码
看到下面页面,说明设置成功
8.eclipse创建项目
打开IDE工具eclipse,创建好准备持续部署的样例项目demo
参考网址:https://blog.csdn.net/weixin_43824267/article/details/112172100
8.1创建Apple.java(注意包名)
package com.atguigu.ci.entities;
public class Apple {
private String appName = "Good Apple";
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
}
8.2添加pom依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
8.3添加首页index.jsp
<%@page import="com.atguigu.ci.entities.Apple" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是小赖同志
<%= new Apple().getAppName() %>
</body>
</html>
9.分享demo项目到svn仓库
在eclipse,右击项目–》Team–》Share Project
- svn://:固定格式
- 192.168.1.108:搭建subversion服务的主机A的IP地址
- jenkins:主机A创建的版本库
输入主机A设置的svn版本库的账户和密码
10.将demo项目提交到svn仓库
自行百度参考svn相关教程,过程略
11.主机B上部署jenkins程序
11.1将jenkins.war包放到主机B的tomcat的webapp下
11.2启动tomcat
/myutil/tomcat/tomcat8080/bin/startup.sh
11.3访问jenkins服务
在浏览器地址栏输入:
http://192.168.1.111:8080/jenkins
PS:192.168.1.111是主机B的IP地址
11.4进入jenkins
查看密码
cat /root/.jenkins/secrets/initialAdminPassword
- 进入到自定义jenkins页面。这里选择安装插件的话会联网下载一些插件,小编这里选择“安装推荐的插件”
- 第一次安装可能因为网络问题安装失败,重试几次一般就能下载好
- 也可以去jenkins官网里下载插件,然后在jenkins插件管理页面上传插件
- 上传插件也会检查依赖插件去下载一堆插件,不代表下载好的插件,上传就不需要网络
- 总结:jenkins装插件对网路要求很高
下载安装插件中…
安装失败可能是网络问题,可以多重试几次。
PS:小编发现个别插件多次重试仍无法下载,就不管了
开始使用jenkins
12.初始化jenkins
12.1修改admin密码
12.2修改插件升级站点(有无均可,可自选)
将升级站点修改成
http://mirror.esuni.jp/jenkins/updates/update-center.json
多提供几个升级站点(自己尝试):
jenkins插件升级站点
https://updates.jenkins.io/update-center.json(默认)
http://updates.jenkins.io/update-center.json(去掉s)
http://mirror.esuni.jp/jenkins/updates/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
https://mirror.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.xmission.com/jenkins/updates/current/update-center.json
https://mirror.xmission.com/jenkins/updates/update-center.json
12.3下载jenkins插件
去jenkins官网下载两个jenkins插件
subversion、deploy to container
PS:如果之前已经选择“安装推荐的插件”,可能已经安装好了,就不用重新下载上传
官网下载地址:https://plugins.jenkins.io/
同理,下载deploy to container
12.4上传插件方法
PS:安装插件可能因为网络原因出现连接超时,安装过程比较缓慢,耐心等待。安装失败就多上传几次
13修改jenkins配置
13.1修改安全设置
13.2全局工具安装
PS:根据先前安装的jdk、maven来配置
maven配置文件设置
/myutil/maven/maven-3.6.1/conf/settings.xml
JDK配置
/myutil/jdk/jdk1.8.0_271/
删除多余工具
maven配置
/myutil/maven/maven-3.6.1/
14.启动主机C的tomcat
/myutil/tomcat/tomcat8080/bin/startup.sh
15.创建jenkins工程
15.1选择“新建Item”
15.2创建一个空项目
15.3配置源码管理
- svn://192.168.1.112/jenkins/demo
- svn://:固定协议格式
- 192.168.1.112:SVN服务器IP,这里即是主机A的IP
- jenkins:SVN服务器根目录下的一个具体的版本库
- demo:版本库里面的一个maven工程,这里要注意,指定的demo根下有pom.xml文件才行
添加svn用户
15.4配置构建触发器
15.5配置构建
15.6配置构建后操作
PS:这一步要安装好之前说的deploy插件,因为构建后要自动部署,所以这里选择了发布war包到一个容器上(这里用的是tomcat容器)
一切配置填好,点击保存即可
16.配置远程触发构建
原理:
- 实现自动化部署,首先eclipse实现提交操作之后,svn版本库收到提交请求
- 要在svn服务器上配置“提交”操作的钩子程序(一旦发现提交操作就触发的shell程序脚本)
- 钩子程序(即shell程序)执行命令,来通知jenkins去执行构建操作
大致原理图:
所以,在此,还需要配置钩子程序(提交操作触发的shell脚本)
16.1进入到主机A(SVN服务器)的jenkins版本库的hooks文件夹
PS:这个文件夹下放着一堆钩子程序的样例脚本,但默认不生效,钩子程序脚本有规定文件名且没有后缀名
cd /myutil/svn/repository/jenkins/hooks/
16.2编写钩子程序
vim post-commit
将以下命令复制到里面,保存退出
#!/bin/sh
curl -X post -v -u admin:123456 http://192.168.1.107:8080/jenkins/job/demo/build?token=LGQ_TOKEN
- curl:Linux用来发送http请求的命令
- -X:指定请求方式
- post:post请求方式
- -u:携带用户名/密码
- admin:123456 :jenkins的用户密码(登录jenkins用的那个)
- http://192.168.1.107:8080/jenkins:jenkins的网页访问路径(在主机B的tomcat上跑着)
- job:固定写法
- demo:jenkins工程名
- build:固定写法
- token=LGQ_TOKEN:之前配置的构建触发器自定义的身份令牌
16.3修改钩子程序权限
chmod 755 post-commit #赋予可执行权限
17.在eclipse测试提交
来到celipse,测试提交代码,在网页即可查看到最新提交内容(自己测,过程略)
注意:
- 个别时候会发现提交后虽然可以自动部署,但部署上去的版本比自己eclipse的当前版本落后一个版本。
- 这时解决的方法是:把15.3步骤的svn版本库地址改为svn://192.168.1.112/jenkins/demo@HEAD
- 在末尾追加@HEAD强制指定部署最新版本