[From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577

前言

本文是在12月12号迅雷@赵兵在前端早读课第三期Live中提到的关于CI构建的,可能这部分在不同公司由不同的岗位负责,刚好如果你没遇到你可以看看。

@赵兵,来自迅雷前端团队。是一个热爱前端技术,喜欢造轮子,爱折腾的人,也是一个奉行“懒惰使人进步”的懒人工程师。

正文从这开始~

本文简单介绍了持续集成的概念并着重介绍了如何基于 Gitlab CI 快速构建持续集成环境,主要介绍了 Gitlab CI 的基本功能入门操作流程。

本文提到的Gitlab版本为8.x,新版的Gitlab界面可能会有所不同。

什么是持续集成?

持续集成(Continuous Integration,简称CI)指的是,频繁地(一天多次)将代码集成到主干。

持续集成的好处主要有两个:

快速发现错误

每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易

防止分支大幅偏离主干

如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

持续交付、持续部署的概念

持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续交付、持续部署的概念

持续集成的原则

业界普遍认同的持续集成的原则包括:

  • 需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 git、svn 等;

  • 开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;

  • 需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;

  • 必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

持续集成系统的组成

由此可见,一个完整的构建系统必须包括:

  • 一个自动构建过程,包括自动编译、分发、部署和测试等。

  • 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。

  • 一个持续集成服务器。

GitLab CI介绍

GitLab CI流程图

GitLab CI是 GitLab 提供的持续集成服务,只要在你的仓库根目录 创建一个.gitlab-ci.yml 文件, 并为该项目指派一个Runner,当有合并请求或者 push的时候就会触发build。

这个.gitlab-ci.yml 文件定义GitLab runner要做哪些操作。 默认有3个[stages(阶段)]: build、test、deploy。

当build完成后(返回非零值),你会看到push的 commit或者合并请求前面出现一个绿色的对号。 这个功能很方便的让你检查出来合并请求是否会导致build失败, 免的你去检查代码。

大部分项目用GitLab’s CI服务跑build测试, 开发者会很快得到反馈,知道自己是否写出了BUG。

所以简单的说,要让CI工作可总结为以下几点:

  • 在仓库根目录创建一个名为.gitlab-ci.yml 的文件

  • 为该项目配置一个Runner

完成上面的步骤后,每次push代码到Git仓库, Runner就会自动开始pipeline。

基于Gitlab CI快速搭建持续集成环境

开启 Gitlab CI 功能

开启 Gitlab CI 功能

在自己的Gitlab中打开CI界面,比如迅雷的Gitlab,地址是 https://gitlab.xunlei.cn/ci/projects,找到自己项目后选择 “Add project To CI”

项目 Gitlab CI 配置

项目 Gitlab CI 配置

可以对项目的构建进行详细配置,比如构建的时间表及需要 CI 进行持续集成的分支等,这里配置了 对master和develop分支进行持续集成。

配置一个 Runner

GitLab CI 中,runner 是一个隔离的虚拟机器,用来配合 Gitlab CI 进行构建。

安装 GitLab-Runner

安装gitlab-ci-multi-runner

环境:centos 7, 使用了清华大学的镜像

新建 gitlab-ci-multi-runner.repo

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

执行

sudo yum makecache
sudo yum install gitlab-ci-multi-runner
其他系统安装

https://docs.gitlab.com/runner/install/

Gitlab CI Multi Runner 国内镜像

https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-ci-multi-runner/

Runner 的区分

Runner 的区分

  • 指定 Runner: 可以指定运行某一个Gitlab CI 的项目

  • 共享 Runner:可以运行所有的 CI 项目

Gitlab Runner 和 Gitlab 不能安装在同一个机器

注册一个指定的runner

注册共享的Runner 需要 gitlab 的 admin 权限

sudo gitlab-ci-multi-runner register
  1. 输入Gitlab CI地址, (e.g. https://gitlab.xunlei.cn/ci)

  2. 输入项目CI token

  3. 输入 Runner 描述(e.g. home.xl9.xunlei.com 测试runner)

  4. 输入 Runner 标签,可以多个,用逗号隔开(e.g. 10.10.34.91-dev)

  5. 输入 Runner 执行的语言 (e.g. shell)

注册完成之后,GitLab-CI立刻就会多出一条Runner记录

启动 runner

这里把批量运行Runner这个功能安装为一项服务

# Install runner as service and start it:cd ~
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start

创建.gitlab-ci.yml

.gitlab-ci.yml 文件是什么

.gitlab-ci.yml 用来配置 CI 用你的项目中做哪些操作,这个文件位于仓库的根目录。

当有新内容push到仓库后,GitLab会查找是否有.gitlab-ci.yml文件,如果文件存在, Runners 将会根据该文件的内容开始build 本次commit。

.gitlab-ci.yml 使用YAML语法, 你需要格外注意缩进格式,要用空格来缩进,不能用tabs来缩进。

创建.gitlab-ci.yml

stages:  - test
 - deploy
# 变量variables:  DEV_RSYNC_PATH:"/data/deploy/xunlei.com/misc.xl9.xunlei.com/d/"# 所有 stage 之前的操作before_script:  - npm set registry http://xnpm.sz.xunlei.cn
 - npm install
# 代码检查lint:  stage: test
 script: npm run lint
# 单元测试unit:  stage: test
 script: npm run unit
# 部署测试服务器deploy_dev:  stage: deploy
 tags:    -10.10.34.91-dev
 only:    - develop
 script:    - rsync -av --delete-after --exclude-from=/data/shell/home.xl9.xunlei_exclude.list . $DEV_RSYNC_PATH
   - chmod -R 755 $DEV_RSYNC_PATH
   - chown -R nobody:nobody $DEV_RSYNC_PATH
   - find $DEV_RSYNC_PATH -type f -exec chmod 644 {} \;
   - cd $DEV_RSYNC_PATH
   - npm install

推送构建配置文件

配置好.gitlab-ci.yml文件之后,只要把它加入git后然后推送到远程仓库,CI就会开始自动化集成

查看可视化的构建过程

Gitlab CI 提供了可视化的构建过程的显示可以随时查看。

查看可视化的构建过程

启用构建邮件通知

Gitlab CI提高了一些 Service, 比如邮件通知,可以配置一系列接受邮件的地址和是否只有失败的时候才发送邮件。

启用构建邮件通知邮件内容

徽章

徽章,当Pipelines执行完成,会生成徽章,你可以将这些徽章加入到你的README.md文件或者你的网站。

build status

结语

本文简单介绍了持续集成的概念并着重介绍了如何基于 Gitlab CI 快速构建持续集成环境,主要介绍了 Gitlab CI 的基本功能和入门操作流程。

希望在进一步的学习和应用中与大家分享 Gitlab CI 的其它高级的应用。

延伸阅读

  • https://doc.gitlab.cc/ce/ci/quick_start/README.html

  • http://www.jianshu.com/p/2b43151fb92e

  • https://scarletsky.github.io/2016/07/29/use-gitlab-ci-for-continuous-integration/

最后为你推荐

【第1123期】注释的艺术

【第1135期】CSS简史

关于本文
作者:@赵兵
原文:http://www.jianshu.com/p/705428ca1410

[转] 基于Gitlab CI搭建持续集成环境的更多相关文章

  1. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  2. 基于 Jenkins 快速搭建持续集成环境

      什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火 ...

  3. 使用Jenkins+Docker+Gitlab+Maven搭建持续集成环境

    继使用Docker搭建Gitlab后 大致的步骤如下: 开发人员通过IDE工具(IntelliJ IDEA)将代码推送到gitlab. jenkins从gitlab中获取到源码,并使用maven编译. ...

  4. Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

  5. 基于GitLab CI搭建Golang自动构建环境

    基于GitLab CI搭建Golang自动构建环境 Golang发布遇到的问题 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 开发者本地环境需要将环境变量文件改 ...

  6. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...

  7. 用 GitLab CI 进行持续集成

    简介 从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成. ...

  8. Hudson+Maven+Svn搭建持续集成环境

    Hudson+Maven+Svn搭建持续集成环境 博客分类: 配置管理 mavenSVNTomcat项目管理配置管理 一.所用开发工具 1.    Hudson: Hudson 是一种革命性的开放源码 ...

  9. 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(二)

    前言     上一篇随笔Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境(一)介绍maven和nexus的环境搭建,以及如何使用maven和nexus统一管理库 ...

随机推荐

  1. 后台注册js代码的方法

    Page.ClientScript.RegisterClientScriptBlock(JSUtil.CurrentPage.GetType(), Util.NewGuid(), @"< ...

  2. 大数据时代,Python是最好的语言!

    随着大数据疯狂的浪潮,新生代的工具Python得到了前所未有的爆发.简洁.开源是这款工具吸引了众多粉丝的原因.目前Python最热的领域,非数据分析和挖掘莫属了.从以Pandas为代表的数据分析领域开 ...

  3. 打开程序出现.Net Framework Initialization Error – Unable to find a version of the runtime to run this applicatio的解决办法

    部署一个VS2010开发的程序时遇到 了一个非常奇怪的问题,客户端上已经安装了.net framework 4.0,但运行时还是会弹出错误: .Net Framework Initialization ...

  4. javascrip总结42:属性操作案例: 点击盒子,改变盒子的位置和背景颜色

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  5. Smart3d和3dsmax结合做人脸建模

    1.拍摄几张照片(或视频 我是拍摄的视频然后截图,因为自拍照20张总是不方便) 2.导入smart3d 3.空三匹配 4.重建,并保存格式为.obj常用格式 5.将上一步重建的结果导入3dsmax做进 ...

  6. 编写高质量代码改善C#程序的157个建议——建议141:不知道该不该用大括号时,就用

    建议141:不知道该不该用大括号时,就用 如果if条件语句只有一行语句,要不要使用大括号? 答案是:建议使用.一个括号不会增加多少代码,但是却让代码看上去增加了一致性.括号本身只会让代码更具条理性. ...

  7. struts整合dropzone.js上传图片遇到的点问题

    问:struts后台无法获取文件对象和文件名称? 答:1. 到dropzone.js搜索"return xhr.send(formData);" 2. 在它前面有个这么句代码: f ...

  8. spring boot 整合 HttpClient

    第一步:引入HttpClient 的jar包 1.httpClient 5.0 开始支持异步(Async)请求: 2.httpclient 版本过低上传文件会出,原因是 org.apache.http ...

  9. 使用纯真IP库获取用户端地理位置信息

    引言 在一些电商类或者引流类的网站中经常会有获取用户地理位置信息的需求,下面我分享一个用纯真IP库获取用户地理位置信息的方案. 正文 第一步:本文的方案是基于纯真IP库的,所以首先要去下载最新的纯真I ...

  10. 【Selenium专题】 FAQ_对象识别_Compound class names are not supported

    测试代码 public void login(){ WebDriver driver = new ChromeDriver(); driver.get("http://IP:Port/cli ...