从前三篇文章中,我们已经实现了gitlab、jenkins项目的安装与基础配置,并且给Centos7操作系统搭配了jdk、maven等环境变量。从这边文章起,“从零实现DevOps”系列,将正式开始利用Jenkins+Gitlab的完美结合,一步步实现全栈项目的持续集成和持续部署(CI/CD),以后也会引入Docker+Dockerfile+docker-compose的方式去实现快速部署。那么,第一篇文章先传统的SpringBoot项目开刀,在Jenkins本地环境中用jar包的方式简单实现一下,开始吧!!!
一、Jenkins插件和全局环境配置
1、Jenkins设置中文(部分版本不生效,跳过此步骤也可以)
-
点击Jenkins首页中的Manage Jenkins,进入系统设置
-
点击Plugins,进入插件中心
-
选择Available Plugins,搜索Locale,勾选后,点击Install without restart(安装无需重启)
-
等待安装完毕后返回首页
-
再次点击Manage Jenkins,点击System,进入系统配置
-
往下拉,找到Locale,输入框中输入“zh_CN”,勾选下边的按钮(忽略浏览器首选项并向所有用户强制使用此语言),点击保存返回首页
-
地址栏后边加上“/restart”后刷新网址,重启Jenkins
-
等待重启后成功
2、Jenkins安装Maven、GitLab等插件
- 与安装中文插件同理,依次搜索安装Maven和GitLab插件
- 为了万无一失,全部安装后,再次重启一下Jenkins
3、配置GitLab系统凭据
可能是因为版本问题,我点击系统级的Credentials时,并没有添加凭据的地方,所以,我选择在添加Gitlab地址的地方添加令牌
- 点击Manage Jenkins,点击System,进入系统配置
- 往下拉,找到GitLab,其他不需要填写,点击添加,再点击弹出的Jenkins图标 ,进行配置凭据
- 配置Credentials(ID和描述可填可不填,知道即可),点击添加即可,返回首页(弹框点击是)
Username with password
最简单的凭证类型,字面理解即可掌握精髓,就是保存用户名和密码。
- 返回首页,在系统的Credentials中,查看配置的凭据
- 标红框的就是你刚才添加的凭据,还可以点进去进行修改账号密码操作
点击Change Password可以修改密码
4、配置Maven环境变量
- 点击Manage Jenkins,点击Tools(有些版本的jenkins也叫Global Config),进入工具配置
- 往下拉找到Maven,点击新增Maven
- 取消勾选Install automatically,用我们自己的Maven版本
- 新增Maven内容,Name随便取,MAVEN_HOME用的是自己配置的maven路径(mvn -v)
点击保存返回首页!!!
二、创建并配置Jenkin流水线(重点来了)
1、创建Job
- 点击左侧新建Item或Create a job,创建一个流水线
- 输入任务名称,选择第一个“Freestype project”,点击确定即可
2、源码管理(配置Gitlab地址和分支)
-
进入Gitlab,找到自己的项目,复制你的项目git地址
-
配置页面,往下拉,找到源码管理,将git地址复制进Repository URL,并选择Credentials(在一.3中配置的,也可以在这里添加并选择)
-
文中提示报错“Failed to connect to repository : Error performing git command: git ls-remote -h http://192.168.1.11/root/test_project.git HEAD”,是因为服务器未安装git导致,yum安装一下
yum install git
4. 安装成功后,再次把git地址粘贴进Repository URL,就不会出现刚才的错误了
5. 继续往下拉,在“指定分支”处,配置你想要自动部署的分支
觉得手欠的可以先应用一下,再继续进行,防止误关闭页面!!!
3、构建触发器(配置GitLab的Webhooks)
- 继续往下拉页面,找到“构建触发器”,勾选“Build when a change is pushed to GitLab”
触发策略由自己决定
- Push Events:提交Push代码触发
- Opened Merge Request Events:合并分支触发
-
配置GitLab的Webhooks,搭建钩子,触发部署事件(重中之重)
-
打开Gitlab需要部署的项目,左侧点击设置,然后点击Webhooks
-
Webhooks中:URL是“Build when a change is pushed to GitLab”后边的那个地址,粘贴进去
-
回到jenkins,往下拉,点击高级,找到“Secret token”,点击“Generate”,生成令牌,并把这个令牌粘贴进Gitlab-Webhooks的“Secret 令牌”中
-
在Webhoos配置中,勾选推送事件和合并请求事件,并点击“添加webhooks”
推送事件中,你可以配置所有分支或者指定的分支,一般来说,部署哪个分支选择哪个即可
所以,我选择的“通配符样式”,并指定的“dev”分支(dev)
-
点击保存时,Gitlab有可能会报错“Url is blocked: Requests to the local network are not allowed”,这是因为你没有开启Webhooks的出站请求!
解决方法:
(1)进入管理员设置
(2)点击设置,进入网络设置
(3)找到出站请求,点击展开,勾选“允许来自 webhooks 和集成对本地网络的请求”,保存更改即可
(4)重新配置webhook,即可成功。成功效果如图:
再次提醒,Jenkins最好点击一次应用,防止丢失!!!
小贴士:
其实,在此步骤完成后,你可以将jenkins保存一下,回到首页。并且在刚才配置的Gitlab-webhooks中,点击测试的推送事件,尝试一下,项目能不能成功打包!!!
回到Jenkins,可以发现已经成功构建一次
然后去你服务器的“/root/.jenkins/workspace”中,去看看有没有项目代码,target文件夹中有没有jar包~~~
可以发现,我的Gitlab项目已经上传成功,并且打包成功!!!
如果你有兴趣,也可以看看构建的控制台输出,里边也有打包的输入内容,神奇吧~~~
4、构建环境(Build)
勾选“Add timestamps to the Console Output”,方便打印控制台日志!!!
5、Build Steps(Maven打包项目)
-
点击增加构建步骤,选择“Invoke top-level Maven targets”
-
Maven版本选择在一、4中配置的maven版本,“目标”是我们打包命令
clean package -Dmaven.test.skip=true -U
6、增加构建步骤(杀死已有进程+启动jar包)
- 编写jar包启动脚本
cd /data/java
touch start.sh
vim start.sh
脚本内容如下,需要根据个人情况改三个地方
第4行:Java环境变量配置位置(一般是:source /etc/profile)
第6行:jar包位置
第8行:jar包名称
#!/bin/bash
#cp /dev/null /nohup.out
# 重新加载环境变量
source ~/.bash_profile
# 跳转到Jar地址
cd /data/java
# 设置Jar包名称变量
APP_NAME=jimapaotui-2.0.jar
# 杀死原有进程号
ID=`ps -ef | grep $APP_NAME | awk '{print $2}'`
echo "------start---------"
for id in $ID
do
kill -9 $id
echo "killed $id"
done
# 防止杀死进程
BUILD_ID=dontKillMe
# 启动Jar包
nohup java -jar $APP_NAME > nohup.out 2>&1 &
echo "------end---------"
为start.sh增加执行权限
sudo chmod +x start.sh
- 点击“增加构建步骤”。选择”Execute shell”,并添加如下的命令
#!/bin/bash
# 复制jar包到脚本中指定的位置
cp ./target/jimapaotui-2.0.jar /data/java
# 执行启动脚本
sh /data/java/start.sh
如图:
至此,流水线配置已全部完毕,接下来,进行测试流程!!!
四、测试功能
从刚才指定的dev分支提交一次代码
Jenkin已经开始构建了
构建成功
去服务器上看看jar包是否上传,是否执行成功
cd /data/java
ps -ef | grep **.jar
五、总结
至此,Jenkins结合GitLab实现本地代码自动化部署的功能已经实现,下一期我们会实现远程服务器部署Jar包项目的实例!!!
所有你想象的一切,皆是现实!!!