改进持续交付中的CI环节

在当前 DevOps 的趋势下,持续集成(CI)和持续部署(CD)具有支柱性地位,那么能够成功搭建 CI/CD 流水线就至关重要了。

今天我就讲一讲如何做好CI部分,让我们的的整个流水线更加的清晰和敏捷

如下图是整个CI/CD的部分,当然我们可以根据企业需求扩展CI或者CD的部分让我们的软件工程质量更好(from infoq)

终极CI工具:jenkins

我们的目标是要将软件开发生命周期的整个过程都自动化,从开发人员向代码库中提交代码开始,到将此代码投入生产环境中使用为止。

为了使整个软件开发流程处于 DevOps 模式或自动化模式,我们就需要对 CI/CD 流水线进行自动化。因此,我们还需要一款自动化工具来做这件事情,它就是 Jenkins。(from infoq

首先,我们需要拥有一个可以供开发人员提交代码的仓库。同时,Jenkins 也提供了前端展示的页面,我们可以使用该前端页面来定义整个流水线的作业(job)和任务(task)。对于某一个应用程序而言,我们的目标就是通过特定的工具实现其持续集成和持续交付的自动化流程。

Jenkins 会从 Git 代码仓库中拉取各个分支的代码,然后将其移动到 “代码提交阶段”。拉取到各个分支的代码之后,Jenkins 就会将其继续移动到“构建阶段”,该阶段会对代码进行编译工作。如果是像 Java 这类语言的话,我们还可以在 Jenkins 中选用 maven 之类的构建工具,通过 maven 对代码进行编译。之后在部署过程中,还可以将编译好的代码进行一系列的测试,同时这些测试也会由 Jenkins 监督执行。

之后,Jenkins 就会将代码移动到准生产环境,并使用 Docker 进行部署。在准生产环境中会运行一系列单元测试和可用性测试。如果能够通过所有的测试,Jenkins 就会将它继续移动到生产环境中。

大家也能感受到jenkins可以参与到整个CI的生命周期,好处显而易见

jenkins完成整个CI的弊端

大家都知道,软件发展至今已经相当成熟了,现在越来越多的重视软件交付质量,会在持续交付过程中集成sonar检查,并添加code review环节,用jenkins做sonar检查的环节和跑单元测试时,通常构建的是主干分支,此时如果sonar或者单元测试没过,其实已经污染到了主干分支,而且平时并不好做code review

采用gitlab完善CI流程

现在绝大部分公司都已经采用gitlab来管理公司的代码,作为代码仓库,gitlab有着强大的功能集,可以做ci/cd

1. 采用gitlab作为代码管理仓库
2. 安装git runner(为了保障性能可以用另外的机器)
3. 采用sonar做代码质量分析工具(并安装gitlab相关插件)
4. 为需要做ci的项目加上.gitlab-ci.yml文件(pipeline流水)

yml文件讲解

stages:
- test
- sonar


test:
stage: test
script: /gitlab/auto_test.sh
except:
  - merge_requests
sonar:
stage: sonar
script:
  - echo $CI_COMMIT_REF_NAME
  - echo $CI_PROJECT_ID
  - echo $CI_COMMIT_SHA
  - /gitlab/sonar_preview.sh
  - /gitlab/sonar_analyze.sh
except:
  - merge_requests

tags:
  - lchen-CI

1.stages: 定义的是gitlab跑pipeline时的步骤

2.scripe: 表示会每个步骤跑的脚本

3.except: 表示gitlab在代码的哪个阶段或者分支时跑(merge_requests表示feature合并到主干分支时会自动跑pipeline,也就是提交merge request的时候)

4.tags: 具体运行pipeline的机器(git runner)

下图是我搭建完成后的效果:当test或者sonar有一个环节不通过时,merge就会变成红色,这样就能保证,每个人的feature分支在合并到主干分支之前已经经过自动化工具的检测,保证主干分支代码的干净

改进持续交付中的CI环节的更多相关文章

  1. 人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式

    人多力量大vs.两个披萨原则,聊聊持续交付中的流水线模式 在前面5期文章中,我们分别详细介绍了持续交付体系基础层面的建设,主要是多环境和配置管理,这些是持续交付自动化体系的基础,是跟我们实际的业务场景 ...

  2. DevOps-如何构建持续交付流水线

    引言 DevOps 是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署至生产环境的时间,其中持续集成和持续交付是 DevOps 里面非常重要的一环.本文讲述了达到自动化持续交付需要做的准备工 ...

  3. 持续交付的Mesos与Docker导入篇

    变革这个词在当今的数字化时代司空见惯,IT技术每过一段时间就会有一起革新,从WEB2.0.虚拟化.云计算.大数据.微架构.DevOps再到今天的容器Docker与Mesos. Docker的出现方便了 ...

  4. 【进阶之路】持续集成、持续交付与持续部署(CI/CD)

    由来 记得7月份刚刚换工作的时候,中午和老大一起去吃饭,回来的路上老大问我:"南橘,CI/CD有没有研究过?" 我隐隐约约在哪里听过这个名词,但是又想不起来,秉着实事求是的态度,我 ...

  5. OpenShift中的持续交付

    上一文中讲述了如何在AWS下搭建OpenShift集群.这篇文章将目光转向如何在OpenShift中实现CI/CD以及产品环境的部署. 持续交付 如果要打造一个持续交付的流水线,首先要考虑多环境的问题 ...

  6. 04: CI(持续集成)/CD(持续交付/持续部署)

    1.1 持续集成.持续交付 介绍   参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...

  7. 浅谈持续集成(CI)、持续交付(CD)、持续部署(CD)

    CI/CD是实现敏捷和Devops理念的一种方法,具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的 整个生命周期(从集成和测试阶段,到交付和部署).这些关联的事务通常被统称为"CI ...

  8. 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑

    前言 现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发.测试.发布.管理等,如果全部流程都采用人工的形式进行的话,效率肯定是超级不高效滴.而且现在很多项 ...

  9. CI Weekly #14 | 如何搭建合适的持续交付开发流程?

    时隔 10 个月,flow.ci 开始正式收费上线.为感谢对我们的内测支持,所有内测用户可继续免费使用基础版 30 天,截止至 3 月 15 日失效.欢迎随时告诉我们你对收费版 flow.ci 的反馈 ...

随机推荐

  1. Modular arithmetic and Montgomery form 实现快速模乘

    题目: 电音之王 题解: 求数列前n项相乘并取模 思路: ①.这题的乘法是爆long long的,可以通过快速幂的思想去解决(按数位对其中的一个数进行剖分).当然你的乘法会多出一个log的复杂度... ...

  2. javascript: 禁用右键、文本选择功能、复制按键

    <script type="text/javascript"> //禁用右键.文本选择功能.复制按键 //http://www.jinyuanbao.cn $(docu ...

  3. HDU 3466 Proud Merchants(01背包)

    题目链接: 传送门 Proud Merchants Time Limit: 1000MS     Memory Limit: 65536K Description Recently, iSea wen ...

  4. JavaScript 标准参考教程(alpha) 阮一峰

    JavaScript 标准参考教程(alpha)http://javascript.ruanyifeng.com/#introduction

  5. vue 引入阿里图标

    1.去阿里图标矢量图标库将想要的图标添加入库 2.再去库中将图标添加到项目. 3.再到我的项目中,选择,我这里采用的是将图标代码包下载到本地再引入到vue项目中. 4.在vue项目的assets文件夹 ...

  6. 什么是Spring Boot?

    什么是Spring Boot? Spring Boot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,开发者 ...

  7. 使用vue的extend自定义组件开发

    index.js import Vue from 'vue' import tip from './tip.vue' const Constructor = Vue.extend(tip); cons ...

  8. rope(平衡二叉树)

    题目描述: 链接:https://www.nowcoder.com/acm/contest/141/C来源:牛客网 Eddy likes to play cards game since there ...

  9. 排列组合( Lindström–Gessel–Viennot lemma 定理)

    链接:https://www.nowcoder.com/acm/contest/139/A来源:牛客网 Monotonic Matrix 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ ...

  10. 【转】Ubuntu下外放有声音 耳机没声音

    真是使用linux每天都有新的发现啊,今天早上起来用电脑,想听几首歌,插上耳机后发现没声音,我还以为是耳机坏了,就把耳机插在了手机上,发现耳机有声音,很纳闷,我象是不是电脑接口有问题了,但是在进系统的 ...