1. Orbsについて
CircleCI OrbsはCircleCIでパブリッククラウドを操作したり、GoやPython等のテスト環境を容易に準備するためのライブラリツールです。設定ファイルはconfig.ymlでYAMLファイル形式で記述します。
2. ファイル構成
CircleCIの構成ファイルはgitリポジトリのルートディレクトリに以下の様に設置します。今回見ていくファイルはこの中のconfig.ymlです。
/git-root-folder
|-.circleci
| |- config.yml
|
|- README.md
|- app.yaml
|- main.py
|- requirements.txt
https://github.com/hashihei/python/blob/master/circleci/google_app_engine/.circleci/config.yml
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)の上、デプロイしてみます。
https://github.com/hashihei/python/blob/master/circleci/google_app_engine/.circleci/config.yml
バージョンと共通で利用する環境の定義
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/[[emailprotected]](/cdn-cgi/l/email-protection)
browser-tools: circleci/[[emailprotected]](/cdn-cgi/l/email-protection)
ワークフローの指定
ワークフローを利用する事でジョブの実行順序、並列実行、実行条件等を指定する事ができます。
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'