每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

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

内容简介:默认的模版有点简单,我们丰富一下

研发效能领域洞察系列

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

作者简介 

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

刘仁权(弈阁)

蚂蚁金服 高级开发工程师

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

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

01

注册

进入CircleCI界面, https://circleci.com/signup/ ,支持通过Github或Bitbucket登陆。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

这篇文档我们用Github作为输出源来测试,首先需要先在Github中创建一个测试project,circleci-demo https://github.com/liurq93/circleci-demo。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

在Github创建完project后,我们进入CircleCI界面点击Github登陆,首次登陆会请求授权给CircleCI,点击确认即可。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

首次进入CircleCI,可以看到主界面主要 分为6个部分JOBS (任务执行纪录)、 WORKFOLOWS (流水线执行纪录)、 INSIGHTS (各种视图)、 ADD PROJECTS (添加和初始化项目)、 TEAM (团队管理)、 SETTINGS (配置)。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

02

初始化yaml

我们 点击"ADD PROJECTS" 进入Projects界面 ,这里可以查看到所有从GIthub同步过来的project信息,我们可以选择刚刚在github创建的project开始一个workflow

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

点击Set Up Project按钮,可以发现CircleCI为我们提供了不同语言的默认模版的流水线yaml, 这里我们选择maven

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

默认的模版有点简单,我们丰富一下

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...
点击Start Building ,弹出界面,提示是否自动将yaml推送至仓库,so方便!
每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

为了通过这个demo尽可能多的测试circleci yaml功能,我 定义了5个job ,分别是:

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

我们来看下yaml,先有一个整体感觉, 最后会详细讲解yaml含义

version: 2
parameters:
  temp-workspace:
    type: string
    default: "/temp/workspace"
jobs:
  build:
    docker:
      - image: circleci/openjdk:8-jdk
    working_directory: ~/circleci-demo

    environment:
      JVM_OPTS: -Xmx3200m
      MVN_ARGS: -Dmaven.repo.local=.repo

    steps:
      - checkout

      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "pom.xml" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-

      - run: mvn clean install package ${MVN_ARGS}

      - save_cache:
          paths:
            -  .repo
          key: v1-dependencies-{{ checksum "pom.xml" }}

      - store_artifacts:
          path: target/
          destination: circleci-demo-jar

      - persist_to_workspace:
          root: ~/
          paths:
            - circleci-demo
  test:
    docker:
      - image: circleci/openjdk:8-jdk
    working_directory: ~/circleci-demo

    environment:
      JVM_OPTS: -Xmx3200m
      MVN_ARGS: -Dmaven.repo.local=.repo

    steps:
      - attach_workspace:
          at: ~/circleci-demo

      - run: | 
          cd circleci-demo
          mvn clean test ${MVN_ARGS}

      - store_test_results:
          path: circleci-demo/target/surefire-reports


  deploy-site1:
    docker:
      - image: circleci/openjdk:8-jdk 
    steps:
      - run: echo 'deploy sit1'


  deploy-site2:
    docker:
      - image: circleci/openjdk:8-jdk 
    steps:
      - run: echo 'deploy sit2'


workflows:
  version: 2
  circleci-demo-workflow:
    jobs:
      - build:
          filters:
            branches:
              only: master

      - test:
          requires:
            - build

      - approval-deploy:
          type: approval
          requires:
            - test

      - deploy-site1:
          requires:
            - approval-deploy
          filters:
            branches:
              only: master

      - deploy-site2:
          requires:
            - approval-deploy
          filters:
            branches:
              only: master

03

触发workflow

默认通过代码push触发yaml,我们来看下流水线整体效果:

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

build和test执行成功后,workflow会hold在手工确认job“approval-deploy”中

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

点击每个job,会进入单独的job界面,这里包含了很多信息,包括 Test summary (测试汇总)、 Artifacts (产物)、 Configuration (配置)、 Parameters (参数)等等,比如这次的build job,执行结束后生成了一堆产物:

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

这里是test job的测试结果

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

点击手工确认job,确定将jar发布至2个站点(这里的deploy job仅仅是模拟,执行了一个echo)。

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

确认后,deploy-site1和deploy-site2会并发执行

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

04

解读yaml

在上面我们看到了完整的yaml,是不是一头雾水,没关系,我们拆分来看。

(如果想了解更多的yaml语法,可以看下另一篇文章,传送门)

首先将整个yaml拆分为jobs和workflows,jobs和workflows都是yml的根key,根jobs的作用是定义任务的具体执行逻辑,而workflows的作用是编排job,关于workflows的更多介绍可以看下 《每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(二)超详细Pipeline语法解读》

4.1、jobs

jobs在yaml中结构:

version: 2
jobs:
  build:
    ...
  test:
    ...  

(1)build job

version: 2
jobs:
  build:
    #1.定义运行的环境,这里是包含jdk8的一个image
    docker:
      - image: circleci/openjdk:8-jdk

    #2.设置step共享的工作目录(step脚本相对这个目录执行)
    working_directory: ~/circleci-demo

        #3.定义job级别的环境变量,所有step共享
    environment:
      JVM_OPTS: -Xmx3200m
      MVN_ARGS: -Dmaven.repo.local=.repo

        #4.steps
    steps:
        #4.1 下载代码
      - checkout

      #4.2 拉取maven缓存
      - restore_cache:
          keys:
              # cachae key, 仅当pom.xml文件的校验和和上次一样(也就是没有变更)才会更新
            - v1-dependencies-{{ checksum "pom.xml" }} #
            # 如果上面的key失效用这个key代替
            - v1-dependencies-

            #4.3 打包
      - run: mvn clean install package ${MVN_ARGS}

            #4.4 上传缓存
      - save_cache:
              #缓存目录
          paths:
            -  .repo
          #换粗key,仅当pom.xml发生变更才更新
          key: v1-dependencies-{{ checksum "pom.xml" }}

          #4.5 上传产物(编译jar)
      - store_artifacts:
          path: target/
          destination: circleci-demo-jar

            #4.6 将workspace临时存储下来,供workflow下的其他job复用
      - persist_to_workspace:
          root: ~/
          paths:
            - circleci-demo

(2)test job

一个测试job,执行mvn test测试,并将测试产物上传

version: 2
jobs:
  test:
      #1.定义运行的环境,这里是包含jdk8的一个image
    docker:
      - image: circleci/openjdk:8-jdk
    #2.设置step共享的工作目录(step脚本相对这个目录执行)
    working_directory: ~/circleci-demo

        #3.定义job级别的环境变量,所有step共享
    environment:
      JVM_OPTS: -Xmx3200m
      MVN_ARGS: -Dmaven.repo.local=.repo

        #4.steps
    steps:
      #4.1 将build临时保留的workspace恢复到job中
      - attach_workspace:
          at: ~/circleci-demo

            #4.2执行mvn test测试脚本
      - run: | 
          cd circleci-demo
          mvn clean test ${MVN_ARGS}
            #4.3 上传测试产物
      - store_test_results:
          path: circleci-demo/target/surefire-reports

(3)deploy-site1/2 job

两个deploy job,模拟发布jar到两个站点

version: 2
jobs:       
  deploy-site1:
    docker:
      - image: circleci/openjdk:8-jdk 
    steps:
      - run: echo 'deploy sit1'


  deploy-site2:
    docker:
      - image: circleci/openjdk:8-jdk 
    steps:
      - run: echo 'deploy sit2'

4.2、workflows

workflows的作用就是编排job的先后顺序、指定job的执行条件等等

version: 2
workflows:
    #1. workflow版本
  version: 2
  #2. workflow 名称
  circleci-demo-workflow:
      #2.1 jobs
    jobs:
        #2.1.1 build job,仅在master分支触发
      - build:
          filters:
            branches:
              only: master

      #2.1.2 build job,仅在master分支触发,依赖build job
      - test:
          requires:
            - build

            #2.1.3 手动确认job,依赖test job
      - approval-deploy:
          type: approval
          requires:
            - test
            #2.1.4 发布job,依赖approval-deploy job, 和deploy-site2并发执行
      - deploy-site1:
          requires:
            - approval-deploy
          filters:
            branches:
              only: master

            #2.1.5 发布job,依赖approval-deploy job, 和deploy-site1并发执行
      - deploy-site2:
          requires:
            - approval-deploy
          filters:
            branches:
              only: master

引用

[1]Configuring CircleCI :https://circleci.com/docs/2.0/configuration-reference

[2]Getting Started Introduction:https://circleci.com/docs/2.0/getting-started/#creating-a-repository

系列预告 - 深入解读企业级持续交付系统CircleCI

Part 1:What is CircleCI ?

Part 2:Pipeline 语法完整解读

Part 3:手把手指导入门案例

【敬请期待】 Part 4: 全新UI界面

【敬请期待】 Part 5: 细品集成利器orbs

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

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

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

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

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

每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...

长按识别二维码关注我们

号外号外!!!

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

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

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


以上所述就是小编给大家介绍的《每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

算法数论

算法数论

裴定一、祝跃飞 / 科学出版社 / 2002年09月 / 19.00

本书论述了算法数论的基本内容,其中包括:连分数、代数数域、椭圆曲线、素性检验、大整数因子分解算法、椭圆曲线上的离散对数、超椭圆曲线。本书的特点是内容涉及面广,在有限的篇幅内,包含了必要的预备知识和数学证明,尽可能形成一个完整的体系。并且本书的部分内容曾多次在中国科学院研究生院信息安全国家重点实验室和广州大学作为硕士研究生教材使用。 本书可作为信息安全、数论等专业的研究生教材及相关专业的研究人......一起来看看 《算法数论》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

在线进制转换器
在线进制转换器

各进制数互转换器

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码