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

什么是持续集成?

1.Continuous integration(CI)

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

2.没有持续集成

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

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

3. 如何解决这些问题

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

jenkins下载

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

image.png

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

jenkins启动

将war包放进tomcat中启动

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

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

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

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启动成功

image.png

jenkins安装引导

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

进入容器效果图


image.png

查看文件内容

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

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


image.png

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


image.png

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


image.png

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


image.png

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


image.png

jenkins引导完成


image.png

jenkins配置操作权限

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


image.png

选择Anyone can do anything 然后保存


image.png

jenkins配置全局工具

image.png

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


image.png

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

apt-get install maven

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


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填入全局设置里面


image.png
image.png

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

apt-get install vim

maven设置国内地址

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

在mirrors标签下添加如下

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
image.png
配置maven

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


image.png
配置jdk

查看java_home

cat $JAVA_HOME
image.png

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

image.png

配置完成之后点击保存

创建构建任务

image.png
image.png

点击保存


image.png

点击工作区


image.png

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


image.png
配置SVN项目(假如你已经准备好了SVN的环境,如果没有请移步本文下方subversion服务安装)
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
image.png

也可以通过网络链接查看


image.png
image.png

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

image.png

填写完成点击添加


image.png

选择刚刚添加的凭证


image.png
配置构建
image.png

选择我们之前配置的maven


image.png

构建命令 clean package

image.png

构建项目

进入myProject任务


image.png

立即构建

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


    image.png

查看构建过程


image.png

控制台输出的构建信息


image.png

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


image.png
image.png

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


image.png

部署

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

image.png

安装 deploy to container插件


image.png

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


image.png
配置构建后的操作(假如你已经有tomcat服务了,否则请移步本文下方:tomcat服务器)
image.png

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


image.png

选择部署的容器版本


image.png

添加tomcat用户名密码


image.png
image.png

选中添加的用户


image.png

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


image.png

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


image.png

点击构建项目


image.png

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

image.png

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

image.png

构建触发器

填写token 自己随便写


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

image.png

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


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
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

修改项目并且提交


image.png

提交成功后开始自动构建


image.png

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

image.png

subversion 服务安装


用svn镜像创建subversion服务

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

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

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

image.png

创建一个用户

vim passwd

在结尾添加如下内容

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


    image.png

设置用户权限

vim authz

在结尾添加如下内容

[/]
svn_user = rw
* = 
  • svn_user = rw:设置svn_user用户对跟目录有读写权限
  • *= :其他用户没有权限
image.png

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

image.png

测试链接svn服务

用idea测试链接


image.png

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

image.png

双击输入用户名密码


image.png
将项目上传到SVN MyProject仓库中

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


image.png

选择subversion


image.png

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


image.png

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


image.png

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


image.png

点击ok


image.png

完成关联


image.png

将项目提交到远程svn仓库


image.png

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


image.png

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


image.png

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


image.png

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


image.png

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

image.png

tomcat服务器安装


使用docker安装tomcat服务

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

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

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
添加如下代码

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="tomcat_user" password="123456"
roles="manager-gui,manager-script,manager-jmx,manager-status" />
image.png
设置IP访问权限
vim /usr/local/tomcat/webapps/manager/META-INF/context.xml

注释掉

<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
image.png

重启容器

docker restart tomcat8.5

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

image.png

效果图: 配置完成


image.png

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容