August
3rd,
2020
- CI/CD: Continuous Integration, Continuous Delivery
- CircleCI とは
- .circleci/config.yml の書き方
- workflowsで使いたい設定
- local CLIの利用
- まとめと蛇足
- References
- 補足
以前の職場で用意した資料を一部修正して公開します。
CI/CDとはなにか、CircleCIでどんなことができるのかを紹介し、 実際にどういった設定、操作ができるのかをまとめました。
補足には近しいサービスと簡単な特徴を記載しておきます。
CI/CD: Continuous Integration, Continuous Delivery
- アプリケーション作成時の品質改善のための手法
- 具体的にはテストやデプロイの自動化の仕組みを用意すること
CircleCI とは
CI/CDの仕組みを提供するSaasタイプのサービス
何をしてくれるのか
- ビルド
- 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の管理画面でAdd Projectが必要
- CircleCI version 1 系は circle.yml に記載していた。(が、ymlが version 2 系で書かれていれば動作する模様)
注 : 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
- https://circleci.com/product/
- https://www.redhat.com/ja/topics/devops/what-is-ci-cd
- https://en.wikipedia.org/wiki/Continuous_integration
- https://circleci.com/docs/2.0/getting-started/
- https://sue445.hatenablog.com/entry/2018/12/07/114638
- https://www.slant.co/versus/2482/16890/~gitlab-ci_vs_bitbucket-pipelines
補足
CI機能を提供するサービス
- CircleCI https://circleci.com/product/
- iOSのビルドできる!
- TravisCI https://travis-ci.com/
- CircleCIよりも設定ファイルの記述量が抑えられるらしい。
- Weacker https://www.oracle.com/corporate/acquisitions/wercker/
- Werckerは1リポジトリ1 Dockerイメージ(CircleCIは1ジョブ1イメージにできる)
- スケジューラはない
- oracleに買収されてた。。
- Gitlab CI https://docs.gitlab.com/ee/ci/
- Gitlabと連携しやすい(あたりまえか
- Merge When Pipeline Succeeds 便利
- CIの実行(Runner)を自前で用意できる。(ローカルMacでiOSビルドとか
- Bitbucket Pipeline https://www.atlassian.com/ja/software/bitbucket/features/pipelines
- atlassianなので、Jiraとの連携もよいらしい。
- freeだと 時間制限 50min/month
- SaaS (1) ,
- circleci (1) ,
- CI/CD (1) ,
- travisci (1) ,
- weacker (1) ,
- gitlabci (1) ,
- bitbucket pipeline (1)