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/
进入官网进行下载,细心的同学估计已经发现了,下载下来的是一个war包
jenkins启动
将war包放进tomcat中启动
这里我们用docker做环境隔离,以免和本机环境冲突,docker的安装这里就不多做介绍了,大家自行了解
创建tomcat容器
docker run -itd --name jenkins -p 1888:8080 tomcat:8.5
访问本机地址:http://localhost:1888/
看到如下界面说明tomct容器创建成功
启动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启动成功
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: 安装的时候有可能会失败,多试几次就可以了
安装 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/
完成构建后自动部署
构建触发器
填写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
访问之后查看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.pngsubversion 服务安装
用svn镜像创建subversion服务
docker run -itd --name svn -p 1889:80 marvambass/subversion
访问:http://localhost:1889/
如下界面,svn服务端创建完成
修改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用户对跟目录有读写权限
- *= :其他用户没有权限
访问http://localhost:1889/svn/
如下项目仓库创建成功
测试链接svn服务
用idea测试链接
image.png
输入svn仓库地址 http://localhost:1889/svn/myProject
双击输入用户名密码
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/
tomcat服务器安装
使用docker安装tomcat服务
docker run -itd --name tomcat8.5 -p 1890:8080 tomcat:8.5
访问地址:http://localhost:1890/
效果图
更改为国内源
进入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
安装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
写作不易,如果文章对您有帮助请给个赞支持下,如有错误请指出。谢谢~~
版权声明:原创文章,转载请注明来源。