1. Orbsについて
CircleCI OrbsはCircleCIでパブリッククラウドを操作したり、GoやPython等のテスト環境を容易に準備するためのライブラリツールです。設定ファイルはconfig.ymlでYAMLファイル形式で記述します。
前回の記事でCircleCI Orbsを利用したのですが、今回はconfig.ymlの内容を確認していきます。
2. ファイル構成
CircleCIの構成ファイルはgitリポジトリのルートディレクトリに以下の様に設置します。今回見ていくファイルはこの中のconfig.ymlです。
/git-root-folder
|-.circleci
| |- config.yml
|
|- README.md
|- app.yaml
|- main.py
|- requirements.txt
3. サンプルコード
3-1. YAMLの基本
CircleCIを始める上で最低限把握しておかないといけないYAML文法は多くなく、以下の5点程度です。
- 指定したいパラメータ(key)に対し値(value)をセットで記載する。
- パラメータの階層はインデントで表現する。
- 各コレクション(複数のデータを要素として持つデータ)は”- “で指定する
- コメントは”#”で指定する
- CirclCIでは操作する為の独自のkeyセットが存在する
サンプル
key: value - entry1 - entry2: argument-key: argument-value # this is comment.
3-2. CircleCIの基本文法
参考ファイル
今回はGCPのAppEngineを利用する想定で、ローカル(CirclCI上)でテスト(ローカルWebサーバでのpytest)の上、デプロイしてみます。
バージョンと共通で利用する環境の定義
versionは必ず指定します。executorsは任意で指定でき、jobで利用するdockerイメージファイル等を共通で指定する場合に利用します。
# *[]内は任意の文字列で指定 version: 2.1 executors: [executor-name]: working_directory: [~/project] docker: - image: [google/cloud-sdk:latest]
docker image
imageはcircleciが準備しているものの他に、各ベンダが公開しているものも利用可能です。
docker: - image: [docker-image-name:version]
CircleCIのImageと使い方
CircleCI DockerImageとPre-Install-Tool
Public Docker Images
Orbsの利用宣言
orbsの利用は複数指定できます。
orbs: gcp-cli: circleci/[email protected] browser-tools: circleci/[email protected]
ワークフローの指定
ワークフローを利用する事でジョブの実行順序、並列実行、実行条件等を指定する事ができます。
workflows: version: 2.1 [workflow-name]: jobs: - [job-name1] - [job-name2]: filters: branches: ignore: #このブランチの際にはこのjobは実行しない - [ignore git branch name] - [job-name3]: requires: #このジョブが成功している時に実行する - [job-name2] filters: branches: only: # masterブランチの時のみ実行する - [master]
jobの指定
jobはjobsの中に記載します。予約keyは以下の通り。
executor:
DockerImage,Workdirectory等を指定
– checkout
gitリポジトリからソースコードをダウンロード
– run
ジョブを構成するステップ。ビルド,テスト,デプロイ等で分割して実施内容を記載する
– restore_cache: , – save_cache:
ジョブ実行環境をキャッシュ保存、リストアする
– store_artifacts:
ビルド成果物等を取得する(CircleCI画面よりDL可能。)
– store_test_results:
テスト結果を保存する(CircleCI画面よりXML形式で閲覧可能。)
コードサンプル
jobs: [job-name]: executor: [executor-name] steps: - checkout - run: name: [job step name] command: | echo "sample job." echo "run毎にシェルセッションが切りかわるイメージ" - restore_cache: key: deps2-{{ .Branch }}-{{ checksum "[requirements.txt]" }} - run: command: | python3 -m venv env source env/bin/activate pip install -r [requirements.txt] mkdir -pv test-reports - save_cache: key: deps2-{{ .Branch }}-{{ checksum "[requirements.txt]" }} paths: - 'env' - run: command: | source env/bin/activate pytest -rapP --durations=10 --junitxml=[test-reports/junit.xml ] [test_main.py] - store_artifacts: path: [test-reports] - store_test_results: path: [test-reports] - add_ssh_keys: fingerprints: - 'YO:UR:FI:NG:ER:PR:IN:TS'
4. 参考URL
参考URL
- CircleCI プロジェクトチュートリアル
- CircleCIでのPythonアプリケーションの設定
- Orbs、ジョブ、ステップ、ワークフロー
- ジョブの実行をWorkflowで制御する
- config.yml 設定ガイド
- ビルドアーティファクトの保存
- 依存関係のキャッシュ
- Circle CIでサポートされている言語
- テストメタデータの収集