本人作为一个后端开发对这个没有研究的太深入,只是实现了SpringBoot项目的提交自动打包发布的成功,运维大佬勿喷哈。
过去发布项目
由开发人员自己用开发工具打包成jar包或war包,然后将jar包复制到服务器,war包则用tomcat去发布,jar包则用java -jar xxx.jar的方式去运行
高级的发布项目
开发人员只需要将代码编写好,然后提交代码到远程代码管理仓库即可(码云、github、gitlab),然后Jenkins工具会自动触发编译,打包发布等操作,大大的简化了开发人员的工作,本文主要实现这种方式,该方式针对小型的单体项目还是非常适用的哟
K8S进行项目的管理发布
K8S是目前互联网公司比较流行的一种发布方式,可以解决微服务集群等的发布,开发人员只需要提交代码到仓库就可自动打包成一个个的docker镜像,然后只需要控制运行镜像就可以发布项目,并且可以很好的进行版本回退,但是我作为一个后端开发人员并没有了解到多么深入的地步,毕竟这是运维人员的工作。
本来可以直接用码云的,但是由于我自己没有安装过gitLab所以此次我采用了GitLab,现在一般公司的源码管理都是自己内网搭建的gitLab的,因此自己动手搭建一次还是非常由必要的哟!
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(基于MIT协议),与Github类似,
可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
提示:在我们准备好的第一台服务器上安装GitLab
yum -y install policycoreutils openssh-server openssh-clients postfix
systemctl enable sshd && sudo systemctl start sshd
systemctl enable postfix && systemctl start postfix
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
如果关闭防火墙就不需要做以上配置
systemctl status firewalld.service // 查看防火墙状态
systemctl stop firewalld.service // 关 闭 防 火墙
下载
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
vi /etc/gitlab/gitlab.rb
修改如下两个地方
external_url ‘http://您的ip:82’
nginx[‘listen_port’] = 82
gitlab-ctl reconfigure
gitlab-ctl restart
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
防火墙如果关闭,请省略,我都是直接关闭了防火墙的
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理
选择某个用户组,进行Members管理组的成员
Gitlab用户在组里面有5种不同权限:
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限
Maintainer:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个
权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限
注意:若要上传项目到git,貌似也需要Owner权限的账号才可以哟
以刚才创建的新用户身份登录到Gitlab,然后在用户组中创建新的项目
此步骤省略,作为一个开发人员,这个肯定会的吧。
参看链接:https://www.cnblogs.com/WangYunShuaiBaoLe/p/WY.html
至此,我们GitLab的配置的完成了,恭喜你完成了四分之一了,没有出错吧。
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。
提示:在我们准备的第二太服务器安装Jenkins,因为Jenkins是Java开发所以服务器必须安装jdk8,由于还要进行Maven项目的构建,因此还必须安装Maven
yum install java-1.8.0-openjdk* -y
安装目录为:/usr/lib/jvm
提示:由于centos7自带的有openjdk,检查版本是否满足要求,如果不满足则全部卸载,然后重新安装
centos7卸载openjdk:https://blog.csdn.net/cuomodao4449/article/details/87074372
tar -xzf apache-maven-3.6.2-bin.tar.gz 解压
mkdir -p /opt/maven 创建目录
mv apache-maven-3.6.2/* /opt/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
下载链接:https://jenkins.io/zh/download/
此处我下载时,最新版本为Jenkins 2.291
systemctl start jenkins
http://ip:8080
注意:本服务器把防火墙关闭了,如果开启防火墙,需要在防火墙添加端口
cat /var/lib/jenkins/secrets/initialAdminPassword
!](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->Manage Jenkins->Manage Plugins,点击Available
这样做是为了把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->Manage Jenkins->Manage Plugins,点击Available,搜索"Chinese"
重启Jenkins后,就看到Jenkins汉化了!(PS:但可能部分菜单汉化会失败)
Maven项目相关插件:
Maven Integration Plugin 或者 Pipeline Maven Integration Plugin
Manage Jenkins->Configure System->Global Properties ,添加三个全局变量
JAVA_HOME、M2_HOME、PATH+EXTRA
创建本地仓库目录
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>
注意:如果没有这个选项,说明插件没有安装好,需要重新安装对应的插件Maven Integration Plugin 或者 Pipeline Maven Integration Plugin
进入设置源码管理中选择Git选项:
Repository URL中填写:项目的git地址
添加凭据:
构建环境:
clean package -Dmaven.test.skip=true -Dmaven.javadoc.skip=true
配置到构建环境的步骤,其实就可以实现Jenkins的手动打包了,只是还没有进行发布而已。
编写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对项目的构建和自动发布,但是还是需要我们手动点击构建才可以进行打包发布,下面我们实现更高级一点的,将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配置中会用到。
3.配置GitLab
进入GitLab后台系统,点击要配置的仓库项目,Settings -> Integrations,链接框中填入上面Jenkins提供的URL,勾选Push events,点击Add webhook
4.取消Enable authentication for ‘/project’ end-point复选框
至此结束了,期间可能有的地方描述不清楚,毕竟我也是磕磕碰碰的才弄了第一次,再次记录下,万一以后用到了你,你说对不对,希望你们也能成功哟
提供下Jenkins的所有插件的截图,避免大家漏插件,导致有些步骤不对
B站视频:https://www.bilibili.com/video/BV1kJ411p7mV?p=13
资料文件:https://pan.baidu.com/s/10C2eh-ymAUb3SYahPIdrvQ 提取码:6civ
如果打包发布的不是jar包,而是war包,那么请参考资料文件,老师讲解的就是发布war包
本文内容有点偏长了,感谢观看到这个地方,希望你能通过本文成功的搭建出来,如果搭建过程中出现其余的异常信息,请自行百度哟,我只是把我自己踩的坑避免过去了。我自己也是花费了大半天才搭建成功的,我只是一个后端开发,因此对这个东西我也不会很深入的研究,只会到此地步,至于更高级的打包成Docker镜像和K8S的那种是专业运维的事情了,毕竟个人精力是有限的哟