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

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

持续集成流程说明:


  • 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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101758.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 基于Android点餐APP系统的设计与实现[通俗易懂]

    基于Android点餐APP系统的设计与实现[通俗易懂]假如您对此内容感兴趣,你可以加QQ群:868378707(毕业设计online);搜索微信小程序“毕设编程Online”,免费获取源码;基于Android的点餐系统由服务器端和安卓客户端两部分组成。服务器端供餐厅工作人员使用,主要实现菜品信息管理;安卓客户端由餐厅客户使用,主要实现浏览菜品,点餐等功能。主要内容如下:服务器端:1:用户登录:用户在使用系统前先进行登录功能。2:菜品信息管理:包括菜品名称,菜品类别,菜品价格,菜品图片,菜品介绍,菜品发布等信息等增删改查功能3:…

  • 数据结构项目——单向链表[通俗易懂]

    数据结构项目——单向链表[通俗易懂]使用单向链表(增加,删除,查询,修改)代码如下:#include “pch.h”#include<string>#include <iostream>using namespace std;struct LNode{ int data;// 数据域 LNode *next; // 指针域};//新建链表void NewList(LNode *…

  • PDAF原理_pfc作用

    PDAF原理_pfc作用PDAF原理:参考链接:https://www.cnblogs.com/sunny-li/p/9131017.htmlPDAF今天来讲一讲PDAF(相位对焦)的基本原理。在自动对焦的时候总是有一个困惑,知道图像是不清楚的,但是lens应该向前还是向后移动呢?总是要前后移动lens一下才知道,普通的反差法对焦就是这么做的,爬山嘛。PDAF的出现就是为了解决这个lens移动的问题…

  • break能不能跳出if语句_python while if

    break能不能跳出if语句_python while if广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!虽然在python中的for循环与其它语言不大一样,但跳出循环还是与大多数语言一样,可以使用关键字continue跳出本次循环或者break跳出整个for循环。breakforxinrange(10):ifx==5:breakprintx上面使用的break循环,所以执行到x==5…

  • phpstorm 左边的文件列表没用了 怎么弄出来

    phpstorm 左边的文件列表没用了 怎么弄出来

  • PHPstrom 2021.2激活码破解方法[通俗易懂]

    PHPstrom 2021.2激活码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号