centos7.6+jenkins.war+subversion(svn)+eclipse实现持续部署

  • 一、环境及工具准备
  • 二、环境搭建
  • 1.准备3台centos
  • 2.关闭3台主机防火墙
  • 3.主机A部署subversion服务器
  • 3.1安装subversion
  • 3.2创建具体的版本库
  • 3.3进入版本库,设置权限
  • 3.4启动subversion(svn)服务
  • 3.5查看svnserve服务进程
  • 4.主机B、主机C安装jdk、tomcat
  • 5.主机B安装maven
  • 6.修改主机B的tomcat配置
  • 6.1进入tomcat解压目录的server.xml
  • 6.2修改 URL 地址的编码解码字符集
  • 7.主机C设置tomcat用户
  • 7.1进入到主机C的tomcat的用户角色配置文件
  • 7.2将以下内容追加到tomcat-users跟标签内
  • 7.3修改IP限制
  • 7.4启动tomcat,测试用户
  • 8.eclipse创建项目
  • 8.1创建Apple.java(注意包名)
  • 8.2添加pom依赖
  • 8.3添加首页index.jsp
  • 9.分享demo项目到svn仓库
  • 10.将demo项目提交到svn仓库
  • 11.主机B上部署jenkins程序
  • 11.1将jenkins.war包放到主机B的tomcat的webapp下
  • 11.2启动tomcat
  • 11.3访问jenkins服务
  • 11.4进入jenkins
  • 12.初始化jenkins
  • 12.1修改admin密码
  • 12.2修改插件升级站点(有无均可,可自选)
  • 12.3下载jenkins插件
  • 12.4上传插件方法
  • 13修改jenkins配置
  • 13.1修改安全设置
  • 13.2全局工具安装
  • 14.启动主机C的tomcat
  • 15.创建jenkins工程
  • 15.1选择“新建Item”
  • 15.2创建一个空项目
  • 15.3配置源码管理
  • 15.4配置构建触发器
  • 15.5配置构建
  • 15.6配置构建后操作
  • 16.配置远程触发构建
  • 16.1进入到主机A(SVN服务器)的jenkins版本库的hooks文件夹
  • 16.2编写钩子程序
  • 16.3修改钩子程序权限
  • 17.在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

Jenkins 官方 Java 兼容性页面_java

  • 将第 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

Jenkins 官方 Java 兼容性页面_tomcat_02

PS:添加版本库帐号svnuser,密码为123456

设置用户权限

vim authz
[/]
svnuser = rw
* =

Jenkins 官方 Java 兼容性页面_svn_03

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: (2)安装tomcat:

5.主机B安装maven

参考网址:

6.修改主机B的tomcat配置

6.1进入tomcat解压目录的server.xml

vim /myutil/tomcat/tomcat8080/conf/server.xml

6.2修改 URL 地址的编码解码字符集

URIEncoding="UTF-8"

Jenkins 官方 Java 兼容性页面_tomcat_04

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=”^.*$"

Jenkins 官方 Java 兼容性页面_svn_05

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

点击测试刚才创建的用户密码

Jenkins 官方 Java 兼容性页面_java_06

Jenkins 官方 Java 兼容性页面_maven_07

看到下面页面,说明设置成功

Jenkins 官方 Java 兼容性页面_maven_08

8.eclipse创建项目

打开IDE工具eclipse,创建好准备持续部署的样例项目demo 参考网址:

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

Jenkins 官方 Java 兼容性页面_svn_09

Jenkins 官方 Java 兼容性页面_tomcat_10

Jenkins 官方 Java 兼容性页面_tomcat_11

  • svn://:固定格式
  • 192.168.1.108:搭建subversion服务的主机A的IP地址
  • jenkins:主机A创建的版本库

输入主机A设置的svn版本库的账户和密码

Jenkins 官方 Java 兼容性页面_linux_12

10.将demo项目提交到svn仓库

自行百度参考svn相关教程,过程略

11.主机B上部署jenkins程序

11.1将jenkins.war包放到主机B的tomcat的webapp下

Jenkins 官方 Java 兼容性页面_java_13

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

Jenkins 官方 Java 兼容性页面_linux_14

查看密码

cat /root/.jenkins/secrets/initialAdminPassword
  • 进入到自定义jenkins页面。这里选择安装插件的话会联网下载一些插件,小编这里选择“安装推荐的插件”
  • 第一次安装可能因为网络问题安装失败,重试几次一般就能下载好
  • 也可以去jenkins官网里下载插件,然后在jenkins插件管理页面上传插件
  • 上传插件也会检查依赖插件去下载一堆插件,不代表下载好的插件,上传就不需要网络
  • 总结:jenkins装插件对网路要求很高

Jenkins 官方 Java 兼容性页面_linux_15

下载安装插件中…

Jenkins 官方 Java 兼容性页面_svn_16

安装失败可能是网络问题,可以多重试几次。

PS:小编发现个别插件多次重试仍无法下载,就不管了

Jenkins 官方 Java 兼容性页面_maven_17

开始使用jenkins

Jenkins 官方 Java 兼容性页面_java_18

Jenkins 官方 Java 兼容性页面_svn_19

12.初始化jenkins

12.1修改admin密码

Jenkins 官方 Java 兼容性页面_maven_20

Jenkins 官方 Java 兼容性页面_maven_21

Jenkins 官方 Java 兼容性页面_tomcat_22

12.2修改插件升级站点(有无均可,可自选)

Jenkins 官方 Java 兼容性页面_maven_23

Jenkins 官方 Java 兼容性页面_linux_24

将升级站点修改成

http://mirror.esuni.jp/jenkins/updates/update-center.json

Jenkins 官方 Java 兼容性页面_tomcat_25

多提供几个升级站点(自己尝试):

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/

Jenkins 官方 Java 兼容性页面_svn_26

Jenkins 官方 Java 兼容性页面_linux_27

Jenkins 官方 Java 兼容性页面_svn_28

Jenkins 官方 Java 兼容性页面_svn_29

同理,下载deploy to container

Jenkins 官方 Java 兼容性页面_svn_30

12.4上传插件方法

Jenkins 官方 Java 兼容性页面_maven_31

Jenkins 官方 Java 兼容性页面_tomcat_32

PS:安装插件可能因为网络原因出现连接超时,安装过程比较缓慢,耐心等待。安装失败就多上传几次

13修改jenkins配置

13.1修改安全设置

Jenkins 官方 Java 兼容性页面_java_33

Jenkins 官方 Java 兼容性页面_linux_34

13.2全局工具安装

PS:根据先前安装的jdk、maven来配置

Jenkins 官方 Java 兼容性页面_svn_35

maven配置文件设置

/myutil/maven/maven-3.6.1/conf/settings.xml

Jenkins 官方 Java 兼容性页面_svn_36

JDK配置

/myutil/jdk/jdk1.8.0_271/

Jenkins 官方 Java 兼容性页面_tomcat_37

删除多余工具

Jenkins 官方 Java 兼容性页面_linux_38

maven配置

/myutil/maven/maven-3.6.1/

Jenkins 官方 Java 兼容性页面_linux_39

14.启动主机C的tomcat

/myutil/tomcat/tomcat8080/bin/startup.sh

15.创建jenkins工程

15.1选择“新建Item”

Jenkins 官方 Java 兼容性页面_maven_40

15.2创建一个空项目

Jenkins 官方 Java 兼容性页面_java_41

15.3配置源码管理

Jenkins 官方 Java 兼容性页面_maven_42

  • svn://192.168.1.112/jenkins/demo
  • svn://:固定协议格式
  • 192.168.1.112:SVN服务器IP,这里即是主机A的IP
  • jenkins:SVN服务器根目录下的一个具体的版本库
  • demo:版本库里面的一个maven工程,这里要注意,指定的demo根下有pom.xml文件才行

添加svn用户

Jenkins 官方 Java 兼容性页面_svn_43

Jenkins 官方 Java 兼容性页面_maven_44

15.4配置构建触发器

Jenkins 官方 Java 兼容性页面_svn_45

15.5配置构建

Jenkins 官方 Java 兼容性页面_maven_46

Jenkins 官方 Java 兼容性页面_tomcat_47

15.6配置构建后操作

Jenkins 官方 Java 兼容性页面_tomcat_48

PS:这一步要安装好之前说的deploy插件,因为构建后要自动部署,所以这里选择了发布war包到一个容器上(这里用的是tomcat容器)

Jenkins 官方 Java 兼容性页面_tomcat_49

Jenkins 官方 Java 兼容性页面_tomcat_50

Jenkins 官方 Java 兼容性页面_maven_51

Jenkins 官方 Java 兼容性页面_linux_52

Jenkins 官方 Java 兼容性页面_svn_53

一切配置填好,点击保存即可

Jenkins 官方 Java 兼容性页面_svn_54

16.配置远程触发构建

原理:

  • 实现自动化部署,首先eclipse实现提交操作之后,svn版本库收到提交请求
  • 要在svn服务器上配置“提交”操作的钩子程序(一旦发现提交操作就触发的shell程序脚本)
  • 钩子程序(即shell程序)执行命令,来通知jenkins去执行构建操作

大致原理图:

Jenkins 官方 Java 兼容性页面_maven_55

所以,在此,还需要配置钩子程序(提交操作触发的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强制指定部署最新版本