内容简介:默认的模版有点简单,我们丰富一下
研发效能领域洞察系列
CircleCI 在 2019 年被 Forrester 评为云原生连续集成领域的领导者,并被提名为多个Best DevOps Tools列表。CircleCI 是第一个通过 FedRAMP认证的CI / CD 工具,每月在 Linux,macOS,Docker 和 Windows 构建环境中处理超过 3000 万个构建。这篇文章将带领大家创建一个CircleCI入门级workflow。
作者简介
刘仁权(弈阁)
蚂蚁金服 高级开发工程师
刘仁权,花名弈阁,蚂蚁金服研发效能部高级开发工程师,主要从事DevOps平台持续交付系统研发工作,在Pipeline编排、容器化调度、CI提效、插件体系等方面有丰富的实战经验。
01
注册
进入CircleCI界面, https://circleci.com/signup/ ,支持通过Github或Bitbucket登陆。
这篇文档我们用Github作为输出源来测试,首先需要先在Github中创建一个测试project,circleci-demo https://github.com/liurq93/circleci-demo。
在Github创建完project后,我们进入CircleCI界面点击Github登陆,首次登陆会请求授权给CircleCI,点击确认即可。
02
初始化yaml
我们 点击"ADD PROJECTS" 进入Projects界面 ,这里可以查看到所有从GIthub同步过来的project信息,我们可以选择刚刚在github创建的project开始一个workflow
点击Set Up Project按钮,可以发现CircleCI为我们提供了不同语言的默认模版的流水线yaml, 这里我们选择maven
默认的模版有点简单,我们丰富一下
为了通过这个demo尽可能多的测试circleci yaml功能,我 定义了5个job ,分别是:
我们来看下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,我们来看下流水线整体效果:
build和test执行成功后,workflow会hold在手工确认job“approval-deploy”中
点击每个job,会进入单独的job界面,这里包含了很多信息,包括 Test summary (测试汇总)、 Artifacts (产物)、 Configuration (配置)、 Parameters (参数)等等,比如这次的build job,执行结束后生成了一堆产物:
这里是test job的测试结果
点击手工确认job,确定将jar发布至2个站点(这里的deploy job仅仅是模拟,执行了一个echo)。
确认后,deploy-site1和deploy-site2会并发执行
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 3:手把手指导入门案例
【敬请期待】 Part 4: 全新UI界面
【敬请期待】 Part 5: 细品集成利器orbs
如果还想要了解更多,这里有更多研发效能内容推荐:
趋势研究:从0到1打造软件供应链
点击查看原文:《 【前沿探索】安全交付:GCP 的安全软件供应链 》
硬核的俄文会议转播,如何打造下一代IDE?
点击查看原文:《 JetBrains OpenDay 2019 盘点:如何打造下一代 IDE 》
长按识别二维码关注我们
号外号外!!!
蚂蚁金服研发效能团队招募进行中, 高级iOS开发工程师/技术专家、资深前端开发工程师/技术专家、高级 Java 开发工程师/技术专家、技术支持、静态程序分析技术专家、产品专家 等 十余+ 岗位持续开放,让我们一起助力内部及外部伙伴研发效能的持续提升,「效」傲江湖:rocket::rocket::rocket:
详细岗位信息扫描下方二维码
如果你对任何岗位感兴趣,欢迎发简历到: AntLinkE@antfin.com
以上所述就是小编给大家介绍的《每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(三)带你4步创建入门级wor...》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何构建高效自主的容器云交付平台?
- Drone 0.8.3 发布,为容器构建的持续交付平台
- Docker微服务-镜像构建交付和使用Rancher进行容器创建管理
- 每月处理 3000万+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)
- 中国金茂构建面向地产业务的云管平台,强化IT服务交付与安全性
- 每月处理 3000w+ 构建的企业级持续交付系统 CircleCI 是怎么炼成的?(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。