为什么需要持续集成呢?

1.因为在开发的过程中,用于阶段性地构建出产品。
这样可以更加清楚地审视产品的不足之处。
2.由于在某些情况下,例如有紧急bug的时候,研发的版本更新可能很频繁,
部署持续集成环境,可以减少每次部署所花费的时间。
化整为零:
1.这套组合可以分成源码管理、编译构建、远程部署
2.源码管理常见的有gitlab、SVN
3.编译构建是针对编译型语言的。
此处针对Java语言使用Maven、针对IOS则是使用其他编译工具。
4.远程部署由jenkins提供。

基础环境
192.168.254.134 Maven-3.5.4、Jenkins-2.133、Git-2.12.0、JDK1.8
192.168.254.135 Gitlab-11.0.4
192.168.254.131 tomcat9.0.10

下载安装包(统一到opt目录)
wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.18.0.tar.xz
(其他安装包 本人博客里面其他文章里面有下载地址)

安装Gitlab
Gitlab的作用:作为源码管理的角色。
Gitlab实际上是整合了nginx、git等多种软件提供了一个可视化的界面。
包含git命令的基本功能,但相比于git命令更加简单易用。
安装gitlab和必要的依赖
yum install curl openssh-server postfix
systemctl enable sshd postfix
systemctl start sshd postfix
添加gitlab包服务器安装包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
yum install gitlab-ce
3.配置并启动

gitlab-ctl reconfigure
gitlab-ctl status
gitlab-ctl stop
gitlab-ctl start
4.浏览到主机名和登录Browse to the hostname and login
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。

初始化gitlab
gitlab-ctl reconfigure
有时候,像上面步骤修改了GitLab的ip地址一样,临时修改了GitLab的配置之后,得执行如下的命令,应用重新配好的配置并重启GitLab,然后查看GitLab的状态
gitlab-ctl reconfigure
gitlab-ctl retart
gitlab-ctl status
gitlab-ctl tail

找到应该访问的地址
vim /etc/gitlab/gitlab.rb
external_url 'http://node.abc.com'
注意:需要解析域名
正常访问页面:
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。

安装maven
Maven的作用:Maven负责java语言的编译和打包。
换个角度来说,Maven相当于Java中的make命令。
同类型的工具有Ant,但是Ant不提供解决依赖关系的功能
获取安装包:镜像。
https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
解压tar包
tar -zxf apache-maven-3.5.4-bin.tar.gz -C /usr/local/
cd /usr/local/
mv apache-maven-3.5.4 maven
定义变量,输出执行路径
vim /etc/profile 在最后面添加
export M2_HOME=/usr/local/maven
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$M2_HOME/bin:$PATH
source /etc/profile
测试能否正常运行
mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.3.3.el7.x86_64", arch: "amd64", family: "unix"

安装jenkins
Jenkins的功能:
1.通过git命令从Gitlab中拉取源码
2.让maven进行编译并打包
3.把打好的包发送到目标主机
4.执行部署脚本。

之前有安装过 https://blog.51cto.com/10158955/2146748
#安装方式有多种,包括rpm、war包启动、dockerfile。

安装完成后接下来配置ssh,也就是要上传的测试服务器ssh信息
首先我们先要在jenkins服务器上生成秘钥,然后利用秘钥要进行免密登录
在jenkins服务器上执行ssh-keygen -t rsa,一路回车就可以 一路回车的话密码为空,这样就在/root/.ssh/下生成的两个文件id.rsa(私钥)和id.rsa.pub(公钥),我们需要把公钥的内容写到测试服务器(tomcat服务器上)的/root/.ssh/authorized_keys文件中 如果没有就新建一个,接下来我们开始配置
注意:
su - jenkins
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.254.131
jenkins默认是没有shell的
usermod -s /bin/bash jenkins
这是给jenkins加个bash
或者su -s /bin/bash jenkins也可以
远程服务器authorized_keys 要给644其他用户可以读

编译安装新版的git
注意:Maven、Git、JDK都是安装到jenkins服务器。
在往后的设置中,需要在jenkins中指定他们的路径。

获取源码包
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.18.0.tar.gz
注意:为了能让jenkins能正常从gitlab中拉取源码,需要编译1.9以上的版本。
git构建时,需要的环境
yum groupinstall "Development Tools"
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker openssh-clients
除了正常的编译环境之外,编译git的时候还要额外安装各种devel包。否则会构建失败。

编译并安装,同时输出执行路径到环境变量中:
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
source /etc/bashrc

验证能否正常运行:
git --version
git version 2.3.0

在jenkins上完成配置
指定Maven、Git、JDK的安装路径
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
为Jenkins安装配件:
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
需要安装的插件:
Gitlab Plugin
#安装之后才可以在系统配置中指定gitlab的IP地址
Git Plugin
Git Client Plugin
需要添加的插件:Gitlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab
#用于jenkins在gitlab中拉取源码
Publish Over SSH
#用于通过ssh部署应用
Maven Integration plugin
#用于新建maven项目
注意 : 安装了插件之后,在全局配置才能详细配置。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
配置相关选项
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
配置Gitlab的地址,红字表示需要Gitlab的账号密码,但是这个可以在新建项目的时候指定。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
Publish_over_SSH插件,可以使用Path to key指定jenkins主机的私钥路径,也可以如上。 注意:部署应用的主机需要jenkins主机的公钥,可以ssh-copy-id命令复制过去。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
配置需要部署应用的主机的IP地址及相关信息测试是否可以连接
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
点击test configuration可以测试连接 ,如下图就是测试成功,说明我们现在已经可以使用jenkins连接服务器了
现在jenkins已经可以和远程服务器通信了,但是还没和gitlab连通,接下来我们配置gitlab和jenkins的连通,首先先安装gitlab相关插件,关于插件安装上面已经写过
在jenkins上新建项目
注意:安装了Maven Integration plugin才可以创建maven项目
配置maven打包仓库参考文章链接(在本人技术博客里面)
https://blog.51cto.com/10158955/2153796

jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
之后到里面配置
然后点击源码管理如下图,我们选择git,repository url 写gitlab仓库的地址,credentials是指信任,我们需要在gitlab中添加jenkins的公钥 ,在下图的key中填写jenkins服务器的公钥,title处填写jenkins,然后在到jenkins上就可以看到credentials处可以选择jenkins了,然后点击构建触发器选项卡

jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
报错解决
https://blog.csdn.net/zzpzheng/article/details/52132311

gitlab使用webhook向jenkins发送请求,报错 Requests to the local network are not allowed
即可进入Admin area,在Admin area中,在settings标签下面,找到OutBound Request,勾选上Allow requests to the local network from hooks and services ,保存更改即可解决问题
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。

jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。

测试Jenkins可以通过gitlab将服务推送到远程主机上。
这里到远程机器上设置登陆账号
cd /usr/local/tomcat/conf
vi tomcat-users.xml
<tomcat-users>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin"/>
<user username="developer" password="developer" roles="manager"/>
</tomcat-users>
启动tomcat
jenkins+Gitlab+maven+tomcat实现自动化集成、打包、部署。