gitlab CI/CD学习笔记

最近我们团队准备用gitlab的cicd功能提升工作效率,这里做一些记录。

一、CI/CD 介绍

「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」三个概念的认识

持续集成

持续集成指的是频繁地将代码集成到主干,强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

持续交付

持续交付指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

持续部署

持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

持续交付和持续部署的区别

说白了,持续交付就是自动地从仓库将最新的程序部署到测试环境里,持续部署就是自动地将稳定版本部署到生产环境里;


持续部署和持续交付区别图

CI/CD流程

一般每个团队不一样,这里提供一种思路:


ci/cd流.png
  1. 提交
  2. 测试(第一轮)
    • 单元测试:针对方法或模块的测试(至少)
    • 集成测试:针对整体产品的某个功能的测试,又称功能测试
    • 端对端测试:从用户界面直达数据库的全链路测试
  3. 构建
    通过测试后,代码合并到主干,可以进行构建,所谓构建,指的是将源码转换为可以运行的实际代码,比如安装依赖,配置各种资源等等。
  4. 测试(第二轮)
    全面测试,自动化为主,少数无法自动化的测试用例,就要人工跑。
    新版本的每一个更新点都必须测试到。
  5. 部署
  6. 回滚

常见CI/CD工具

  • jenkins
    免费 + 插件,Jenkins闪耀的地方是其丰富的插件生态系统。它提供了超过1000个插件的扩展版本,可以集成几乎所有市场上可用的工具和服务。作为一个开源工具,您还可以选择自定义适合本土解决方案。
  • Bamboo
    Bamboo 是Atlassian产品套件的一部分,与其他工具类似,它提供构建,测试和部署代码并支持多种语言。它与其他与CI循环相关的Atlassian产品(如JIRA和Bitbucket)有很强的集成。
  • Circle CI, Travis CI, TeamCity, CodeShip等等
  • gitlab CI/CD

二、gitlab CI/CD

Gitlab持续集成是Gitlab提供的一整套持续集成、持续交付解决方案。

配置步骤

使用gitlab持续集成需要两步(不分先后):

  1. 在repository项目根目录创建.gitlab-ci.yml文件
    这个文件是你定义ci任务的地方,每一次push代码到repository,gitlab都会扫描这个文件,按照上面的配置执行相应的任务。
    详见.gitlab-ci.yml配置
  2. 安装并配置gitlab runner
    gitlab runner是运行ci任务的角色,可以是一个虚拟机,一个物理机,或者一个docker容器,甚至容器集群,它和gitlab通过api进行通信,所以唯一要求是runner到gitlab是网络通的。
    在gitlab上可以在settings中进行配置,可以看到有一些shared runner,但肯定不是我们需要的,我们要自己定制。
    以在docker上安装为例,安装配置步骤如下:
sudo docker pull gitlab/gitlab-runner:latest

sudo docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest
  
sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register  
#提示注册信息,这里最好不采用这种交互式的,因为有一些非必要的配置这里不会出现
# 配置关联gitlab-ci url,在项目settings>CI/CD>runners可以找到
Please enter the gitlab-ci coordinator URL:
# 配置token,在项目settings>CI/CD>runners可以找到
Please enter the gitlab-ci token for this runner:
# runner描述,随便输
Please enter the gitlab-ci description for this runner:
# runner的tags,这个很有用,通过tag和jobs关联
Please enter the gitlab-ci tags for this runner (comma separated):

Whether to run untagged builds [true/false]:
# true
Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
# docker
Please enter the default Docker image (e.g. ruby:2.1):
# maven:3.7.9-jdk-8

coordinator URL和token位置如下:


gitlab ci 项目的url和token

gitlab ci工作原理

从前文中我们已经知道,有几个角色:

  • gitlab
  • runner
  • executor
    gitlab触发条件后,会通知给对应的runner,runner并不是命令执行者,而是类似一个调度器或者说中介,真正干活的是executor,我们完全可以构建自己的executor来满足我们的CI需求。比如通过docker自定义容器实现(docker是个好东西)。

三、我们的CI/CD方案(拟)

因为我们产品上线是在公司有严格控制的,所以CD中最后一步“部署上线”肯定是满足不了的,策略就是从提交代码开始,到测试环境的部署测试。结合实际项目情况,方案图例如下:


方案图.png

首先只有mr动作触发我们的pipeline,进行单测,单测通过后部署到测试环境中,然后跑自动化测试,都通过后,由代码reveiwer惹怒元不能自动化的新功能新需求,通过后补充手动测试,QA确认通过后整个流结束,

gitlab ci可以和jenkins进行集成,这个后面再讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269