首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins+Gitlab+Maven+Tomcat实现自动集成、打包、部署

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

作者头像
互联网-小阿宇
发布2022-11-21 20:07:17
7800
发布2022-11-21 20:07:17
举报
文章被收录于专栏:互联网-小阿宇互联网-小阿宇

持续集成流程说明:

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

服务器列表

服务器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创建项目

在这里插入图片描述
在这里插入图片描述

GitLab部署SSH密钥

gitlab服务器获取密钥

ssh-keygen #回车

查看公钥

在这里插入图片描述
在这里插入图片描述

进入gitlab页面进行设置密钥

在这里插入图片描述
在这里插入图片描述

Jenkins创建任务

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

新建maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源码管理 复制GitLab中game-of-life项目的SSH地址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

报错:无法进行链接 添加凭证

在这里插入图片描述
在这里插入图片描述

查看gitlab服务器上的密钥

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择刚才创建的凭证

在这里插入图片描述
在这里插入图片描述

构建触发器 选择当GitLab的项目中代码变化时,Jenkins进行构建任务

图中的URL是在GitLab的设置中需要使用的

在这里插入图片描述
在这里插入图片描述

点击触发器中的“高级”,生成一串token值,用于GitLab与Jenkins集成使用

在这里插入图片描述
在这里插入图片描述

Build 执行构建时,对项目进行打包

在这里插入图片描述
在这里插入图片描述

Post Steps 当构建运行成功后,将jar包传送到tomcat主机的tomcat网页根目录下自动部署

scp /var/lib/jenkins/workspace/game/gameoflife-web/target/*.war root@192.168.1.30:/usr/local/tomcat/webapps/

在这里插入图片描述
在这里插入图片描述

构建后操作 设置过邮箱的话,这里可以设置构建全部结束后,给你发送邮件

在这里插入图片描述
在这里插入图片描述

无论最终构建成功/失败/不稳定都将发送邮件

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

这里的URL和token值就是在Jenkins的任务配置时,构建触发器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

生成测试项目

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 "zidingyi@gmail.com"
[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 git@192.168.1.10: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 git@192.168.1.10: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查看终端输出是否成功

在这里插入图片描述
在这里插入图片描述

报错:主机密钥验证失败,使用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 root@192.168.1.30

方法二

使用root运行

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

验证

在GitLab上模拟代码变化

在这里插入图片描述
在这里插入图片描述

这个时候就可以scp成功了

在这里插入图片描述
在这里插入图片描述

这个时候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 root@192.168.1.30:/tmp
ssh root@192.168.1.30 /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部分改为执行脚本

在这里插入图片描述
在这里插入图片描述

这个时候Tomcat的tmp目录下已经有了项目的war包

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

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

访问http://192.168.1.30:8080/gameoflife

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 持续集成流程说明:
  • 服务器列表
    • Java环境安装
      • Git工具安装
        • Maven工具安装
          • Tomcat安装
            • GitLab代码管理仓库安装
              • Jenkins自动集成工具安装
              • jenkins+Gitlab+tomcat整合
                • 三台服务器进行ssh免密登录
                  • Gitlab创建项目
                    • GitLab部署SSH密钥
                      • Jenkins创建任务
                        • 进入项目中,进行与Jenkins的集成
                          • 生成测试项目
                            • 验证
                            • Jenkins的scp报错
                              • 方法一
                                • 方法二
                                  • 验证
                                  • 自动化部署脚本编写
                                  相关产品与服务
                                  持续集成
                                  CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档