日常开发中,如何提升交付效率,打造高效、灵活、高可用的 CI(持续集成) /CD(持续交付)系统,一直是老生常谈的话题。这方面已经有很多的开源项目与工具,比如Jenkins、Travis 以及本文要谈到的GitLab CI。
先引入GitLab官方文档里的一张图,可以让我们更加方便的了解 CI/CD 做了哪些事情。
从左往右看,首先是gitlab里面代码的提交,gitlab触发runner去执行定义好的服务(包括build/unit test等)。
接着就是codeReview,预发布,正式部署到线上。
每家公司的流程大致都是如此,利用好自动化的CI流程,就可以大大加快开发迭代的速度了。
一个典型的 Pipeline如上,一共有 5 个阶段,Build,Test,Release, Staging, Production,每个阶段里都至少有一个 Job,Test 中有两个 Job。GitLab 会从左往右依次把任务给到 Runner 处理,默认情况下如果中途有一个任务没有处理成功,则整个 Pipeline 就会退出。
GitLab-Runner通过http,接收处理gitlab的定义pipeline。 runner可以安装在不同的机器上。
更具体的gitlab runner安装配置等本篇不予讨论,有兴趣可以看下面的相应链接查看或自行谷歌。
gitLab runner: www.cnblogs.com/cnundefined…
yml语法传送门,https://learnxinyminutes.com/docs/yaml/
# 定义需要执行哪些阶段,默认情况下按顺序执行
# 默认情况下,前面一个阶段执行成功后,下一个阶段方可执行
stages:
- build
- deploy
# 定义变量
variables:
GIT_CLEAN_FLAGS: none
# build任务
build:
# 此任务属于build同名阶段,前面有说,一个阶段可以有多个任务,多个任务会并行执行
stage: build
variables:
NODE_ENV: production
BOSS_ENV: test
# 相对应的runner配置的是shell,下面将以shell脚本执行
script:
- yarn --production=false
- NODE_ENV=$NODE_ENV BOSS_ENV=$BOSS_ENV yarn build
# 执行中间产物,将要传递给下一个阶段
# 也会出现在gitlab pipleline页面,可供查看及下载
artifacts:
expire_in: 1 week
paths:
- dist
# 绑定标签为`vue`的runner执行操作
tags:
- vue
# 只有test分支有提交时,才会进行相应的动作
only:
- test
# deploy 阶段配置大致相同,省略不聊
更详情具体的配置请看官方配置文档:yaml
对应上面的gitlab-ci配置,我们开发到测试环境时,只需要把改动合并到test分支就行了,免去了之前的自己提工单的麻烦。
之所以要自己合test分支呢,文件冲突自己解决嘛,没有了boss系统的文件锁定功能,难免会有文件冲突产生。
当然最重要的还是要保持提交前合master的好习惯。
完成了上面的步骤后,就欣赏下gitlab的漂亮美观的可视化pipeline界面了。下面的贴图以某一个项目为例。
pipeline列表,可以清楚的看到每个stage的通过情况及总的执行时间
单个pipeline里面的job也是清楚可见,执行结果一目了然,包括artifacts(可以理解为部署产物)也是可以下载及在线查看的
教科书级别的pipeline,可以看到state里面的job是可以并行执行的
job的执行日志也是清楚可见的呢
可在线查看的artifacts(可以理解为部署产物)也是可以下载及在线查看的,artifacts需要在job里面配置
Integrations
可以扩展其他功能,这里选用Pipelines emails
来进行执行结果通知只想收到与自己有关的提醒怎么弄? 有办法的,打开通知设定,选中关闭其他提醒即可。
对于前端来说,哪天上了nodejs应用,可以试下了
webhook监听到相应的钩子触发时,去请求定义好的URL,由URL对应的服务去完成后续的操作,也就需要自己单独专门写一个后端服务了,项目之间并不能很好的共用。
与gitlab CI的对比: 不足:
其他的一些比较可参考:https://about.gitlab.com/devops-tools/jenkins-vs-gitlab.html www.thecodecampus.de/blog/jenkin…
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=dg4phiixmu0o