每月处理 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


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

查看所有标签

猜你喜欢:

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

Purely Functional Data Structures

Purely Functional Data Structures

Chris Okasaki / Cambridge University Press / 1999-6-13 / USD 49.99

Most books on data structures assume an imperative language such as C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Ha......一起来看看 《Purely Functional Data Structures》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具