gitlab-ci坑后感与指北

本文的目的:

最主要是备忘, 其次是分享html

疗效:node

并不能让你一会儿掌握CI/CD, 这只是一个比较完整的解决方案,其余基础知识,自行补充.webpack


基调

首先,这不是屠龙刀,不要奢望一篇文章能够走遍天下.这里只是提供一个具体的落地方案, 一个具体的技术选型.

阶段1: 代码仓库

关于 代码仓库, 本文选取的方案是 gitlabgit

gitlab的搭建:web

以目前的状况来讲, 推荐使用docker来搭建你的系统, 否则你会陷入各类膜明其妙的问题.docker

docker的知识, 请自行补充一下,篇幅有限不能展开细说.

在这里我推荐一个:shell

https://hub.docker.com/r/sameersbn/gitlab/npm

打开之后直接搜索Quick Start, 按照docker-compose的方式启动你的gitlab.api

不要对英文心存恐惧 ---- 孔子

下载好 docker-compose.yml以后不要急着启动, 须要修改几个参数:数组

须要学习一点点yml的知识, 大约5分钟, 自行google
  • GITLAB_SECRETS_DB_KEY_BASE,
  • GITLAB_SECRETS_SECRET_KEY_BASE,
  • GITLAB_SECRETS_OTP_KEY_BASE

上面三个是gitlab用于加密时用的key, 随便给个长度64的字符串, 这块不作 深究.

  • GITLAB_ROOT_EMAIL
  • GITLAB_ROOT_PASSWORD

上面两个就是初始化时管理员帐号的帐号密码, 按本身的须要填写

  • GITLAB_HOST

这是 gitlab 内部使用的地址, 这关系到你gitlab页面上的项目地址,没设置的话, 到时候显示的是127.0.0.1, 这个鬼才能clone下来.

这个 host 一旦设置, 初始化完就改不了了, 因此必定要在第一次启动以前 就设置好.
启动

docker-compose up

一系列的初始化信息之后, 你就能访问你的gitlab了.

默认是 http://{你的IP}:10080

其余关于gitlab的使用技巧, 就不深刻了.
能关注这篇文章的都不是萌新了,这些内容本身补充吧.

阶段2: 提交触发

接上文.

gitlab-ci在最新版的gitlab已是内置的了, 只要项目里有.gitlab-ci.yml,同时有对应的gitlab-runner, 就能实现CI, 相比之下不须要太多的配置.

名词解释:

.gitlab-ci.yml:

这是gitlab-ci使用的任务描述文件, 里面主要是定义CI的过程须要执行哪些行为, 简单说就是, 要进行哪几个步骤, 每一个步骤是哪些命令.

gitlab-runner:

另外一个程序, 也能够用docker启动, 就是负责执行 CI 任务的机器人, runner这块后面会展开讲.


启动并注册gitlab-runner

咱们仍是使用docker来启动,这是一个大方向

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
想深刻了解的话, 请看

https://docs.gitlab.com/runne...

敲黑板!!

在这里, 咱们将宿主机的docker.sock映射进去,让runner能够跟宿主用同一个daemon, (意味着你进去runner内部执行docker images是能够看到外面的镜像列表的), 这样作是埋下一个伏笔, 以便后面阶段使用dind(docker in docker)时, 得到更好的体验.


继续

好了, 这个时候你启动了一个runner, 你要告诉它应该到哪里去"服役",

这一步叫作: 注册

注册runner的方式请看

https://docs.gitlab.com/runne...

不过, 仍是请你使用如下命令来注册:

docker exec -it gitlab-runner gitlab-runner register \

--docker-volumes /var/run/docker.sock:/var/run/docker.sock \

--docker-privileged

这里使用了两个参数, 都是为了 docker in docker 能获得更好的体验而服务的.

输入以上命令后, 根据提示填写信息, 其中:

  • host,token 这些, 请打开你刚装好的gitlab, 进入 Admin area-Runners ,而后照着填写就是了
  • 特别注意期间会让你选一个executor 类型, 我的推荐最好的方式是docker , 至于shell这种方式, 玩玩能够,实际使用时反作用太多.
  • 更多参数的细节, 自行研究.

完成以上步骤以后, 你在gitlab - Admin area-Runners 页面就能看到注册好的runner了, 固然你如今仍是感受不到它的做用.

这个环节内容比较多, 操做比较多, 走到这里建议休息一下喝杯茶.

阶段3: Runner Job

这个阶段, 是指代码提交之后, gitlab-runner会自动读取项目的.gitlab-ci.yml, 运行里面定义的每一个Job.

这里给出一个极简的.gitlab-ci.yml例子,

它作的就是, 在提交代码之后, 自动的测试, 自动的构建, 自动的发布 :

stages:
  - test
  - build
  - deploy

job_01:
  stage: test
  image: dev_tool/node_builder:1.0.0
  script: 
   - npm install --registry=https://registry.npm.taobao.org
   - node server.js &
   - node test_api.js

job_02:
  stage: build
  image: gitlab/dind
  script:
  - docker build -t ci-demo:latest .
   
job_03:
  stage: deploy
  image: dev_tool/rancher-cli:latest
  script:
  - rancher-tool init
  - rancher up -d  --pull --force-upgrade --confirm-upgrade

一目了然, 上面的第一个定义: stages 数组,

意思是这个项目的CI/CD过程要执行三个步骤(stage),

分别是test测试-build编译-deploy发布

而后下面的三个job_*,名字是随意的, 重点是里面的stage属性,

告诉gitlab-ci这个任务是在哪一个stage执行的,

一个stage你能够写不少个job

敲黑板!!!

须要注意的是, 咱们以前选择了docker executor, job里面就要声明image属性,指定这个Jobscripts要在哪一个image里面运行.

重点说明!! 再次大力敲黑板!!

这里第二步使用了gitlab/dind , 仔细看script, 这是在一个容器里面去构建一个镜像, 为了总体体验构建效率着想, 咱们以前注册runner的时候,将宿主机的docker.sock映射进去是十分必要的!!
(从新翻上去看吧)

看到这里, 聪明的朋友已经发现了,

咱们须要本身打造一批用于运行Job的基础镜像, 这些镜像里要预先安装好咱们须要的依赖环境.

举个栗子:

你要在build这一步作webpack打包的话, 你要准备好一个内部安装好webpack的镜像(相关的node,npm之类就更不用说了)

听起来好麻烦?

也不是, 这是个 功在当代,利在千秋 的行为, 前期打造好基础镜像, 后面的项目就能够很容易写CI Job了.

更多 gitlab-ci.yml 的高级写法,仍是建议看官方文档
https://docs.gitlab.com/ee/ci...

阶段4: 不劳而获 && 总结

若是按照上面的步骤把这个系统搭建起来之后, 你应该已经可以感觉到gitlab-ci带来的好处了.

如今你只管提交代码, 就能快速看到新功能集成到相应的环境了.

此后, 你只要写好每一步的Job 就能够了.

尤为是测试这个环节.

尤为是测试这个环节.

尤为是测试这个环节.


后记

  • gitlab 真的很吃资源, 虚拟机玩够呛, 团队用的话, 建议装一台PC来搭建.
  • 基础镜像别偷懒, 多打磨,让你的scripts能够更简洁
  • 更进一步的话, 本身开发一系列的命令行工具, 让你的scripts更强大.
  • 有事找我, 包教会.
相关文章
相关标签/搜索