成果物を本番環境にデプロイするにあたってCircleCIを利用するとのことで,学習した内容を共有してみたい.
1. CIとは
Continuous Integrationの略で、継続的インテグレーション.
複数人のコードを統合したときのエラー発見を早期に行える.
ビルドやテストを自動化し簡単に行うことができ,ビルドが常に通る状態を維持しやすくなる.
ミルプラトーではAPIで叩くことで,本番環境で運用したりしている.
2. CircleCI入門
CircleCIの公式日本語リファレンスが充実している.自分のGithubアカウントで色々試してみると,感覚が掴めてくるだろう. GithubやDockerと同様,慣れれば簡単なので,がんばろう.
2.1 基本的な使い方の手順
- ディレクトリに.circleciフォルダを作成し,その中でconfig.ymlを作成する.このconfig.ymlで色々設定することで,circleCIに指示を出す感じになる.
- Gitでpushまで行うと,CircleCIが自動で変更を検知し,勝手にビルドしてくれる.CircleCIにログインしてビルドがちゃんと通っているか確認する.通ってなければ書き直す.
2.2 config.yml
Dockerfileやdocker-compose.ymlと同じ感じ.独特のお作法が色々あるので,公式ドキュメントを参照しながら動かしていこう.以下はconfig.ymlの記述例となる.
config.yml
# 最新バージョンは2.1.最新バージョン2.1でないとcommandやexecutorsが使えないので,2.1を使おう.
version: 2.1
# stepsを実行するための環境を定義.dockerやlinuxなど.
executors:
my-executor:
# デフォルトでは~/project. ~は「チルダ」と読み,Linuxにおけるユーザのホームを表す.
working_directory: ~/app
docker:
# dockerイメージを指定.circleciの公式イメージを利用するのが良い.circleciを動作させるのに必要なパッケージが含まれているから.
- image: circleci/python:3.8-buster
resource_class: xlarge
# 実行処理を行う.
jobs:
build:
executor: my-executor
steps: # buildジョブを構成するステップ.
# ソースコードを作業ディレクトリにチェックアウトする.この場合では~/app.
- checkout
# Install ffmpeg
- restore_cache:
key: dependency-cache-ffmpeg-v0.0.1
- run:
name: Install ffmpeg
command: | # 複数コマンドを実行する際にcommandを用いる
sudo apt -y update
sudo apt install -y ffmpeg
- save_cache:
key: dependency-cache-ffmpeg-v0.0.1
# cacheにその他のキャッシュ全般.venvにpythonの依存関係のキャッシュ.
paths:
- ~/cache
# pythonの依存関係をインストールする
# 依存関係をインストールする前に,利用できるキャッシュがあるか検索する.
- restore_cache:
key: dependency-cache-{{ checksum "requirements.txt" }}-20201127
- run:
name: Install python dependencies
# Python の依存関係をインストールする仮想環境を作成してアクティブ化する.
command: |
# 仮想環境の作成 python -m venv <name>
python3 -m venv venv
# 仮想環境をアクティベートする
. venv/bin/activate
pip3 install --upgrade pip
pip3 install -r requirements.txt
# キャッシュを保存する.次回restoreするため.
- save_cache:
key: dependency-cache-{{ checksum "requirements.txt" }}-20201127
# 指定したパスにキャッシュを作成する.生成されたキーに一致するキャッシュが既に存在する場合、CircleCI は新しいキャッシュを保存しない.
paths:
- "venv"
# Predict
- run:
name: run.py
command: |
. venv/bin/activate
python3 run.py
# 2.1ではworkflowsへのversion指定は必要がない
# workflowsを用いない場合は,job内のbuildが自動的に選択されて実行される.
workflows:
build:
jobs:
# jobで定義したbuildを実行する
- build
# Dockerfileは環境構築のマニュアルとして作成する.CircleCIやAWS,ローカル環境など,様々な環境に対応する元のスクリプトとなる.
# DLCはコストの関係で用いない.CircleCIに任せる.Dockerfileを利用するよりもキャッシュを利用しやすい.
参考文献
公式レファレンスが充実しているので,それを読めばほとんどの知識は得られる.ブログの数は多くなく,公式の方が内容も良い.
- 設定ファイルの概要 - CircleCI
- 入門ガイド - CircleCI
- Executor タイプを選択する - CircleCI
- CircleCI のビルド済み Docker イメージ - CircleCI
- カスタム ビルドの Docker イメージの使用 - CircleCI
- Using CircleCI workflows to replicate Docker Hub automated builds | CircleCI
- 環境変数の使用 - CircleCI
- Docker レイヤー キャッシュの有効化 - CircleCI
- How to Build a Docker Image - Image Caching | CircleCI | Building Docker Images - Docker Layer Caching
- API を使用したジョブのトリガー - CircleCI
- CircleCI での Python アプリケーションの構成 - CircleCI
- 2.0 プロジェクトのチュートリアル - CircleCI