Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署

目录

    • 持续集成流程说明:
    • 服务器列表
      • Java环境安装
      • Git工具安装
      • Maven工具安装
        • Maven阿里云加速
      • Tomcat安装
      • GitLab代码管理仓库安装
      • Jenkins自动集成工具安装
  • jenkins+Gitlab+tomcat整合
    • 三台服务器进行ssh免密登录
    • Gitlab创建项目
    • GitLab部署SSH密钥
    • Jenkins创建任务
    • 进入项目中,进行与Jenkins的集成
    • 生成测试项目
    • 验证
  • Jenkins的scp报错
    • 方法一
    • 方法二
    • 验证
  • 自动化部署脚本编写

持续集成流程说明:


  • 1)首先,开发人员每天进行代码提交,提交到Git仓库
  • 2)然后,Jenkins作为持续集成工具,利用webhook插件检测GitLab仓库代码变动,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK、Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。
  • 3)最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问
    Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第1张图片

服务器列表


服务器IP 服务器信息 备注
192.168.1.10 4G内存、可联网 Gitlab、Git、Maven、JDK
192.168.1.20 4G内存、可联网 Jenkins、Git、Maven、JDK
192.168.1.30 4G内存、可联网 Tomcat、JDK

Java环境安装


tar -zxf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201 /usr/local/java
vim /etc/profile
#末尾添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#保存瑞出
source /etc/profile 
java -version #安装成功,jdk版本信息

Git工具安装


yum -y install git

Maven工具安装


tar -zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
#末尾添加
export PATH=$PATH:/usr/local/maven/bin
#保存退出
source /etc/profile
mvn -v #安装成功,maven版本信息

Maven阿里云加速

find / -type f -name settings.xml
vim /usr/local/maven/conf/settings.xml
157     </mirror>
158      -->
159      <mirror>
160        <id>aliyun maven</id>
161        <name>aliyun</name>
162        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
163        <mirrorOf>central</mirrorOf> # 代表本机去中央仓库的请求拦截,让阿里云来处理
164      </mirror>
165    </mirrors>

Tomcat安装


tar -zxf apache-tomcat-8.5.42.tar.gz 
mv apache-tomcat-8.5.42 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
`启动`:/usr/local/tomcat/bin/startup.sh
`停止`:/usr/local/tomcat/bin/shutdown.sh
`查看日志`: tail -f /usr/local/tomcat/logs/catalina.out

GitLab代码管理仓库安装


详细安装步骤链接

Jenkins自动集成工具安装


详细安装步骤链接

jenkins+Gitlab+tomcat整合

三台服务器进行ssh免密登录

192.168.1.10 由于刚才已经与gitlab进行sshd密钥部署,就不重新获取了

ssh-copy-id -i 192.168.1.20
ssh-copy-id -i 192.168.1.30

192.168.1.20

ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.30

192.168.1.30

ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.20

Gitlab创建项目

Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第2张图片

GitLab部署SSH密钥

gitlab服务器获取密钥

ssh-keygen #回车

查看公钥
在这里插入图片描述
进入gitlab页面进行设置密钥
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第3张图片

Jenkins创建任务

记得安装maven插件、gitlab webhook插件
没有maven插件不能创建maven项目
没有gitlab webhook插件,不能检测gitlab仓库代码变动实现自动计划

新建maven项目
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第4张图片
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第5张图片
源码管理
复制GitLab中game-of-life项目的SSH地址
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第6张图片
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第7张图片
报错:无法进行链接
添加凭证
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第8张图片
查看gitlab服务器上的密钥
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第9张图片
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第10张图片
选择刚才创建的凭证
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第11张图片
构建触发器
选择当GitLab的项目中代码变化时,Jenkins进行构建任务

图中的URL是在GitLab的设置中需要使用的
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第12张图片
点击触发器中的“高级”,生成一串token值,用于GitLab与Jenkins集成使用
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第13张图片
Build
执行构建时,对项目进行打包
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第14张图片
Post Steps
当构建运行成功后,将jar包传送到tomcat主机的tomcat网页根目录下自动部署

scp /var/lib/jenkins/workspace/game/gameoflife-web/target/*.war [email protected]:/usr/local/tomcat/webapps/

Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第15张图片
构建后操作
设置过邮箱的话,这里可以设置构建全部结束后,给你发送邮件
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第16张图片
无论最终构建成功/失败/不稳定都将发送邮件
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第17张图片

进入项目中,进行与Jenkins的集成

Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第18张图片
这里的URL和token值就是在Jenkins的任务配置时,构建触发器
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第19张图片
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第20张图片
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第21张图片

生成测试项目

gitlab服务器拖入项目包,进行上传代码
上传代码成功后,jenkins自动化任务就会进行执行

[root@localhost ~]# tar -zxf game-of-lift.tar.gz 
[root@localhost ~]# cd game-of-life/
[root@localhost game-of-life]# git init
重新初始化现存的 Git 版本库于 /root/game-of-life/.git/
[root@localhost game-of-life]# git add .
[root@localhost game-of-life]# git config --global user.email "[email protected]"
[root@localhost game-of-life]# git config --global user.name "zidingyi"
[root@localhost game-of-life]# git commit -m "game"
# 位于分支 master
无文件要提交,干净的工作区
[root@localhost game-of-life]# git remote add game [email protected]:root/game.git
[root@localhost game-of-life]# git push -u game master
Counting objects: 7496, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2292/2292), done.
Writing objects: 100% (7496/7496), 17.34 MiB | 24.45 MiB/s, done.
Total 7496 (delta 4659), reused 7496 (delta 4659)
remote: Resolving deltas: 100% (4659/4659), done.
To [email protected]:root/game.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 game 的远程分支 master。

验证

这个时候Tomcat的webapps目录下已经有了项目的war包并且已经编译解压好了

[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war

可以直接访问http://192.168.1.30:8080/gameoflife

Jenkins的scp报错

方法一

登录到Jenkins查看终端输出是否成功
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第22张图片
报错:主机密钥验证失败,使用scp命令也执行失败,这是因为Jenkins页面执行的命令是通过jenkins用户来执行的,所以免密登录应该给jenkins来做

解决Jenkins的scp问题,安装Jenkins会默认创建jenkins用户,现在切换到jenkins用户

[root@jenkins ~]# su jenkins
[root@jenkins ~]#

发现用户并没有变,也没有报错

查看jenkins的运行环境,cat /etc/passwd | grep jenkins,它的运行环境默认是/bin/false

jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/false

将环境改为bash

现在切换jenkins

[root@jenkins ~]# su jenkins
bash-4.2$

出现bash-4.2$因为这个用户没有home目录

vim /root/.bash_profile
# 最后一行添加
export PS1='[\u@\h \W]\$ ' 
# 这个就是普通用户登录后的命令行提示符[root@jenkins~]#

source /root/.bash_profile

设置jenkins不使用密码

visudo
# 在最后一行添加
jenkins ALL=(ALL)NOPASSWD: ALL

生成jenkins的密钥对

[root@jenkins~]#su jenkins
[jenkins@jenkinsroot]$ssh-keygen
[jenkins@jenkinsroot]$ssh-copy-id -i [email protected]

方法二

使用root运行

vim /etc/sysconfig/jenkins
# 修改jenkins用户
JENKINS_USER="jenkins"   # 修改为root

验证

在GitLab上模拟代码变化
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第23张图片
这个时候就可以scp成功了
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第24张图片
这个时候Tomcat的webapps目录下已经有了项目的war包并且已经编译解压好了

[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war

可以直接访问http://192.168.1.30:8080/gameoflife

自动化部署脚本编写

Jenkins

vim /tmp/autoscp.sh
# 添加
#!/bin/bash
WARFILE=/var/lib/jenkins/workspace/game/gameoflife-web/target/gameoflife.war
scp $WARFILE [email protected]:/tmp
ssh [email protected] /tmp/deploy.sh

chmod +x /tmp/autoscp.sh

Tomcat

vim /tmp/deploy.sh
# 添加
#!/bin/bash
DAY=/backup/$(date +%Y%m%d)
HOUR=$DAY/$(date +%H%M%S)
APPBASE=/usr/local/tomcat/webapps/gameoflife
WAR=/tmp/gameoflife.war
[ -d /backup ] || mkdir /backup
[ -d $DAY ] || mkdir $DAY
if [ -d $APPBASE ]
  then 
      mkdir $HOUR
      mv $APPBASE/* $HOUR
fi
unzip $WAR -d $APPBASE

chmod +x /tmp/deploy.sh

将Jenkins中项目的构建时执行的shell部分改为执行脚本
Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署_第25张图片
这个时候Tomcat的tmp目录下已经有了项目的war包

ls /tmp/*.war
tmp/gameoflife.war

并且也已经解压完成根据脚本的操作自动部署到了Tomcat主机

访问http://192.168.1.30:8080/gameoflife

你可能感兴趣的:(架构,自动化持续集成)