AWS備忘録8~circleCI~
EC2の環境構築が一通り終わった(はず)ので、circleCIをまとめていきたいと思います。
CI/CDツールとはなんぞやメモ
継続的インテグレーション/継続的デリバリー
継続的な価値提供と継続的なリリースの維持
アプリやインフラ環境のコードのテストを自動化して、常にリリース可能の状態にするのがCI。
リリースまで行うのがCD。
やることや目的はほぼ同じだけど、どこまでやるかで違いが出る。
JenkinsやcircleCI、AWS codeBuildなどがある。
・イベントトリガーとは
基本的に自動で実行する。
バージョン管理システムの連携(Github)、定時実行、指定した処理が完了したときなど。
試しにビルドしてみる
読んでいても、いまいち理解しきれないので実際にやってみようと思います。試しにcircleCI公式のドキュメント通りにやってみます。
リポジトリの作成
新規でリポジトリを作成します。READMEのところにチェックを付けます。
.ymlファイルの追加
テスト環境の構築方法や実行するテスト内容の定義するために YAML ファイルを使います。リポジトリを作成した際に.circleCIという隠しフォルダができているようなので、ディレクトリ配下に作成します。
ymlファイルの内容のメモ
・checkout→リポジトリからデータを取り出す。
・run→コマンドラインプログラムを呼び出す。
・echo→入力された文字列をそのまま出力。
ビルドの実行
circleCIにアクセスして、ログインします。
すでにgithubのアカウントを提携してあるので、ダッシュボードからプロジェクトに移り、先ほど作成したリポジトリのSet Up Projectをクリックします。
Start Buildingをクリックすると新しいymlファイルを追加するか聞かれますが、先ほど作ったファイルがあるのでAdd Manuallyをクリックします。Start Buildingをクリックします。
そうするとビルドが実行されます。
リポジトリにソースコードが無く、config.ymlにテストコードが含まれていなくても成功したと扱われているようです。
ビルドを意図的に失敗させる
githubで先ほどのconfig.ymlのecho"A first hello"をnotacommandに変更し、Commit changeをクリックします。circleCIのBuildページに戻ると新しくビルドされ、FAILEDになっています。
Workflows 機能を使ってみる
Workflowsメモ
ジョブの集まりや実行順序などのルールを決めることができる。
・定期的に実行したいジョブのスケジュール化ができる。
・ジョブの実行とトラブルシューティングが同時にできる。
・実行中のステータスをリアルタイムで確認できる。
config.ymlのbuild:以降をコピー&ペーストし、それぞれone、twoと名前を付けます。echoコマンドの内容も変えます。sleepコマンドで実行したときに分かりやすいように時間をおきます。
末尾にworkflowsのセクションを追加します。配置はどこでも可。だいたい先頭か末尾のようです。
コミットを変更し、circleCIのbuildページに戻ります。
SUCCESSになっています。と言いたいところですがFAILEDになりました。
確認したところ、いろいろやらかしてました。下のコードでちゃんとSUCCESSになります。
SUCCESSをクリックすると二つのジョブが実行されたのを確認できます。
さらにジョブごとに詳細を見ることができます。エラーが起きたときはここを確認しました。
Workspaces機能も使ってみる
workspacesメモ
ジョブの間でデータ共有ができる。
workflowの進行につれて下のジョブにファイルを転送できる。
config.ymlを以下のように書き換えます。
version: 2
jobs:
one:
docker:
- image: circleci/ruby:2.6.5
steps:
- checkout
- run: echo "A first hello"
- run: mkdir -p sample
- run: echo "Trying out workspaces" > sample/echo-output
- persist_to_workspace:
root: sample
paths:
- echo-output
two:
docker:
- image: circleci/ruby:2.6.5
steps:
- checkout
- run: echo "A more familiar hi"
- attach_workspace:
at: sample
- run: |
if [[ $(cat sample/echo-output) == "Trying out workspaces" ]]; then
echo "It worked!";
else
echo "Nope!"; exit 1
fi
workflows:
version: 2
one_and_two:
jobs:
- one
- two:
requires:
次はEC2にビルドしてみたいと思います。