每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

栏目: IT技术 · 发布时间: 4年前

内容简介:作者简介刘仁权(弈阁)

研发效能领域洞察系列

CircleCI 在 2019 年被 Forrester 评为云原生连续集成领域的领导者,并被提名为多个Best DevOps Tools列表。CircleCI 是第一个通过 FedRAMP认证的CI / CD 工具,每月在 Linux,macOS,Docker 和 Windows 构建环境中处理超过 3000 万个构建。

作者简介 

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

刘仁权(弈阁)

蚂蚁金服 高级开发工程师

仁权,花名弈阁,蚂蚁金服研发效能部高级开发工程师, 主要从事DevOps平台持续交付系统研发工作,在Pipeline编排、容器化调度、CI提效、插件体系等方面有丰富的实战经验。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

01

诞生

CircleCI成立于2011年,创始人是Paul Biggar和Allen Rohner,总部位于旧金山,目前在全球拥有远程员工300+,估值近1.155亿美元,最近又获得了1亿美金的融资 (2019年还是5000万美元来着,不到一年翻了4倍)

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

CircleCI在2019年被Forrester(国外有名独立的技术和市场调研公司)评为云原生连续集成领域的领导者,并被提名为多个Best DevOps Tools列表。CircleCI是第一个通过FedRAMP认证的CI / CD工具, 每月在Linux,macOS,Docker和Windows构建环境中处理超过3000万个构建。

CircleCI致力于通过先进的持续交付技术支持企业通过自动化构建、测试和交付过程来快速发布他们可信任、高质量的代码。目前包括FaceBook、三星(Samsung)、福特汽车公司(Ford Motor Company)、Spotify、Lyft、Coinbase、PagerDuty、Stitch Fix和BuzzFeed在内的数千家领先公司,都依靠CircleCI来加速交付和提高质量。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

02

优势

目前业界的CI/CD产品有很多,但是CircleCI运行CI/CD有其非常多独特的优势, 主要总结在这8个方面:

  • 通过workflows编排强大的控制执行能力

  • 一流的 docker 支持(支持运行任意的公共或私服docker仓库、通过executor自定义编排到job中、支持layer缓存等等)

  • 支持自定义CPU/RAM

  • 无论什么语言都可运行

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

  • 强大的缓存能力

  • 通过ssh或者本地build可以非常简单上手的debug

  • 强大的安全保障

  • 丰富的CI/CD数据视图

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

那么具体如何体现这些优势呢,下面将从CircleCI执行流程出发详细了解其功能组成

03

架构介绍

下图是CircleCI执行流程整体概要图,包含了CircleCI的驱动方式、编排能力、调试能力、集成三方服务、调度方式等多个功能模块。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

下面将详细介绍每个部分的功能特点:

驱动方式

CircleCI触发方式非常多样化,通过统一的CircleCI API支持了VCS(集成了GitHub、GitHub Enterprise和Bitbucket等)、Pipline UI界面、CLI或者服务API调用等多种方式来触发一次Pipeline。

  Tips:最新的API v2,传送门 (https://circleci.com/docs/api/v2)

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

编排能力

CircleCI通过config.yml丰富的定义具备了强大的执行能力,通过workfows编排任务,并且内置了多种功能强大的step,包括run(自定义脚本)、checkout(下载代码)、save_cache/restore_cache(保存和恢复缓存)、store_artifacts/store_test_results(产物存储)等多种能力。

    :chestnut: 举一个栗子

version: 2

#定义job
jobs:
#1.编译
build:
working_directory: ~/my-project
steps:
#下载代码
- checkout
#恢复缓存
- restore_cache:
keys:
- v1-m2-{{ checksum "pom.xml" }} #通过checksum校验pom.xml是否变更,从而判断是否
- v1-m2-
#执行一个自定义脚本
- run:
environment:
MVN_ARGS: "-Dmode=dev"
command: |
set -xu
mvn clean install $MVN_ARGS
#更新缓存
- save_cache:
key: v1-m2-{{ checksum "pom.xml" }}
paths:
- ~/.m2

# 保存产物
- store_artifacts:
path: ~/my-project/
destination: target

# 上传测试结果(比如mvn的testng-resutls.xml)
- store_test_results:
path: ~/my-project/target/surefire-reports

#2.发布到sit环境
deploy-sit:
docker:
- image: ubuntu:14.04
working_directory: /tmp/my-project
steps:
- run:
name: deploy is test pass
command: ansible-playbook site.yml -i staging

#3.发布到sit环境
deploy-prod:
docker:
- image: ubuntu:14.04
working_directory: /tmp/my-project
steps:
- run:
name: Deploy if tests pass and branch is Master
command: ansible-playbook site.yml -i production


通过workflows去定义job的编排方式,关于workflows的更多介绍,第二期为你解答~

workflows:
  version: 2
  build-deploy:
    jobs:
      - build:
          filters:
            branches:
              ignore:
                - develop
                - /feature-.*/
      - deploy-staging:
          requires: #deploy-sit需要依赖build执行
            - build
          filters:  # 过滤仅在某些条件下执行
            branches:
              only: master
      - deploy-prod:
          requires:
            - build
          filters:
            branches:
              only: master

每个workfolw可以产出产物,共享一份workspace,并且多个workflow之间的cache可以共享。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

执行器

CircleCI设计了executors,支持将job调度到不同类型的执行器上,包括Docker、 Linux Mac、GPU等等

具体语法见:

executor

备注

docker

通过image执行镜像

machine

包括linux、unbuntu等

macos

macos,支持指定os版本

windows

通过虚拟机运行

     :chestnut: 再举个栗子:

运行在ubuntu上

version: 2.1
jobs:
  build:
    machine:
      image: ubuntu-1604:201903-01
    steps:
      - checkout
      - run:
          name: "Testing"
          command: echo "Hi"

运行在mac上

jobs:
  build:
    macos:
      xcode: "11.3.0"

集成能力-orbs

CircleCI 2.0新定义了一种新的yaml对象orbs, orb是一个可重用的YAML配置包,它将重复的配置压缩成一行代码,包含了jobs、command、executors等等的一个大集合,通过orbs集成了非常丰富(nb)的 工具 链,集成方包括: AWS、 Azure、ConfigCat、Docker Hub、Google Cloud、Helm等等。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

截止到2020年4月2号,已经有400+ orbs

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

 :chestnut:orb的使用方式也特别简单,举个栗子:

version: 2.1
orbs:
#这里的hello是orbs的一个引用, hello等价于circleci/hello-build@0.0.5
hello: circleci/hello-build@0.0.5
workflows:
"Hello Workflow":
jobs:
#hello等价于circleci/hello-build@0.0.5,hello-build是它的一个job
- hello/hello-build



关于orbs的更多语法介绍,第二期为你解答~
系列预告 - 深入解读企业级持续交付系统CircleCI
Part 1:What is CircleCI ?
Part 2:Pipeline语法完整解读
Part 3:手把手指导入门案例
Part 4:全新UI界面

如果还想要了解更多,这里有更多研发效能内容推荐:

趋势研究:从0到1打造软件供应链

点击查看原文:《 【前沿探索】安全交付:GCP 的安全软件供应链

硬核的俄文会议转播,如何打造下一代IDE?

点击查看原文:《 JetBrains OpenDay 2019 盘点:如何打造下一代 IDE

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)

长按识别二维码关注我们

号外号外!!!

蚂蚁金服研发效能团队招募进行中, 高级iOS开发工程师/技术专家、资深前端开发工程师/技术专家、高级 Java 开发工程师/技术专家、技术支持、静态程序分析技术专家、产品专家 十余+ 岗位持续开放,让我们一起助力内部及外部伙伴研发效能的持续提升,「效」傲江湖:rocket::rocket::rocket:

详细岗位信息扫描下方二维码

如果你对任何岗位感兴趣,欢迎发简历到: AntLinkE@antfin.com


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深度探索C++对象模型

深度探索C++对象模型

斯坦利•B.李普曼 (Stanley B. Lippman) / 侯捷 / 电子工业出版社 / 2012-1 / 69.00元

作者Lippman参与设计了全世界第一套C++编译程序cfront,这本书就是一位伟大的C++编译程序设计者向你阐述他如何处理各种explicit(明确出现于C++程序代码中)和implicit(隐藏于程序代码背后)的C++语意。 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模......一起来看看 《深度探索C++对象模型》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试