職場にあったので何となく目を通してみたら、思ったより初歩から説明してあったのでちゃんと読むことにした。
CircleCI、というかCIについてはほとんど何も知らないレベルだったが、ちゃんと入っていけた。
最後のほうは流し読みだから大した知識は身についていないが、取っ掛かりを持てたという意味で、意義はあった。
以前の記事に書いたように自分のサイトを構築し直してCircleCIでビルドやデプロイを行えるようにしたのだが、そのキッカケもこの特集を読んだことだった。
すごく難しい印象があったけど、「複雑なことをやろうとしなければ結構いけるかもしれない」と思えた。実際、いけた。
すごく便利だし、強いプログラマたちに少し近づけた気がして楽しかった。
敷居が高そうな技術でも、興味があったりいずれ習得する必要があると思っているのなら、積極的に触ってみるのが大事だなと学んだ。
初歩的な知識でも、それがあるのとないのとでは大きく違うし、関連する記事を見つけたときも「取り敢えず読んでみよう」と積極的になれる。
以下、メモ。
第1章 はじめてのCircleCI
- XP(エクストリーム・プログラミング)のプラクティスの一つとして、CI(継続的インテグレーション)がある
- CIとは、コードを常にテスト、ビルドすることで、プロダクトの品質を保つことを目的としている
- CD(継続的デリバリ)というものもある
- デプロイを自動化することで、デプロイに伴う作業負担の減少や、スピーディーなリリースを実現する
- コードを常にテスト、ビルドする、という部分を自動化するためのツールとしてCIツールがある
- CircleCIはCIツールのひとつで、SaaS(Software as a Service)として提供されている
- SaaSなので、自分でサーバーを用意する必要がない
- CircleCIは、Docker環境の中でCIを実行する
- CircleCIはワークフローという仕組みにより、並列処理などの複雑な実行が可能になっている
- CircleCIの利用目的は、ビルド、テスト、デプロイの3つに大別できる
- ビルドできる状態の維持、テストにパスした状態の維持、CD、を実現する
第2章 環境構築
- CircleCIは
circleci
コマンドでローカルでジョブを実行できる circleci
はDocker上で実行するので、まずDockerをインストールしておく必要がある- 次にCircleCIのCLIツールをダウンロードする
$ circleci update check
でアップデートがないかチェックできる- 設定ファイルは
.circleci/config.yml
$ circleci config validate
で、設定ファイルの構文チェックが出来る$ circleci local execute
でローカルでジョブを実行できる- 以下の
.circleci/config.yml
が、シンプルな例
- 以下の
version: 2 jobs: build: docker: - image: circleci/node:8.11.3 steps: - run: echo "hello world"
- デフォルトでは
build
ジョブを実行するが--job
オプションでジョブを指定できる -e
オプションで環境変数を設定できる$ circleci local execute
を以下のようにして試してみる$ circleci local execute --job build2
だとnope
が出力される$ circleci local execute --job build2 -e HOGE=foo
だとfoo
が出力される
version: 2 jobs: build: docker: - image: circleci/node:8.11.3 steps: - run: echo "hello world" build2: docker: - image: circleci/node:8.11.3 steps: - run: echo ${HOGE-nope}
第3章 基本設定
- 設定は全て
.circleci/config.yml
に書かれる - 主要なキー
version
- CircleCIのバージョンを指定する
jobs
- ジョブを1つ以上定義する。1つしか定義しない場合は必ず
build
という名前にしないといけない。
- ジョブを1つ以上定義する。1つしか定義しない場合は必ず
docker
- ジョブを実行する環境を記述。
docker
以外にもmachine
なども使える。
- ジョブを実行する環境を記述。
steps
- 実行したいコマンドを1つ以上定義する
- ユーザーが自由に記述できる
run
と、checkout
のようにCircleCIによって用意されているステップがあるrun
はname
とcommand
の組み合わせという形でも記述できる
version: 2 jobs: build: docker: - image: circleci/node:8.11.3 steps: - run: name: Run install command: yarn install - run: yarn build
- CircleCIが予め用意しているステップ(の一部)
第4章 ビルド
- ビルドするためにいつも行っていたコマンドを設定ファイルに記述することで、CircleCIでビルドを行えるようになる
- CircleCIには、予め用意されている「ビルトイン環境変数」というものがある
- CircleCIの実行時に最初に表示される
- アプリケーションにビルド情報を埋め込むのに使ったりする
- ここで一覧を見れる
- CircleCIでは各種言語やミドルウェアのプリビルドイメージをDockerHubに用意しているので、それを利用できる
- 言語イメージは
ruby
やnode
、サービスイメージはmysql
などがある
- 言語イメージは
- アプリケーションのビルドだけでなく、Dockerイメージのビルドも可能
第5章 テスト
- ビルドと同じようにテストもCircleCIで自動化出来る
store_test_results
というステップを使うことでレポートファイルを保存できる- CircleCIの並列実行には、パラレルジョブとマルチコンテナの2種類がある
- パラレルジョブは、同じジョブを2つ以上のコンテナを使って並列に実行する方法
- 例えばテストファイルを分割して並列実行することなどが出来る
- マルチコンテナは、複数のコンテナを使ってジョブを並列実行する方法
- 依存関係のない処理を並列で走らせることで、実行時間の短縮が期待できる
- パラレルジョブは、同じジョブを2つ以上のコンテナを使って並列に実行する方法