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

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

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

研发效能领域洞察系列

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


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

查看所有标签

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

像计算机科学家一样思考Python

像计算机科学家一样思考Python

(美)Allen B.Downey / 赵普明 / 人民邮电出版社 / 2013-8 / 49

《像计算机科学家一样思考python》按照培养读者像计算机科学家一样的思维方式的思路来教授python语言编程。全书贯穿的主体是如何思考、设计、开发的方法,而具体的编程语言,只是提供一个具体场景方便介绍的媒介。《像计算机科学家一样思考python》并不是一本介绍语言的书,而是一本介绍编程思想的书。和其他编程设计语言书籍不同,它不拘泥于语言细节,而是尝试从初学者的角度出发,用生动的示例和丰富的练习来......一起来看看 《像计算机科学家一样思考Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

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

正则表达式在线测试