自动构建,自动上传,自动部署,持续集成

620 阅读6分钟

由于某种原因,国内无法访问GitHub,所以我的大部分代码都放在Gitee上.

今天一不小心看到了Gitee Go 2.0这个东西,持续集成这几个字一下子就吸引了我.

Gitee GoGitee全新推出的一款CICD工具,可提供持续集成、持续交付(部署)能力,帮助企业不断提升应用交付的质量和效率。通过构建自动化、测试自动化、部署自动化,完成从代码提交到应用交付的自动化。通过交付流程度量,发现效率问题,并推荐优化方案。

众所周知,个人发布代码是一件比较麻烦的事.

如果是公司,可以单独搞一台服务器安装Jenkins或者Bamboo作为发布机.

而个人可能没那么多服务器,而且自己的服务器配置本来也低,如果安装了Jenkins或者Bamboo肯定卡的要死.

所以一个可以一键部署,自动发布的CICD工具还是很有诱惑力.

之前我自己用的是Shell脚本或者Python脚本来进行发布.

虽然也挺简单的,执行一下命令就好,可是要做很多准备工作,要安装配置Maven或者Gradle 环境,如果用Python,还要安装Python环境,还有Git的证书,这样拉代码的时候就不用密码了.

反正就是麻烦.

今天看到了这个Gitee Go,就来试一下吧.

开通 Gitee Go

首先要开通Gitee Go流水线.个人每月有1000分钟免费构建时长,单个代码仓库均可直接获得200分钟免费构建时长,一共1200分钟.

7.jpg

然后会问你,是否自动创建流水线,然后提交相关的yml文件,可以选择创建,也可以不创建,后面自己设置流水线,我这里就不创建了.

8.jpg

接下来就可以自己创建流水线了.

9.jpg

新建流水线

就按照下面的步骤搞就行,如果熟悉yml语法,也可以切换代码视图,不过有一说一,他这个yml搞得有点麻烦.

10.jpg

基本信息不用修改.

11.jpg

事件监听这里可以设置:

  1. 分支匹配: 当push到指定分支后,自动构建发布
  2. Tag匹配: 当Tag中有指定关键字时,进行自动构建发布,可以使用前缀,正则,精确等匹配方式
  3. 提交注释关键字匹配: 只支持正则

这里就设置为分支匹配和提交注释关键字匹配.

Push触发 (gitee.com/help/articl…)

Push事件由以下三种行为产生,本地推送、分支合并、PR合并。

因此,只要在流水线中配置了Push事件触发,以上三种操作都会自动触发流水线执行。

Push事件下,提供以下三种匹配规则,三种匹配规则是交集关系,即同时设置了匹配规则,只有满足所有规则时才可触发流水线

  • 分支匹配:共有以下四种匹配规则
    • 前缀匹配:如填写dev,则匹配dev开头的所有分支;当填写空时,匹配所有分支
    • 精确匹配:如填写dev,仅会匹配dev分支
    • 正则匹配:如填写dev.*,则匹配前缀为dev的所有分支
    • 精确排除:如填写dev,则向dev分支提交代码不会触发流水线。精确排 除的规则优先级最高,通常和其他规则混合使用
  • Tag匹配:同分支匹配一样,共有以下四种匹配规则
    • 前缀匹配:如填写v1,则匹配v1开头的所有Tag;当填写空时,匹配所有Tag
    • 精确匹配:如填写v1.1.1,仅会匹配v1.1.1Tag
    • 正则匹配:如填写v1.*,则匹配前缀为v1的所有Tag
    • 精确排除:如填写v1.1.1,则创建v1.1.1Tag不会触发流水线。精确排除的规则优先级最高,通常和其他规则混合使用
  • 提交注释关键字匹配:仅支持正则匹配
    • 正则匹配:如填写.*build.*,则在提交代码时Commit Message中包含build关键字的都可以触发流水线

分支匹配配置了精确匹配masterTag匹配配置了前缀匹配v1,提交注释关键字匹配配置了.*build.*,如下图

46.jpg

  • 当向master提交代码,但Commit Message“Gitee Go”时,流水线不能触发
  • 当向master提交代码,但Commit Message“Gitee build Go”时,流水线能触发
  • 当推送Tagv1.10.1,但Commit Message“Gitee Go”时,流水线不能触发
  • 当推送Tagv1.10.1,但Commit Message“Gitee build Go”时,流水线能触发

接下来就是任务编排.

12.jpg

13.jpg

可以看到,支持多种构建方式.

我这个项目是使用Maven的,那就选择Maven

14.jpg

15.jpg

可以配置消息通知,支持钉钉,微信,飞书.

如果不设置通知,这里什么也不用改,设置一下阶段权限控制.

打包完成就该把打包好的东西上传到服务器上

16.jpg

17.jpg

这里也可以设置通知,不设置就不需要改什么,设置一下阶段权限控制就好.

18.jpg

接下来就是部署了.

19.jpg

部署可以选择主机部署,也可以选择K8S,这里选择主机部署.

20.jpg

21.jpg

22.jpg

部署文件来源可以来自上游构建产出或通用制品库

选择上传文件这里要选,不选可以保存,但是发布会失败.

34.jpg

后面还有一些工具,这里不需要,就不添加了,如果需要,可以根据自己的需求去添加.

32.jpg

参数配置

33.jpg

可以在脚本中使用参数,格式: ${PORT},参数的值可以根据自己的项目进行修改

添加主机

需要先添加一个主机组,然后再添加主机.名称和标识自己可以随便填,仓库就是要发布的代码的仓库.

23.jpg

添加主机,这里就是你自己的服务器啦 .

24.jpg

25.jpg

把命令复制到服务器执行一下就可以了.

26.jpg

添加完成

28.jpg 27.jpg

执行主机组那里就可以选择了

钉钉消息

钉钉群可以创建机器人,使用Webhook可以推送消息.

29.jpg

名称也是自己随便填,ID可以不填,会自动生成.

最后只要设置Webhookurl就行,如果有加签,需要设置秘钥.

30.jpg

可以看到支持的凭证类型还是挺多的.

31.jpg

部署脚本

上传到服务器的默认目录是/root/gitee_go/deploy

文件名为output.tar.gz

# 请在此输入部署脚本,如启动Java应用如下
cd ~/gitee_go/deploy
ls
tar -zxf output.tar.gz
cd target
nohup java -jar ${project_name}.jar & 
echo "Deploy Success"
sleep 10
curl 127.0.0.1:${PORT}/${url_path}/ok

这个脚本可以根据自己的项目修改

部署

现在部署一下看看效果

35.jpg

果然失败!

检查发现数据库连不上

37.jpg

可以ping到,但是telnet超时,查了好久,发现是安全组规则,出站规则没有配置3306端口.

36.jpg

继续部署试试...

38.jpg

还是失败...

39.jpg

1核1G的服务器配置太低了,以后白送都不能要...

44.jpg

自己弄虚拟机吧.

配置虚拟机作为主机,打包发布

40.jpg

41.jpg

42.jpg

43.jpg

钉钉的效果就是这样.

45.jpg

现在只要推送到master,符合事件触发规则,就会触发,然后会自动构建,自动上传,自动部署.

发布忽然变得如此简单.

好了,今天就到这里

关注 南诏Blog 公众号,共同学习,一起进步。加油🤣