docker+jenkins+SVN自动构建部署Maven项目

什么是持续集成?

1.Continuous integration(CI)

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

2.没有持续集成

项目做模块集成的时候,发现很多接口都不通==>浪费大量时间
需要手动去编译打包最新的代码==>构建过程不透明
发布代码,上线,基本靠手工==>脚本乱飞

摘自https://www.cnblogs.com/jimmy-xuli/p/9020825.html

3. 如何解决这些问题

持续集成是一个理念,落实持续集成我们需要借助工具,如果我们不借助工具的话,很难实现。

  • 工具
    • Jenkins
    • TeamCity
    • Hudson
    • CruiseControl
    • Continuum
    • QuickBuild
    • Bamboo
    • CI-Eye

jenkins下载

jenkins官网https://jenkins.io/zh/

docker+jenkins+SVN自动构建部署Maven项目_第1张图片
image.png

进入官网进行下载,细心的同学估计已经发现了,下载下来的是一个war包

jenkins启动

将war包放进tomcat中启动

这里我们用docker做环境隔离,以免和本机环境冲突,docker的安装这里就不多做介绍了,大家自行了解

创建tomcat容器
docker run -itd --name jenkins -p 1888:8080 tomcat:8.5

访问本机地址:http://localhost:1888/
看到如下界面说明tomct容器创建成功

docker+jenkins+SVN自动构建部署Maven项目_第2张图片
image.png

启动jenkins

将下载的jenkins.war文件放入容器的/usr/local/tomcat/webapps/文件下tomcat会自动启动这个项目
docker 拷贝宿主机文件到容器内

docker cp 宿主机文件位置 容器名称:容器路径

举例:

docker cp ./jenkins.war jenkins:/usr/local/tomcat/webapps/

将宿主机当前目录下的jenkins.war 拷贝到名称为jenkins的容器/usr/local/tomcat/webapps/文件夹下
访问地址:http://localhost:1888/jenkins/
看到如下界面jenkins启动成功

docker+jenkins+SVN自动构建部署Maven项目_第3张图片
image.png

jenkins安装引导

  • 根据提示:将/root/.jenkins/secrets/initialAdminPassword文件内容复制填写
  • 这里的目录当然是指的容器里的路径
    进入容器
docker exec -it jenkins /bin/bash

进入容器效果图


image.png

查看文件内容

cat /root/.jenkins/secrets/initialAdminPassword
image.png

将内容复制出来写入jenkins引导页面点继续
出现如下界面: 选择"安装推荐的插件"


docker+jenkins+SVN自动构建部署Maven项目_第4张图片
image.png

进入如下界面,等待安装完成


docker+jenkins+SVN自动构建部署Maven项目_第5张图片
image.png

安装完成后自动进入如下界面: 点击"使用admin账户继续"


docker+jenkins+SVN自动构建部署Maven项目_第6张图片
image.png

出现如下界面点击:"保存并完成"


docker+jenkins+SVN自动构建部署Maven项目_第7张图片
image.png

出现如下界面点击:"开始使用jenkins"


docker+jenkins+SVN自动构建部署Maven项目_第8张图片
image.png

jenkins引导完成


docker+jenkins+SVN自动构建部署Maven项目_第9张图片
image.png

jenkins配置操作权限

公开权限(设置任何人有任何权限)


docker+jenkins+SVN自动构建部署Maven项目_第10张图片
image.png

选择Anyone can do anything 然后保存


docker+jenkins+SVN自动构建部署Maven项目_第11张图片
image.png

jenkins配置全局工具

docker+jenkins+SVN自动构建部署Maven项目_第12张图片
image.png

配置Maven的settings.xml文件, 选择“文件系统中的settings文件” ,并填写settings.xml的位置


docker+jenkins+SVN自动构建部署Maven项目_第13张图片
image.png

这里的位置当然也是容器里面的位置了
容器内目前还没有maven环境
安装maven

apt-get install maven

信息如下,提示找不到maven的包


docker+jenkins+SVN自动构建部署Maven项目_第14张图片
image.png

将源改为国内站点,这样下载maven比较快
运行如下命令

cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list

更新源

apt-get update

再次安装maven, 安装过程中会有一次询问,输出Y敲回车继续安装

apt-get install maven

查看maven是否安装成功, 查看maven版本信息

mvn -v

如下: 得知maven home的位置是 /usr/share/maven, 将此地址加上/conf/settings.xml填入全局设置里面


docker+jenkins+SVN自动构建部署Maven项目_第15张图片
image.png
docker+jenkins+SVN自动构建部署Maven项目_第16张图片
image.png

修改maven仓库地址为国内站点,提升下载速度
先下载vim, 下载过程中会询问是否继续输入Y敲回车

apt-get install vim

maven设置国内地址

vim  /usr/share/maven/conf/settings.xml

在mirrors标签下添加如下


      alimaven
      aliyun maven
      http://maven.aliyun.com/nexus/content/groups/public
      central        
    
docker+jenkins+SVN自动构建部署Maven项目_第17张图片
image.png
配置maven

因为我们用不到git所有删除git配置,
点击新增maven 勾掉自动安装
maven的别名: myMaven
maven的地址: /usr/share/maven


docker+jenkins+SVN自动构建部署Maven项目_第18张图片
image.png
配置jdk

查看java_home

cat $JAVA_HOME
image.png

得知JAVA_HOME为/usr/local/openjdk-8

docker+jenkins+SVN自动构建部署Maven项目_第19张图片
image.png

配置完成之后点击保存

创建构建任务

docker+jenkins+SVN自动构建部署Maven项目_第20张图片
image.png
docker+jenkins+SVN自动构建部署Maven项目_第21张图片
image.png

点击保存


docker+jenkins+SVN自动构建部署Maven项目_第22张图片
image.png

点击工作区


docker+jenkins+SVN自动构建部署Maven项目_第23张图片
image.png

这里还不能构建,因为我们还没有配置SVN项目


docker+jenkins+SVN自动构建部署Maven项目_第24张图片
image.png
配置SVN项目(假如你已经准备好了SVN的环境,如果没有请移步本文下方subversion服务安装)
docker+jenkins+SVN自动构建部署Maven项目_第25张图片
image.png

点击 源码管理----> subversion 配置项目仓库地址

  • 注意这里:填写的不是localhost而是10.0.17.1,作为容器来说他会从我们配置的地址去拉取源码,localhost是本机的意思,在jenkins容器中执行的话就代表容器本身,jenkins本身没有没有SVN服务,所以这里不能配置localhost,要配置局域网
  • 为什么不是192.xx.xx.xx 而是10.0.17.1
    因为我们的192.xx.xx.xxIP地址是动态IP,也许下次链接的时候就变成别的了,这样下次构建就拉不到源码了
    而10.0.17.1这个IP是分配给Docker的虚拟网卡的IP这里只要你不改就不会变的

查看docker ip

ipconfig
docker+jenkins+SVN自动构建部署Maven项目_第26张图片
image.png

也可以通过网络链接查看


docker+jenkins+SVN自动构建部署Maven项目_第27张图片
image.png
docker+jenkins+SVN自动构建部署Maven项目_第28张图片
image.png

添加svn账号密码 @HEAD 拉去最新版本的代码

docker+jenkins+SVN自动构建部署Maven项目_第29张图片
docker+jenkins+SVN自动构建部署Maven项目_第30张图片
image.png

填写完成点击添加


docker+jenkins+SVN自动构建部署Maven项目_第31张图片
image.png

选择刚刚添加的凭证


docker+jenkins+SVN自动构建部署Maven项目_第32张图片
image.png
配置构建
docker+jenkins+SVN自动构建部署Maven项目_第33张图片
image.png

选择我们之前配置的maven


docker+jenkins+SVN自动构建部署Maven项目_第34张图片
image.png

构建命令 clean package

docker+jenkins+SVN自动构建部署Maven项目_第35张图片
image.png

构建项目

进入myProject任务


docker+jenkins+SVN自动构建部署Maven项目_第36张图片
image.png

立即构建

  • 蓝色:成功
  • 红色:失败
  • 灰色:取消的


    docker+jenkins+SVN自动构建部署Maven项目_第37张图片
    image.png

查看构建过程


docker+jenkins+SVN自动构建部署Maven项目_第38张图片
image.png

控制台输出的构建信息


docker+jenkins+SVN自动构建部署Maven项目_第39张图片
image.png

进入工作区查看构建之后的内容


docker+jenkins+SVN自动构建部署Maven项目_第40张图片
image.png
docker+jenkins+SVN自动构建部署Maven项目_第41张图片
image.png

进入target, 构建完成 产生的war包, 到这里我们实现了构建


docker+jenkins+SVN自动构建部署Maven项目_第42张图片
image.png

部署

deploy to container
部署到容器的插件: deploy to container
tips: 安装的时候有可能会失败,多试几次就可以了

docker+jenkins+SVN自动构建部署Maven项目_第43张图片
image.png

安装 deploy to container插件


docker+jenkins+SVN自动构建部署Maven项目_第44张图片
image.png

如果这一步失败的话,多试几次


docker+jenkins+SVN自动构建部署Maven项目_第45张图片
image.png
配置构建后的操作(假如你已经有tomcat服务了,否则请移步本文下方:tomcat服务器)
docker+jenkins+SVN自动构建部署Maven项目_第46张图片
image.png

配置war包位置及访问名称
这里的war包是你打包之后的war包位置, 一般都是在项目的target目录下,war包名称直接点击工作空间下的target看下就知道了,我这里是ssm.war
项目访问后缀为ssm


docker+jenkins+SVN自动构建部署Maven项目_第47张图片
image.png

选择部署的容器版本


docker+jenkins+SVN自动构建部署Maven项目_第48张图片
image.png

添加tomcat用户名密码


docker+jenkins+SVN自动构建部署Maven项目_第49张图片
image.png
docker+jenkins+SVN自动构建部署Maven项目_第50张图片
image.png

选中添加的用户


docker+jenkins+SVN自动构建部署Maven项目_第51张图片
image.png

配置tomcat地址 这里的ip于svn同理


docker+jenkins+SVN自动构建部署Maven项目_第52张图片
image.png

执行构建之前查看tomcat8.5容器内的webapps


image.png

点击构建项目


docker+jenkins+SVN自动构建部署Maven项目_第53张图片
image.png

构建项目之后, 已经将war包部署上去了

image.png

访问:http://10.0.17.1:1890/ssm/
完成构建后自动部署

docker+jenkins+SVN自动构建部署Maven项目_第54张图片
image.png

构建触发器

填写token 自己随便写


docker+jenkins+SVN自动构建部署Maven项目_第55张图片
image.png

根据提示拼接地址: http://jenkinsUrl/job/myProject/build?token=自己设置的token值
保存之后访问:会触发jenkins构建 这里ip是10.xx.xx与svn同理
http://10.0.17.1:1888/jenkins/job/myProject/build?token=AUTO_DEPLOY

docker+jenkins+SVN自动构建部署Maven项目_第56张图片
image.png

访问之后查看jenkins, 正在构建


docker+jenkins+SVN自动构建部署Maven项目_第57张图片
image.png

现在通过访问地址就能触发构建,接下来在svn commit的时候访问这个地址就能完成自动构建和部署

自动构建

进入svn服务器

docker exec -it svn /bin/bash
安装curl
apt-get install curl
利用curl访问触发地址
curl http://10.0.17.1:1888/jenkins/job/myProject/build?token=AUTO_DEPLOY
docker+jenkins+SVN自动构建部署Maven项目_第58张图片
image.png
现在要做的是SVN提交后触发这个脚本就可以实现自动部署

进入项目hooks

cd /var/local/svn/myProject/hooks

拷贝post-commit.tmpl

docker cp post-commit.tmpl post-commit

将触发脚本写入 post-commit 文件

vim post-commit
  • post-commit 文件是SVN内置的,commit之后就会自动执行post-commit文件
    将post-commit 设置为可执行文件
chmod 755 post-commit 

这里的#!/bin/sh 一定不能去掉,否则会导致,不能触发部署


image.png

修改项目并且提交


docker+jenkins+SVN自动构建部署Maven项目_第59张图片
image.png

提交成功后开始自动构建


docker+jenkins+SVN自动构建部署Maven项目_第60张图片
image.png

访问我们部署的项目,修改内容成功! 以后每次commit都会自动构建部署

docker+jenkins+SVN自动构建部署Maven项目_第61张图片
image.png

subversion 服务安装


用svn镜像创建subversion服务

docker run -itd --name svn -p 1889:80  marvambass/subversion

访问:http://localhost:1889/
如下界面,svn服务端创建完成

docker+jenkins+SVN自动构建部署Maven项目_第62张图片
image.png

修改apt源为国内的
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list

更新源

apt-get update

安装vim 安装过程中会询问你是否继续,输入Y敲回车继续安装

apt-get install vim
在svn上创建一个项目

进入svn容器

docker exec -it svn /bin/bash

进入svn仓库

cd /var/local/svn/

创建项目仓库

svnadmin create myProject

修改仓库配置

cd myProject/conf/
vim svnserve.conf

将如下注释打开

anon-access = none   
auth-access = write
password-db = passwd
authz-db = authz

tips:anon-access=read属性除了去掉注释还需要把值改为none

docker+jenkins+SVN自动构建部署Maven项目_第63张图片
image.png

创建一个用户

vim passwd

在结尾添加如下内容

svn_user = 123456
  • 创建一个用户:svn_user
  • 密码:123456


    docker+jenkins+SVN自动构建部署Maven项目_第64张图片
    image.png

设置用户权限

vim authz

在结尾添加如下内容

[/]
svn_user = rw
* = 
  • svn_user = rw:设置svn_user用户对跟目录有读写权限
  • *= :其他用户没有权限
docker+jenkins+SVN自动构建部署Maven项目_第65张图片
image.png

访问http://localhost:1889/svn/
如下项目仓库创建成功

docker+jenkins+SVN自动构建部署Maven项目_第66张图片
image.png

测试链接svn服务

用idea测试链接


docker+jenkins+SVN自动构建部署Maven项目_第67张图片
image.png

输入svn仓库地址 http://localhost:1889/svn/myProject

docker+jenkins+SVN自动构建部署Maven项目_第68张图片
image.png

双击输入用户名密码


docker+jenkins+SVN自动构建部署Maven项目_第69张图片
image.png
将项目上传到SVN MyProject仓库中

自己到创建一个maven项目获取去github上下载一个
将项目交给版本控制工具管理


docker+jenkins+SVN自动构建部署Maven项目_第70张图片
image.png

选择subversion


docker+jenkins+SVN自动构建部署Maven项目_第71张图片
image.png

项目变成红色,已经交给了SVN管理但是还没有与远程仓库同步


docker+jenkins+SVN自动构建部署Maven项目_第72张图片
image.png

将项目关联远程仓库
右键项目跟目录


docker+jenkins+SVN自动构建部署Maven项目_第73张图片
image.png

选择要关联的远程仓库地址


docker+jenkins+SVN自动构建部署Maven项目_第74张图片
image.png

点击ok


docker+jenkins+SVN自动构建部署Maven项目_第75张图片
image.png

完成关联


docker+jenkins+SVN自动构建部署Maven项目_第76张图片
image.png

将项目提交到远程svn仓库


docker+jenkins+SVN自动构建部署Maven项目_第77张图片
image.png

选择要提交的文件
.gitignore .idea test 不需要提交, 尤其是test构建的时候有可能会执行单元测试,如果失败就会影响发布
点击commit提交到远程仓库


docker+jenkins+SVN自动构建部署Maven项目_第78张图片
image.png

这里是警告信息,直接点击commit


docker+jenkins+SVN自动构建部署Maven项目_第79张图片
image.png

这里是警告信息,直接点击commit


docker+jenkins+SVN自动构建部署Maven项目_第80张图片
image.png

提交到远程仓库之后没有颜色了


docker+jenkins+SVN自动构建部署Maven项目_第81张图片
image.png

访问http://localhost:1889/svn/myProject/

docker+jenkins+SVN自动构建部署Maven项目_第82张图片
image.png

tomcat服务器安装


使用docker安装tomcat服务

docker run -itd --name tomcat8.5 -p 1890:8080 tomcat:8.5

访问地址:http://localhost:1890/
效果图

docker+jenkins+SVN自动构建部署Maven项目_第83张图片
image.png

更改为国内源

进入tomcat

docker exec -it tomcat8.5 /bin/bash
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "" > /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
echo "deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib" >> /etc/apt/sources.list
更新源
apt-get update
安装vim, 安装过程中会询问是否继续,输入Y敲回车继续安装
apt-get install vim
配置tomcat用户

修改文件

 vim /usr/local/tomcat/conf/tomcat-users.xml

我这里配置的用户名是 tomcat_user 密码:123456
添加如下代码






docker+jenkins+SVN自动构建部署Maven项目_第84张图片
image.png
设置IP访问权限
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

注释掉


docker+jenkins+SVN自动构建部署Maven项目_第85张图片
image.png

重启容器

docker restart tomcat8.5

访问:http://localhost:1890
验证用户

docker+jenkins+SVN自动构建部署Maven项目_第86张图片
image.png

效果图: 配置完成


docker+jenkins+SVN自动构建部署Maven项目_第87张图片
image.png

写作不易,如果文章对您有帮助请给个赞支持下,如有错误请指出。谢谢~~

版权声明:原创文章,转载请注明来源。

你可能感兴趣的:(docker+jenkins+SVN自动构建部署Maven项目)