什么是持续集成?
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
进入容器效果图
查看文件内容
cat /root/.jenkins/secrets/initialAdminPassword
将内容复制出来写入jenkins引导页面点继续
出现如下界面: 选择"安装推荐的插件"
进入如下界面,等待安装完成
安装完成后自动进入如下界面: 点击"使用admin账户继续"
出现如下界面点击:"保存并完成"
出现如下界面点击:"开始使用jenkins"
jenkins引导完成
jenkins配置操作权限
公开权限(设置任何人有任何权限)
选择Anyone can do anything 然后保存
jenkins配置全局工具
配置Maven的settings.xml文件, 选择“文件系统中的settings文件” ,并填写settings.xml的位置
这里的位置当然也是容器里面的位置了
容器内目前还没有maven环境
安装maven
apt-get install maven
信息如下,提示找不到maven的包
将源改为国内站点,这样下载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填入全局设置里面
修改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>
配置maven
因为我们用不到git所有删除git配置,
点击新增maven 勾掉自动安装
maven的别名: myMaven
maven的地址: /usr/share/maven
配置jdk
查看java_home
cat $JAVA_HOME
得知JAVA_HOME为/usr/local/openjdk-8
配置完成之后点击保存
创建构建任务
点击保存
点击工作区
这里还不能构建,因为我们还没有配置SVN项目
配置SVN项目(假如你已经准备好了SVN的环境,如果没有请移步本文下方subversion服务安装)
点击 源码管理----> 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
也可以通过网络链接查看
添加svn账号密码 @HEAD 拉去最新版本的代码
填写完成点击添加
选择刚刚添加的凭证
配置构建
选择我们之前配置的maven
构建命令 clean package
构建项目
进入myProject任务
立即构建
- 蓝色:成功
- 红色:失败
-
灰色:取消的
查看构建过程
控制台输出的构建信息
进入工作区查看构建之后的内容
进入target, 构建完成 产生的war包, 到这里我们实现了构建
部署
deploy to container
部署到容器的插件: deploy to container
tips: 安装的时候有可能会失败,多试几次就可以了
安装 deploy to container插件
如果这一步失败的话,多试几次
配置构建后的操作(假如你已经有tomcat服务了,否则请移步本文下方:tomcat服务器)
配置war包位置及访问名称
这里的war包是你打包之后的war包位置, 一般都是在项目的target目录下,war包名称直接点击工作空间下的target看下就知道了,我这里是ssm.war
项目访问后缀为ssm
选择部署的容器版本
添加tomcat用户名密码
选中添加的用户
配置tomcat地址 这里的ip于svn同理
执行构建之前查看tomcat8.5容器内的webapps
点击构建项目
构建项目之后, 已经将war包部署上去了
访问:http://10.0.17.1:1890/ssm/
完成构建后自动部署
构建触发器
填写token 自己随便写
根据提示拼接地址: 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, 正在构建
现在通过访问地址就能触发构建,接下来在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
现在要做的是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 一定不能去掉,否则会导致,不能触发部署
修改项目并且提交
提交成功后开始自动构建
访问我们部署的项目,修改内容成功! 以后每次commit都会自动构建部署
subversion 服务安装
用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
创建一个用户
vim passwd
在结尾添加如下内容
svn_user = 123456
- 创建一个用户:svn_user
-
密码:123456
设置用户权限
vim authz
在结尾添加如下内容
[/]
svn_user = rw
* =
- svn_user = rw:设置svn_user用户对跟目录有读写权限
- *= :其他用户没有权限
访问http://localhost:1889/svn/
如下项目仓库创建成功
测试链接svn服务
用idea测试链接
输入svn仓库地址 http://localhost:1889/svn/myProject
双击输入用户名密码
将项目上传到SVN MyProject仓库中
自己到创建一个maven项目获取去github上下载一个
将项目交给版本控制工具管理
选择subversion
项目变成红色,已经交给了SVN管理但是还没有与远程仓库同步
将项目关联远程仓库
右键项目跟目录
选择要关联的远程仓库地址
点击ok
完成关联
将项目提交到远程svn仓库
选择要提交的文件
.gitignore .idea test 不需要提交, 尤其是test构建的时候有可能会执行单元测试,如果失败就会影响发布
点击commit提交到远程仓库
这里是警告信息,直接点击commit
这里是警告信息,直接点击commit
提交到远程仓库之后没有颜色了
访问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
更新源
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" />
设置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" />
重启容器
docker restart tomcat8.5
访问:http://localhost:1890
验证用户
效果图: 配置完成
写作不易,如果文章对您有帮助请给个赞支持下,如有错误请指出。谢谢~~
版权声明:原创文章,转载请注明来源。