我正在参与「启航计划」
本文已录入至我的Github库房DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star
⭐⭐⭐⭐⭐
转载请注明出处:
blog.csdn.net/weixin_4346…
前言
之前布置项目的时分都是手动的打jar包,然后将jar包上传到服务器运转,非常麻烦。上个月去其他公司待了一段时间,发现了主动化布置这么一个好东西,只需本地一提交代码,就会主动打包发布到指定的服务器上,免去了手动布置的麻烦。之前手头上只要一台阿里云,也就没搞了,正好这几天华为云有活动,近乎白嫖了两台服务器,所以正好能够试试主动化布置。
准备工作
流程介绍
主动化布置的工具有很多,我一开始是计划折腾一下Jenkins的,不过没搞起来。然后就选择运用GitLab,因为GitLab就自带了CICD的功用。
布置项目无非便是打成jar包,将jar包放到Web服务器中,再将jar包运转起来,过程都是固定的,只不过之前每次都是咱们手动操作罢了。而主动化布置的原理其实便是咱们先用脚本将布置的过程写好,然后在特定的时分主动履行这些脚本。那么怎样在提交代码的时分履行指定的脚本了,这就要凭借CICD工具和github-runner了。
咱们将脚本写好,若干过程加在一起就称作为一个job,而gitlab-runner便是履行job的东西。在job中就指定好了要用哪个gitlab-runner来运转,这样GitLab服务器在咱们提交代码时将代码再发送到指定的gitlab-runner中,再由其履行打包、运转的指令就OK了。
装置GitLab
怎样装置GitLab能够参阅这篇教程:
support.huaweicloud.com/bestpractic…
教程中是基于CentOS7.2的,我用的CentOS7.9也是能够的。不过自己折腾着玩的小伙伴能够装社区版,我一开始装的企业版,用起来卡卡的,常常加载不出来,换了社区版就好了。装置时只需把教程中的ee换成ce便是社区版了。
而CICD是GitLab内置的功用,所以就不用额定装置了。
在Web服务器上装置和注册gitlab-runner
gitlab-runner是用来运转主动化使命的。装置很简单,就下面两个指令:
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
yum install gitlab-runner
装置完成后就需求将gitlab-runner的信息注册到GitLab中,否则GitLab怎样知道gitlab-runner的地址呢。
在此之前,要先用管理员账号登录到GitLab中,然后在设置中找到Runner
选项,点击页面中的注册一个实例Runner
,就会呈现Token,把这个Token仿制下来。
然后回到Web服务器中,运转注册指令:
gitlab-runner register
然后页面中就会呈现一些需求填写的信息:
这样就注册好了,回到GitLab的页面中,就能够看到这个gitlab-runner已经注册成功了。
Maven和JDK
因为现在编译和运转都是在Web服务器上,所以自然要在Web服务器中装置Maven和JDK,至于这两货怎样装置我就不多说了,搞Java的这个应该是根本操作吧。
不过这儿要注意一点,便是Maven和JDK的环境变量不仅要在/etc/profile
中装备一份,还要在/root/.bash_profile
中也装备一份。否则脚本运转的时分或许会报**“command not found: mvn”**等过错。
装备免密登录
前面说过。提交代码时,CICD将代码发送到gitlab-runner中。而Maven和JDK都是装置在Web服务器中的,所以咱们需求在gitlab-runner中去操作Web服务器。尽管gitlab-runner是装置在Web服务器中的,可是它俩的关系能够理解成是宿主机和虚拟机,gitlab-runner经过ssh连接到Web服务器中进行操作,为了便利,需求装备免密登录。
# 切到gitlab-runner账号
su - gitlab-runner
# 创立秘钥对
ssh-keygen
# 仿制秘钥对到Web服务器中
ssh-copy-id root@182.XX.XX.XX
然后试一下在gitlab-runner用户下能否登录到Web服务器中,能够登录就阐明没问题,假如不行再回头看看哪步出错了。
然后还需求将公钥存入到GitLab服务器中,默认的存储路径是:/home/gitlab-runner/.ssh/id_rsa.pub
翻开该文件,并仿制其内容
然后将其装备到GitLab中:
到此,一切的准备工作就做好啦!
编写主动化脚本
然后随便在GitLab中创立一个项目,在项目的根目录下增加gitlab-ci.yml
文件,然后在里面编写脚本。
# 变量
variables:
# 项目存放目录,要先创立
project_path: "/root/CICD_Project"
# 项目布置的服务器ip
deploy_ip: "182.XX.XX.XX"
# 阶段
stages:
# develop分支构建阶段
- my_develop
# main分支构建阶段
- my_main
before_script:
- echo "======== before script ========"
after_script:
- echo "======== after script ========"
# 删去.git目录,否则下次构建时或许会报错
- rm -rf .git
# job
my_develop_build:
only:
refs:
# 仅限develop分支改动时触发该job
- develop
# runner的标签,指定用哪个runner去运转job
tags:
- aliyun-runner-1
# 该使命是哪个阶段
stage: my_develop
# 脚本
script:
# 删去旧项目文件
- ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && rm -rf ./*"
# 把提交的最新代码仿制到指定的项目目录下
- scp -r -o StrictHostKeychecking=no ./* root@${deploy_ip}:${project_path}
# 编译项目
- ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && source /root/.bash_profile && mvn package"
# 运转项目
- ssh -o StrictHostKeychecking=no root@${deploy_ip} "cd ${project_path} && chmod +x run.sh && ./run.sh"
my_main_build:
only:
refs:
- main
tags:
- huawei1month
stage: my_main
script:
- echo "main-------------------------------------"
我这儿定义了两个Job,两个Job别离对应两个阶段,然后别离在不同的分支提交时履行,当然你也能够依据你的需求装备一次履行多个阶段等。
然后script里便是详细要履行的脚本了。每个指令前面的“ssh -o StrictHostKeychecking=no root@${deploy_ip}”
是固定写法,用于免密登录到Web服务器中,后面引号内的便是详细的指令了,和咱们在终端里写的是相同的。
做的事情很简单,无非便是打包运转罢了,运转的脚本我又独自写到run.sh文件中了。
# 切换到项目目录下
cd /root/CICD_Project/target
# 杀死之前的项目进程。这儿的cut -c9-14是截取进程id,不一定都是-c9-14
# 能够先运转ps -ef|grep java|grep CICD_Project-0.0.1-SNAPSHOT.jar看一下进程id是第几位到第几位
ps -ef|grep java|grep CICD_Project-0.0.1-SNAPSHOT.jar|cut -c9-14|xargs kill -9
# 停5秒
sleep 5s
# 使环境变量生效
source /root/.bash_profile
# 运转项目
nohup java -jar CICD_Project-0.0.1-SNAPSHOT.jar >/root/cicd.log 2>&1 &
这儿值得注意的便是2>&1
。它的作用便是不在控制台输出日志,一定要加上,否则到时分运转job时就会一向输出在输出日志而导致job一向处于运转中而不结束。
然后提交代码后就会主动进行编译并发布到Web服务器中了,因为这台服务器是第一次运转,所以下载所需Maven依靠的时间长了点。
我这儿写了一个测试接口:
@RestController
@RequestMapping("/1")
public class DemoController {
@GetMapping("/1")
public String test() {
String a = "欢迎重视我的微信公众号:Robod";
System.out.println(a);
return a;
}
}
拜访一下,成功显示了,阐明代码布置的没有问题:
再修正一下代码,从头提交一下,修正的代码很快就编译好了并发布到了Web服务器中了。
怎样样,这样是不是很便利呢。省下的时间又能够摸鱼了。
当然,GitLab CICD的用法远不止这些。我仅仅按照我的运用方法简单介绍了一下,更加详细的用法能够去查阅官方文档:docs.gitlab.cn/jh/ci/
⭐⭐⭐⭐⭐转载请注明出处:blog.csdn.net/weixin_4346…
本文已录入至我的Github库房DayDayUP:github.com/RobodLee/Da…,欢迎Star
假如您觉得文章还不错,请给我来个
点赞
,保藏
,重视
学习更多编程常识,欢迎重视微信公众号『 R o b o d 』: