以前の職場で用意した資料を一部修正して公開します。

CI/CDとはなにか、CircleCIでどんなことができるのかを紹介し、 実際にどういった設定、操作ができるのかをまとめました。

補足には近しいサービスと簡単な特徴を記載しておきます。

CI/CD: Continuous Integration, Continuous Delivery

  • アプリケーション作成時の品質改善のための手法
  • 具体的にはテストやデプロイの自動化の仕組みを用意すること

CircleCI とは

CI/CDの仕組みを提供するSaasタイプのサービス

https://circleci.com/product/

何をしてくれるのか

  • ビルド
    • Github(or Bitbucket)のコードからアプリケーションをビルドします。
    • コミットするたびにビルドしてくれる。(設定は.circle/config.yml に。後述します)
  • テスト
    • コミットするたびにコンテナ(もしくはVM)を立ち上げテストを走らせてくれる。
  • デプロイ
    • 本番環境にsshして〜のような手動作業がなくせる。
  • 通知
    • ビルド、テスト結果の通知。問題にすばやく気づける。

.circleci/config.yml の書き方

Githubリポジトリに.circleci/config.ymlを配置することで実行してくれる。

version: 2
jobs:
    job1:
        docker:          # machine(VM), macOS など選べるらしい
            - image: ... # dockerの場合は、dockerイメージを指定
        steps:
            - checkout   # CI環境上でGitリポジトリをコピー
            - run: ...   # コマンドの実行
workflows:               # ジョブのパイプライン設定
    version: 2
    build:
        jobs:
            - job1
...

注 : CircleCI 1.0 から利用していたユーザーは、新たにconfig.yml ファイルを使うことで、以前とは異なるブランチで 2.x 環境におけるビルドを試すことができます。 従来の circle.yml の設定内容は残るため、.circleci/config.yml のないブランチである CircleCI 1.0 環境の実行にも支障はありません。

※ version 1 系は 2018.8.31 で提供終了している https://circleci.com/blog/sunsetting-1-0/

workflowsで使いたい設定

requires

ジョブの依存関係を設定できる。

jobs:
  - build
  - test:
    requires:
      - build
...

※ ジョブ間のコンテナは別なのでデータの同期などは save_caches などの設定が必要

filters(only, ignore)

実行するジョブをブランチ絞ってくれる

filters:
  deplyToProduction:
    only:
      - master        # masterブランチでのみ実施
  deplyToDevelopment:
    only:
      - develop       # developブランチのみ
  deplyToExperimental:
    ignore:
      - master        # masterブランチは無視

triggers

スケジューリングして動かす。

nightly:
  triggers:
    - schedule:
        cron: "0 0 * * *"

local CLIの利用

https://circleci.com/docs/2.0/local-cli/

install

ローカルで以下を実行。ダウンロードからインストールまで。

$ curl -fLSs https://circle.ci/cli | bash

ymlファイルの検証

$ circleci config validate -c circle.yml
Error: Unable to parse YAML
while parsing a block mapping
 in 'string', line 1, column 1:
    version:
    ^
expected <block end>, but found '-'
 in 'string', line 2, column 1:
    -
    ^

ローカル環境(docker)でのジョブの実行

$ circleci local execute --job JOB_NAME
  • 環境変数は -e HOST=xxx -e PASS=yyy で設定できる

まとめと蛇足

  • CircleCIは開発プロセスの自動化の仕組みを提供してくれている
  • 新しいプロジェクトにアサインされたときは、まずリポジトリの .circleci/config.yml を見つけたらまずそこから読むと追いやすいかも

References

補足

CI機能を提供するサービス


WEB U PROJECT

Freelance Web Enginner.
Python / Data / AWS / GCP


CircleCIはじめました | Web U Project