一.基础知识GitLab:是一个基于Git实现的在线代码库房托管软件,是拿来提供代码托管的。我们可以用在企业内部网路搭建私服。jenkins:基于Java开发的一种持续集成工具,用于监控持续重复的工作。在提供一个开放易用的软件平台,使软件的持续集成弄成可能。maven:项目管理工具,在这儿我们可以执行maven命令来帮我们打包jdk:Java语言的软件开发工具包tomcat:轻量级应用服务器git:版本控制器二.整合目的
在日常开发中,原先的流程是须要把项目从gitlab上复制到本地,再打成war包,之后布署到tomcat服务器上运行。开发项目的过程中会时常布署测试环境来验证,重复以上操作会变得很繁杂,浪费大量时间,所以使用jenkins来实现持续集成,对整个开发项目的过程有着重要的战略意义。我们开发软件为了哪些?对,简化步骤,提升开发效率,节约时间。
三:流程示意图
请叫我灵魂画师~
四:软件安装
前提:此次整合,我是只使用2台机器,服务器A装jenkins,jdk,maven,服务器B装gitlab和tomcat,虽然应当是要个服务器C装tomcat,这样思路就更清楚了,具体情况诸位按照实际需求来定哈。
1)B服务器上gitLab安装
1.安装依赖
sudo yum install curl policycoreutils openssh-server openssh-clients policycoreutils-python
sudo systemctl enable sshd
sudo systemctl start sshd
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
注意:sudosystemctlstartpostfix假如报错,如下边所示
Job for postfix.service failed because the control process exited with error code. See "systemctl status postfix.service" and "journalctl -xe" for details.
解决办法:更改vi/etc/postfix/main.cf的设置
inet_protocols=all
inet_interfaces=all
2.yum配置镜像加速
我推荐复旦学院镜像源:
操作如下:vi/etc/yum.repos.d/gitlab_gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
3.更新本地云缓存`
sudo yum makecache`
4.安装`
sudo yum install gitlab-ce
5.更改配置项
默认是80端口,假如想要更改端标语的话,打开gitlab.rb文件,更改如下:
sudovim/etc/gitlab/gitlab.rb
#修改配置项
external_url 'http://:'
unicorn['port'] =
prometheus['listen_address'] = 'localhost:'
sudogitlab-ctlreconfigure#重新配置服务;
6.重启gitlab
gitlab-ctl restart
打开:,会弹出一个设置初始密码的界面,根据要求输入初始密码,都会跳转到登入页面。gitlab管理员用户名为root。
我那边是自己创建了用户,右图是注册,完成后登录。
7.服务器A上配置免密码登入
顾客端命令行生成ssh
ssh-keygen -t rsa
它会生成私钥id_rsa.pub和公钥id_rsa,储存在.ssh目录下。复制私钥到Gitlab的用户设置中的SSHKeys中,点击保存。操作如右图所示
有人问这样做的目的是哪些?问得好!这样我们才能构建服务器A跟gitLab的安全联接,我们就可以通过git将gitlab库房里的代码拉出来或则推送到库房。
2)A服务器上安装jdk
centOS安装jdk有三种,随意选一种都可以,网上一大堆。我选中的是自动解压安装包。
卸载系统自带的jdk(此步骤构建在centOS7自带jdk1.8的情况,可以跳过,也可以自己安装想要的jdk)
查看当前系统jdk的版本:java-version。(如右图的话则代表自带,继续下边步骤)
列出匹配已安装的java的软件包:
yum list installed | grep java
卸载安装的jdk
yum -y remove java-1.7.0-openjdk*
yum -y remove java-1.8.0-openjdk*
当结果出现了完毕!,就表示卸载成功。
输入java-version查看,验证是否卸载成功。
2.下载jdk1.8安装包
jdk下载地址:
下载jdk-8u152-linux-x64.tar.gz(按照自己的系统位数选择对应的包)
之后使用Xftp将下载好的jdk-8u152-linux-x64.tar.gz上传到CentOs起来,我选择的是在usr下创建一个文件夹来专门放压缩包。
3.在user/local目录下新建java文件夹
# cd /usr/local/
# mkdir java
# cd java
4.解压
进到压缩包所在的目录,将jdk-8u152-linux-x64.tar.gz解压到我所创建的java文件中。
tar -zxvf jdk-8u152-linux-x64.tar.gz -C /usr/local/java
5.配置环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_212
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
注释:
JAVA_HOME指明JDK安装路径,就是昨晚安装时所选择的路径,此路径下包括lib,bin,jre等文件夹(tomcat,Eclipse的运行都须要借助此变量)。
PATH促使系统可以在任何路径下辨识java命令
非常注意:环境变量值的结尾没有任何符号,不同值之间用:隔开(windows中用;)
6.使配置文件生效
source /etc/profile
7.测试配置是否成功
java -version
3)Maven安装
1.获取安装包:镜像。
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
2.提早创建好maven文件夹,解压tar包至maven文件夹
tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local/maven
3.配置环境变量
更改profile文件
vim/etc/profile
export MAVEN_HOME=/usr/local/maven/apache-maven-3.5.4
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin
更改完重载这个文件使文件立刻生效,否则重启计算机即可生效。
source/etc/profile
4.验证版本
mvn -v
显示如下则代表成功
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /usr/local/maven/apache-maven-3.5.4
Java version: 1.8.0_212, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_212/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
4)安装jenkins
1.安装
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install -y jenkins
2.关掉防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
3.配置文件
vi /etc/sysconfig/jenkins
#修改下面内容
JENKINS_USER="root"
...
端口设置成为被占用的
JENKINS_PORT="xxxx"
4.启动jenkins
systemctl daemon-reload
systemctl start jenkins
systemctl status jenkins
5)安装git
1.获取源码包
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.18.0.tar.gz
2.git建立时须要的环境
yum groupinstall "Development Tools"
3.安装各类devel包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
openssh-clients
4.编译并安装,同时输出执行路径到环境变量中
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
5.验证能够正常运行:
git --version
五:详尽步骤
1.解锁jenkins
根据提示将代码复制到下边,之后点继续。
2.点击左侧的安装推荐的插件
好吧,等了好几分钟才装完中国linux,耐心等待吧。
3.创建管理员用户,实例配置
注意!安装配置jenkins的时侯,会出现插件安装失败的情况。
缘由:升级站点问题,站点坐落加拿大,访问上去比较费力。
解决方法:更换为国外的jenkins镜像就可以了。
操作:系统管理>>管理插件>>中级
将[升级站点]更换为
随即递交即可解决,如右图。
若果是告诉你须要升级jenkins就能搞定,那就在线升级jenkins。
yum安装的升级方式
1、servicejenkinsstop
2、yumupdatejenkins
3、servicejenkinsstart
升级完就应当没问题了。
4.配置jdk,maven,git
首先我们要配置jenkins编译所须要的jdk,maven,顺便把git也配置了。最后点击保存。
注意:jdkhome和mavenhome可以输入vim/etc/profile看见,直接复制粘贴就行。git的话输入whereisgit就可以查到了,通常是git/bin/git这个结尾的。
5.在jenkins上系统设置gitlab和git
安装Gitlab插件,GitlabHook插件,Git插件。打开设置,选择插件管理。点击可选插件,之后在搜索框里输入就可以了,搜索到后点击直接安装。没搞懂的可以看我第六那种步骤。
安装完以后,点击系统设置。
找到Gitlab这个配置。
那边须要添加账簿,我选用的类型是gitlabAPItoken。
从那里获取呢?打开gitlab,用户设置上面有个访问令牌选项。
成功后会如下显示。之后复制这个令牌,保存在你自己晓得的地方,不保存就之后就看不到了。
接着把刚刚复制的访问令牌粘贴到添加的账簿哪里去,点击添加redhat安装git服务器,之后后面的下拉框里选择你刚刚添加的账簿。
配置完gitlab后要配置git,2个选项一填就可以了,用户名和邮箱。好了,配置结束。
6.在jenkins上创建一个maven项目
点击新建Item,或则开始创建一个新任务,之后选择新建maven项目。好多人说没有,例如右图。
那是由于没有安装一个Maven插件。在可选插件里输入MavenIntegration,点击安装,不好意思我安装的比较快,没来得及截图。早已在我安装列表里了。
返回到主页面,点击新建,任务名子随意起,选择建立一个maven项目,最后点击确定。
7.配置源码管理
这儿我们拿来让jenkins联接gitlab库房的。
首先打开gitlab,新建一个库房。这儿我喜欢叫库房,但它翻译成项目。用过github的同事应当喜欢叫库房吧。随便啦,逼迫症。
写库房名子,设置私有的,描述可写可不写,之后创建。
库房列表中就有了你新建的库房,点击它步入库房。
复制库房url。
注意:一开始这个库房是空的,我那边是刚刚上传了个helloworld的maven项目,拿来测试下git能不能上传代码到这个库房,你们试下,前面jenkins配置须要这库房主分支不能为空。
我是自己windows上安装了git,通过配置idea中的git来push代码,其实也须要生成ssh锁匙在gitlab上添加sshkey。(后面步骤一开始我生成的ssh锁匙是在我安装jenkins的那台服务器A上操作的,和那边的是两码事)。不懂的同学可以百度下window安装git和生成ssh锁匙。
总结下:由于我们平常写代码是在windows下的idea里进行pull和push的,所以那边生成ssh锁匙并配置是为了能让我们在idea上传代码push到服务器B的gitlab里。而后面那种在jenkins服务器上生成ssh锁匙并配置是为了让服务器A能和服务器B的gitlab安全联接,也就是可以pull和push。
切回jenkins,在源码管理里,粘贴url起来,第二个是添加分支,点击添加,类型选择用户名和密码,输入你gitlab用户名和密码。虽然类型可以选择ssh密钥验证,gitlab访问令牌啊哪些的,看你喜欢。
添加完证书后选择证书,假若不报白色的字就说明ok,报的话说明错误。
注意:第三步中,jenkinsjob默认对master分支进行完善,你也可以自定义分支。这要求你的Gitlab代码库房中要存在这个分支,通常来说,就是要向代码库房递交一次修改,请自行完成(Gitlab项目刚创建时是空的,一个分支也没有,这样的话,手动建立时会出错),这也就是前面先试试上传代码到gitlab是否成功的诱因啦。
8.配置完善触发器
如右图所示操作。我选了当一个push到gitlab的时侯才会手动建立,使用钩子webhook,建立URL是jenkins上创建的那种maven项目。记住这个url,旁边会用到!
点击中级,出现右图所示。
生成的口令虽然就是webhook的安全令牌,等会配置gitlab的时侯要用到。
打开gitlab,配置钩子。点击设置,之后集成。把里面记出来的jenkins项目url和webhook安全令牌写进去。
取消掉ssl验证,之后点击addwebhook。
点击test中的第一个选项pushevents模拟push,瞧瞧是否成功。
右图表示成功,假如报错自己上网查下为什么报错,由于局域网的问题,须要在gitlab上登录管理员帐号,配置上面有个选项就是说容许webhook发送本地指令之类的。
9.配置build命令
使用maven命令来打包。
10.PostSteps
暂时不用写,注意下边提及的模块六检验成果中开头提及的东西就行,再依照实际情况来定。
11.建立后操作
我使用的是tomcat热布署。首先要安装Deploytocontainer插件!!!linux 分区,该功能是“将成功编译的War/Jar包布署到远程的应用服务器上。
我们先来配置tomcat远程布署帐号,在tomcat目录下conf文件内tomcat-users.xml文件降低以下配置。
在conf文件中的context.xml里context标签中改成,这个是为了手动删掉之前旧版本的war包。
打开tomcat解压目录找到webapps/manager/META-INF里的context.xml,须要注释掉这个Value节点。
注意:配置完后验证是否生效,启动tomcat后点击ManagerApp。输入里面配置的用户名密码瞧瞧能不能步入。
选择Deploywar/eartoacontainer,操作如下。由于jenkins从git上拉出来代码但是打了war在jenkins的target目录下,所以如右图所示。
好了我们可以开始正片了!
##六:检验成果
注意!!!!!!!!!!!!!!!!!!!:
那边先讲下,我是构建在tomcat早已启动的情况下操作的,所以我没有写那种第10步。
commitpush,手动建立,成功。
成功了。
这么有些人想要在tomcat没有启动的情况下如何办呢?那肯定是要写脚本来启动tomcat。具体看模块七泣血坑!
##七:泣血坑
失败的事例1。
我在建立后操作里使用Deploywar/eartoacontainer,前面的步骤都有显示,也就是tomcat热布署,之后又在PostSteps里写了脚本,就是关掉tomcat和开启tomcat。并且建立会报错。
参考了这篇文章,然而没哪些用,仍然建立报错。报错跟下边链接里的一样,我就不贴下来了。
后来我看了下,tomcat热布署用tomcatmanager原本就有好多漏洞,所以我决定放弃热布署。
失败的事例2。
放弃热布署,改用SendbuildartifactsoverSSH,建立成功,tomcat启动失败,那个我也不晓得如何解决。我看网上是说在执行的脚本上加一句exportBUILD_ID=dontkillme,由于jenkins是会杀掉tomcat进程的。并且还是没用!
成功的反例。
我们须要执行shell脚本,先关掉tomcat,之后启动tomcat。注意,那边tomcat是装在服务器B的,所以先要实现服务器A免登入服务器B。
方式:先在服务器B的/root/.ssh下创建文件authorized_keys,之后把服务器A的生成的ssh私钥(id_rsa.pub)复制到哪个文件上。
注意authorized_keys文件的权限必须是600,假如权限不对会影响登陆。所以最后输入指令:chmod600authorized_keys就可以了。注意空格!
如右图在postSteps中输入shell命令。意思是ssh联接服务器B,执行B服务器(192.168.31.222)上的restart.sh。
#!/bin/bash
echo "执行脚本开始"
TOMCAT_HOME="/root/app/tomcat8.5.42"
ssh root@192.168.31.222 > /dev/null 2>&1 << eeooff
${TOMCAT_HOME}/bin/restart.sh
eeooff
echo done!
echo "执行脚本结束"
右图是restart.sh的脚本内容,这个文件是置于tomcat那台服务器上的,也就是服务器B。
#!/bin/bash
# export BUILD_ID=dontkillme
function shutdown_tomcat () {
#tomcat_id=`jps | grep Bootstrap | awk '{print $1}'`
tomcat_id=`lsof -i:8765 | awk 'NR==2''{print $2}'`
if [ ! $tomcat_id ];then
echo "tomcat process in ${ip} is not exist."
else
echo "shoutdown ${ip} tomcat"
/bin/kill -9 $tomcat_id
fi
}
function start_tomcat () {
echo "start $ip tomcat"
/bin/sh /root/app/tomcat8.5.42/bin/catalina.sh start
/root/app/jdk1.8.0/bin/jps
}
function restart_tomcat () {
shutdown_tomcat
start_tomcat
}
restart_tomcat
echo "脚本执行完毕"
接着须要安装下PublishoverSSH这个插件,之后在全局设置里设置PublishoverSSH,密码是你jenkins所在的服务器生成ssh锁匙时设置的,没有设置就不填,Key里填的是你的公钥。
那边填的是ssh联接的主机IP,名子随意取,帐号名称就写root,路径写/就行,由于这是全局配置,下边每位项目都有路径配置,会重合一起,注意拼接。填完后测试下联接redhat安装git服务器,成功就ok。
接着回到jenkins项目的配置里,找到建立后操作,把上面步骤中配置好的Deploywar/eartoacontainer删除,我们不用tomcat热布署。我们使用SendbuildartifactsoverSSH。配置如下。
这样就可以了,点击保存,之后看下建立疗效吧。脚本执行成功了,这样tomcat开启了。
大功告成。虽然方式有好多种,热布署肯定是行得通的,并且没做下来。感谢你们阅读。有哪些错误帮我强调来,我们一起讨论。