Circle CI

木子由 · · 717 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

概念

Jobs

任务是step的集合,单个任务必须指定一种executor

executor type:

executor type文档

  • 在Docker映像内(docker)
  • 在Linux虚拟机(VM)映像中(machine)
  • 在macOS VM映像中(macos)
  • 在Windows VM映像内(windows)
version 2
jobs:
  build1: # job name
    docker: 
      - image: buildpack-deps:trusty
      - image: postgres:9.4.1
        environment: 
          POSTGRES_USER: root

steps

可执行命令的集合

steps:
  - checkout
  - run: 
      name: Running tests
      command: make test

cache

可以缓存诸如项目中源代码的依赖的文件或者目录。

version: 2
jobs:
  build1:
    docker: 
      - image: circleci/ruby:2.4-node
      - image: circleci/postgres:9.4.12-alpine
    steps:
      - checkout
      - save_cache: 
          key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}
          paths:
            - ~/circleci-demo-workflows

  build2:
    docker:
      - image: circleci/ruby:2.4-node
      - image: circleci/postgres:9.4.12-alpine
    steps:
      - restore_cache: # Restores the cached dependency.
          key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}

workflow

工作流定义了一系列的任务和他们的运行顺序。它可以使任务并行,穿行和按计划或者手动控制运行。工作流的作用:

  • 通过实时状态反馈来运行和解决任务中的问题
  • 将需要定期执行的工作流按计划执行
  • 通过多个并行任务来进行有效的版本测试
  • 快速部署到多个不同的平台
平行任务
workflows:
  version: 2
  build:
    jobs:
      - "ruby-2.2"
      - "ruby-2.3"
      - "ruby-2.4"
顺序任务
workflows:
  version: 2
  build-test-and-deploy:
    jobs:
      - build
      - test:
          requires:
            - build
      - deploy:
          requires:
            - test
通过手动批准来控制工作流

工作流可以设置为需要手动批准再进行下一个任务。任何有权利访问代码库的人都可以继续工作流。为了做到这一点,在任务列表中添加type: approval

workflows:
  version: 2
  build-test-and-approval-deploy:
    jobs:
      - build
      - test: 
          requires:
            - build
      - deploy: 
          type: approval 
          requires: 
            - test
在夜晚执行的任务

默认工作流的触发依赖于每次git push,为了按照计划执行工作流,我们可以添加triggers键来特殊化工作调度。

下面的例子中,我们将运行一个旨在夜晚12点后运行的工作流。使用POSIX crontab语法指定cron键。crontab man page来查看基本语法。

workflows:
  version: 2
  commit:
    jobs:
      - test
      - deploy
  nightly:
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
                - master
                - beta
    jobs:
      - coverage
使用任务上下文来分享环境变量

下面的例子展示了如何使用上下文来在一个工作流的四个平行任务中分享环境变量

workflows:
  version: 2
  build-test-and-deploy:
    jobs:
      - build
      - test1:
          requires:
            - build
          context: org-global
      - test2:
          requires:
            - test1
          context: org-global
      - deploy:
          requires:
            - test2
分支级别的任务执行

下面的例子会展示,如何在三个分支配置任务流。工作流会在忽略在任务底下的分支键,如果想在工作流中添加任务级别的分支,需要移除任务级别的分支,转而描述它

workflows:
  version: 2
  dev_stage_pre-prod:
    jobs:
      - test_dev:
          filters:  
            branches:
              only:
                - dev
                - /user-.*/
      - test_stage:
          filters:
            branches:
              only: stage
      - test_pre-prod:
          filters:
            branches:
              only: /pre-prod(?:-.+)?$/

CircleCI 镜像

最佳实践

  • 最好确定好版本号,不适用last版本。Debian系统需要在尾部添加上-jessie和-stretch。

  • 使用镜像的便签来标注语言和操作系统circleci/golang:1.8.6-jessie

注意: 如果没有固定标签,Docker将会使用latest标签。latest引用的是最有一个稳定版本的镜像。这样的镜像时十分不稳定的,所以最佳时间推荐使用稳定的镜像。

语言镜像变体

Circleci维持了一些语言变量的变体镜像。要使用这些变种将以下后缀之一添加到图像标记的末尾。

  • -node 包括用于多语言应用程序的Node.js.
  • -browsers 包括Chrome,Firefox,Java 8和Geckodriver.
  • -browsers-legacy 包括Chrome,Firefox,Java 8和PhantomJS.
  • -node-browsers 结合了-node和-browsers变体.
  • -node-browsers-legacy 结合了-node和-browsers-legacy变体.

服务器镜像

服务镜像是数据库等服务的便利镜像。这些镜像应该在语言镜像之后列出,使之成为二级镜像。

  • buildpack-deps
  • DynamoDB
  • MariaDB
  • MongoDB
  • MySQL
  • PostgreSQL
  • Redis

服务镜像变体

使用RAM加速需要添加-ram后缀。举例,circleci/postgres:9.5-postgis => circleci/postgres:9.5-postgis-ram。

Obs

https://circleci.com/orbs/registry/

Deploy To GCP

在circle ci中使用git-crypt

- run:
    name: Install git-crypt
    command: >-
      sudo dpkg --add-architecture i386 &&
      sudo apt-get update &&
      sudo apt-get install g++ libssl-dev &&
      git clone --depth=1 https://github.com/AGWA/git-crypt &&
      cd git-crypt &&
      sudo make &&
      sudo make install
    - run:
    name: Decode git-crypt key
    command: echo "$GIT_CRYPT_KEY" | base64 -d > git-crypt.key
    
    - run:
    name: Decrpyt Secrets
    command: git-crypt unlock git-crypt.key

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:木子由

查看原文:Circle CI

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

717 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传