Springboot+Jenkins+gitLab实现代码提交自动打包部署

前言

本人作为一个后端开发对这个没有研究的太深入,只是实现了SpringBoot项目的提交自动打包发布的成功,运维大佬勿喷哈。
过去发布项目
由开发人员自己用开发工具打包成jar包或war包,然后将jar包复制到服务器,war包则用tomcat去发布,jar包则用java -jar xxx.jar的方式去运行
高级的发布项目
开发人员只需要将代码编写好,然后提交代码到远程代码管理仓库即可(码云、github、gitlab),然后Jenkins工具会自动触发编译,打包发布等操作,大大的简化了开发人员的工作,本文主要实现这种方式,该方式针对小型的单体项目还是非常适用的哟
K8S进行项目的管理发布
K8S是目前互联网公司比较流行的一种发布方式,可以解决微服务集群等的发布,开发人员只需要提交代码到仓库就可自动打包成一个个的docker镜像,然后只需要控制运行镜像就可以发布项目,并且可以很好的进行版本回退,但是我作为一个后端开发人员并没有了解到多么深入的地步,毕竟这是运维人员的工作。

一、准备内容

  • 两台Centos7服务器:一台搭建gitlab、一台搭建jenkins服务(可以用虚拟机,也可以用云服务器)
  • maven安装包下载地址:链接:https://pan.baidu.com/s/1hUw_Da-56RTVeUwjYkwLNQ 提取码:8rbn
  • Linux连接工具:Xshell或者SecureCRT都可以的
  • 书写好可成功运行springboot项目,当前我的项目为springboot_demo
    提示:建议工具的安装还是按照我的版本来进行安装哟,因为有的软件版本不一致,可能对应的设置也会有所改动的

二、安装GitLab

本来可以直接用码云的,但是由于我自己没有安装过gitLab所以此次我采用了GitLab,现在一般公司的源码管理都是自己内网搭建的gitLab的,因此自己动手搭建一次还是非常由必要的哟!

1.GitLab简介

GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,
可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。

2.GitLab安装

提示:在我们准备好的第一台服务器上安装GitLab

1. 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfix
2. 启动ssh服务&设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
3. 设置postfix开机自启,并启动,postfix支持gitlab发信功能
systemctl enable postfix && systemctl start postfix
4. 开放ssh以及http服务,然后重新加载防火墙列表
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

如果关闭防火墙就不需要做以上配置

systemctl status firewalld.service  // 查看防火墙状态
systemctl stop firewalld.service	// 关 闭 防 火墙
5. 下载gitlab包,并且安装

下载

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm

安装

rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
6. 修改gitlab配置
vi /etc/gitlab/gitlab.rb

修改如下两个地方

external_url ‘http://您的ip:82’
nginx[‘listen_port’] = 82

7. 重载配置及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
8. 把端口添加到防火墙
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

防火墙如果关闭,请省略,我都是直接关闭了防火墙的

9.登录GitLab

访问地址:http://ip:82
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第1张图片

3.GitLab配置

1. 创建组

使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理
在这里插入图片描述
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第2张图片

1. 创建用户

创建用户的时候,可以选择Regular或Admin类型。
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第3张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第4张图片

3.将用户添加到组中

选择某个用户组,进行Members管理组的成员
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第5张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第6张图片
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限
注意:若要上传项目到git,貌似也需要Owner权限的账号才可以哟

4.在用户组中创建项目

以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目
在这里插入图片描述
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第7张图片

5.上传项目源码到gitLab

此步骤省略,作为一个开发人员,这个肯定会的吧。
参看链接:https://www.cnblogs.com/WangYunShuaiBaoLe/p/WY.html

至此,我们GitLab的配置的完成了,恭喜你完成了四分之一了,没有出错吧。

三、Jenkins安装

Jenkins简介

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
提示:在我们准备的第二太服务器安装Jenkins,因为Jenkins是Java开发所以服务器必须安装jdk8,由于还要进行Maven项目的构建,因此还必须安装Maven

1.安装jdk8

yum install java-1.8.0-openjdk* -y

安装目录为:/usr/lib/jvm
提示:由于centos7自带的有openjdk,检查版本是否满足要求,如果不满足则全部卸载,然后重新安装
centos7卸载openjdk:https://blog.csdn.net/cuomodao4449/article/details/87074372

2.安装Maven

先上传Maven软件到服务器,再进行解压
tar -xzf apache-maven-3.6.2-bin.tar.gz 解压
mkdir -p /opt/maven 创建目录
mv apache-maven-3.6.2/* /opt/maven 移动文件
配置Maven环境变量
vi /etc/profile

配置内容

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk		// jdk路径
export MAVEN_HOME=/opt/maven							// maven路径
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
重新加载配置文件
source /etc/profile
检查是否安装成功
mvn -v

2.安装Jenkins

获取jenkins安装包

下载链接:https://jenkins.io/zh/download/
此处我下载时,最新版本为Jenkins 2.291
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第8张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第9张图片

启动jenkins
systemctl start jenkins
访问jenkins

http://ip:8080
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口

获取并输入admin账户密码
cat /var/lib/jenkins/secrets/initialAdminPassword
跳过插件安装

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第10张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第11张图片

添加一个管理员账户,并进入Jenkins后台

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第12张图片
!](https://img-blog.csdnimg.cn/20210511175119439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpbmdlcmxhbjUxMA==,size_16,color_FFFFFF,t_70)

修改Jenkins插件下载地址

Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins->Manage Jenkins->Manage Plugins,点击Available
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第13张图片
这样做是为了把Jenkins官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址

cd /var/lib/jenkins/updates

替换文件中的下载地址

sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

最后,Manage Plugins点击Advanced,把Update Site改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Sumbit后,在浏览器输入: http://ip:8080/restart ,重启Jenkins

下载Jenkins的相关插件

汉化版插件:
Jenkins->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第14张图片
重启Jenkins后,就看到Jenkins汉化了!(PS:但可能部分菜单汉化会失败)
Maven项目相关插件:
Maven Integration Plugin 或者 Pipeline Maven Integration Plugin

Jenkins配置Maven和jdk

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第15张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第16张图片

添加Jenkins全局变量

Manage Jenkins->Configure System->Global Properties ,添加三个全局变量
JAVA_HOME、M2_HOME、PATH+EXTRA
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第17张图片

修改maven的settings.xml配置文件

创建本地仓库目录

mkdir /opt/maven/repo
vi /opt/maven/conf/settings.xml   

更改内容

// 配置仓库地址
<localRepository>/opt/maven/repo/localRepository>



<mirror>
    <id>alimavenid>
    <mirrorOf>centralmirrorOf>
    <name>aliyun mavenname>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/url>
    <url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror>

四、Jenkins创建Maven项目实现自动打包

Jenkins创建Maven项目

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第18张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第19张图片
注意:如果没有这个选项,说明插件没有安装好,需要重新安装对应的插件Maven Integration Plugin 或者 Pipeline Maven Integration Plugin
进入设置源码管理中选择Git选项:
Repository URL中填写:项目的git地址
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第20张图片
添加凭据:
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第21张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第22张图片
构建环境:
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第23张图片

clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

配置到构建环境的步骤,其实就可以实现Jenkins的手动打包了,只是还没有进行发布而已。

设置Post Steps
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第24张图片

编写Shell脚本内容,不会这个的同学就用我这个,把其中springboot_demo换成你自己的服务名称就OK!

#!/bin/sh
echo "stop springboot_demo.service"   // 打印语句
systemctl stop springboot_demo;       //  停止该项目之前的springboot_demo服务
sleep 10

echo "start springboot_demo.service" // 打印语句
systemctl start springboot_demo;     // 启动springboot_demo服务
sleep 10;
systemctl status springboot_demo;    // 查看springboot_demo服务

下面解释下我的springboot_demo服务是怎么来的呢,启动jar包用java -jar的方式想必大家都熟悉,其实还有一种方式就是将jar包封装成一个服务,通过启动服务的方式来启动这个jar包,Jenkins的自动发布其实就是这样子,编译完成后执行shell脚本,shell脚本里面设置了项目的启动。

如何创建服务:https://blog.csdn.net/lingerlan510/article/details/116696379
如果不知道自己的项目用Jenkins打包后的地址在哪里的话,可以到/var/lib/jenkins/workspace/目录下找对应项目的target文件夹下去寻找jar包,一般情况是在这个地方的,如果不在的话,可进行一次项目构建,然后根据日志文件找到对应的路径,项目构建请参考下文。

Jenkins构建项目发布

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第25张图片
项目构建历史
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第26张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第27张图片
如下图所示,项目能正常访问,则说明已经成功了
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第28张图片

Jenkins实现Git代码提交自动打包发布

之前我们实现了Jenkins对项目的构建和自动发布,但是还是需要我们手动点击构建才可以进行打包发布,下面我们实现更高级一点的,将Git和Jenkins绑定到一起,只要开发人员提交代码到Git环境中,Jenkins就直接自动打包发布。

1.Jenkins中安装Git相关的插件
安装GitLab Plugin和GitLab Hook Plugin两个插件。其中GitLab Hook Plugin插件很久没更新,Jenkins可能会提示风险漏洞,不介意的话忽略就好

2.设置构建触发器
任务的构建触发器选项下,选中Build when a change in pushed to GitLab,把这行中的URL复制下来,后面GitLab配置中会用到。
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第29张图片
3.配置GitLab
进入GitLab后台系统,点击要配置的仓库项目,Settings -> Integrations,链接框中填入上面Jenkins提供的URL,勾选Push events,点击Add webhook
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第30张图片
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第31张图片
4.取消Enable authentication for ‘/project’ end-point复选框
Springboot+Jenkins+gitLab实现代码提交自动打包部署_第32张图片

Springboot+Jenkins+gitLab实现代码提交自动打包部署_第33张图片
至此结束了,期间可能有的地方描述不清楚,毕竟我也是磕磕碰碰的才弄了第一次,再次记录下,万一以后用到了你,你说对不对,希望你们也能成功哟

提供下Jenkins的所有插件的截图,避免大家漏插件,导致有些步骤不对

  • bouncycastle API Plugin
  • Command Agent Launcher Plugin
  • Credentials Binding Plugin
  • Deploy to container Plugin
  • Git Parameter Plug-In
  • Gitlab Hook Plugin添加链接描述
  • GitLab Plugin
  • Localization: Chinese (Simplified)
  • Maven Integration plugin
  • OWASP Markup Formatter Plugin
  • Pipeline Maven Integration Plugin
  • Role-based Authorization Strategy
  • SSH server

五、参考资料

B站视频:https://www.bilibili.com/video/BV1kJ411p7mV?p=13
资料文件:https://pan.baidu.com/s/10C2eh-ymAUb3SYahPIdrvQ 提取码:6civ

如果打包发布的不是jar包,而是war包,那么请参考资料文件,老师讲解的就是发布war包

六、小结

本文内容有点偏长了,感谢观看到这个地方,希望你能通过本文成功的搭建出来,如果搭建过程中出现其余的异常信息,请自行百度哟,我只是把我自己踩的坑避免过去了。我自己也是花费了大半天才搭建成功的,我只是一个后端开发,因此对这个东西我也不会很深入的研究,只会到此地步,至于更高级的打包成Docker镜像和K8S的那种是专业运维的事情了,毕竟个人精力是有限的哟

你可能感兴趣的:(JAVA之运维管理,运维)