9

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzU3NzczMDI4Ng%3D%3D&%3Bmid=2247484075&%3Bidx=1&%3Bsn=cb2bc992793ef4b40c7ea2f27c6e1e7e
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

研发效能领域洞察系列

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

作者简介 

yqUF3mE.png!web

刘仁权(弈阁)

蚂蚁金服 高级开发工程师

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

QbIv2qv.jpg!web

01

诞生

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

JFvama2.png!web

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来加速交付和提高质量。

vAvMRbY.jpg!web

02

优势

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

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

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

  • 支持自定义CPU/RAM

  • 无论什么语言都可运行

jYv2iiQ.png!web

  • 强大的缓存能力

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

  • 强大的安全保障

  • 丰富的CI/CD数据视图

AzMfa22.png!web

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

03

架构介绍

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

Bz6BZ3B.png!web

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

驱动方式

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

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

Mb6FvyA.png!web

编排能力

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可以共享。

y6ZrquJ.png!web

执行器

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等等。

JbIVzqM.png!web

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

yEVJvmM.png!web

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

version: 2.1
orbs:
#这里的hello是orbs的一个引用, hello等价于circleci/[email protected]
hello: circleci/[email protected]
workflows:
"Hello Workflow":
jobs:
#hello等价于circleci/[email protected],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

UBVbUr3.jpg!web

长按识别二维码关注我们

号外号外!!!

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

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

如果你对任何岗位感兴趣,欢迎发简历到: [email protected]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK