GitLab CI 持续集成
简介
从GitLab 8.0开始就把GitLab-Ci集成在GitLab中了,我们只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner就可以进行持续集成了,GitLab-Ci实现自动化部署流程:用户提交代码->检查是否有.gitlab-ci.yml文件->如果无,则结束;如果有,则调用runner执行脚本->获取返回的结果。
概念
-
pipline
一次piplien相当于一次构建任务,里面可以包含多个流程,如编译、测试、部署等。任何提交或者MergeRequest的合并都可以触发Pipline,如图:
-
Stages
Stages表示构建阶段,我们可以在一个Piplien中定义多个Stages,这些Stages会有以下特点:
- 所有的Stages会按照顺序运行,即当一个Stages完成后,下一个Stage才开始
- 只有当所有Stages完成后,该构建任务(Pipline)才会成功
- 如果任何一个Stage失效,那么后面Stages不会执行,该构建任务(Pipline)失效
因此,Stages和Pipline的关系是:
-
Jobs
Jobs表示构建工作,表示某个Stage里面执行工作,我们可以在Stage里面定义多个Jobs,这些Jobs会有以下特点:
- 相同Stage中的Jobs会并行执行。
- 相同Stage中的Jobs都执行成功时,该Stage才会成功。
- 如果任何一个Job失败,即该构建任务(Pipline)失败。
Jobs和Stage的关系图:
-
gitlab runner
执行构建任务的一个服务,把构建任务放到runner里面而不是在CI里面做是不想把”构建”这个重任(通常较大的工程构建都比较小耗资源) 放到gitlab上而影响gitlab性能。通过把gitlab runner安装到不同机器上,让这台单独的机器来执行构建任务,GitLab-Runner可以分类两种类型:Shared Runner(共享型)和Specific Runner(指定型):
- Shared Runner:这种Runner(工人)是所有工程都能够用的。只有系统管理员能够创建Shared Runner。
- Specific Runner:这种Runner(工人)只能为指定的工程服务。拥有该工程访问权限的人都能够为该工程创建Shared Runner。
向GitLab-CI注册一个Runner需要两样东西:GitLab-CI的url和注册token。如果要注册Shared Runner,你需要到管理界面的Runners页面里面去找注册token。如下图所示:
如果要注册Specific Runner,需要到指定的项目中去找对应的token,如图:
实践
-
GitLab-Runner的安装与注册
以centos 7为例, 使用了清华大学的镜像,新建 gitlab-ci-multi-runner.repo
[root@i-vvwtw5ne ~]# touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo
将以下内容写入文件
[gitlab-ci-multi-runner] name=gitlab-ci-multi-runner baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key
执行
[root@i-vvwtw5ne ~]# yum makecache [root@i-vvwtw5ne ~]# yum install gitlab-ci-multi-runner
注册一个Rnner
让Runner启动起来
[root@i-vvwtw5ne ~]# gitlab-runner start
登陆到gitlab就可以看到新注册的Runner了,如图:
配置.gitlab-ci.yml文件
在工程目录下增加一个.gitlab-ci.yml文件,内容如下:
# 缓存服务, 如果有文件需要多个stages共用,例如jar/war包 cache: paths: - target/ # 本次构建的阶段:build package stages: - build - deploy # 构建 Job build: stage: build tags: - dev only: - dev script: - echo "=============== 开始编译构建和打包任务 ===============" - pwd - gradle clean build -x test # 部署 deploy: stage: deploy tags: - dev only: - dev script: - echo "=============== 开始部署任务 ===============" # 测试,是否能够通过 ssh 连通远程服务器 - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 - echo "=============== 将 jar 包部署到远程服务器上 ===============" - sshpass -p Falsesoul**** scp -o StrictHostKeychecking=no /home/gitlab-runner/builds/66b08c53/0/cos/yh-cos/yh-cos-web/build/libs/yh-cos-web-0.0.1.jar root@192.192.18.73:/opt/war/ - echo "=============== 开始执行 ===============" - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 "sh deploy.sh"
当有提交或Meger request到dev分支的时候,就会自动触发pipline,如图:
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- Blueprint+Dredd+Gitlab-CI 实现持续集成
- 基于Docker容器的,Jenkins、GitLab构建持续集成CI
- 劈荆斩棘:Gitlab 部署 CI 持续集成
- Jenkins+Gitlab搭建CI持续集成架构
- Jenkins+Gitlab搭建CI持续集成架构
- 持续集成环境选择:Jenkins VS gitlab-ci
- Android快速开发与体系搭建--持续集成--Gitlab CI
- Gitlab CI Multi Runner搭建CI持续集成环境
- Gitlab CI Multi Runner搭建CI持续集成环境
- [tool]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- gitlab CI 持续集成
- 利用Jenkins+Gitlab搭建持续集成(CI)环境
- CI(持续集成)之Jenkins+Gitlab的基本配置
- 搭建Gitlab CI持续集成环境入门教程
- 『中级篇』docker之CI/CD持续集成-gitlab安装(70)
- 【补充】Gitlab 部署 CI 持续集成
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
- 使用GitLab来实现IOS项目的持续集成CI