花粉乐分享平台宣传视频
> 华为资讯 > 华为资讯 > 华为云 > 都2022年了,不会还有人不会自动化部署吧
都2022年了,不会还有人不会自动化部署吧
来源:Java高级新手
2023-03-09 11:09:51
643
管理
前言

之前部署项目的时候都是手动的打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就是社区版了。

然后试一下在gitlab-runner用户下能否登录到Web服务器中,可以登录就说明没问题,如果不行再回头看看哪步出错了。

然后将其配置到GitLab中:

到此,所有的准备工作就做好啦!

编写自动化脚本

然后随便在GitLab中创建一个项目,在项目的根目录下添加gitlab-ci.yml文件,然后在里面编写脚本。

# 变量variables: # 项目存放目录,要先创建 project_path: "/root/CICD_Project" # 项目部署的服务器ip deploy_ip: "182.XX.XX.XX"# 阶段stages: # develop分支构建阶段 - my_develop # main分支构建阶段 - my_mainbefore_script: - echo "======== before script ========"after_script: - echo "======== after script ========" # 删除.git目录,否则下次构建时可能会报错 - rm -rf .git# jobmy_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/

花粉社群VIP加油站

1
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与花粉乐分享无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
凡本网注明 “来源:XXX(非花粉乐分享)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。
如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。
QQ:2443165046 邮箱:info@hflfx.com
关于作者
哇哈哈(采蜜高手)
文章
497
主题
0
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行
随手拍
54个圈友 0个话题
华为手机随手拍,记录生活点滴之美好
华为P30pro
51个圈友 0个话题
这里是华为P30pro手机交流圈,欢迎华为P30pro用户进群交流
体验官
60个圈友 2个话题
华为花粉体验官,体验官专属的交流群
登录后查看您创建的圈子
登录后查看您创建的圈子
所有圈子
杭州互联网违法和不良信息举报平台 网络110报警服务 浙ICP备17046585号
1
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索