AWS備忘録8~circleCI~

EC2の環境構築が一通り終わった(はず)ので、circleCIをまとめていきたいと思います。

CI/CDツールとはなんぞやメモ

継続的インテグレーション/継続的デリバリー

継続的な価値提供と継続的なリリースの維持

アプリやインフラ環境のコードのテストを自動化して、常にリリース可能の状態にするのがCI。

リリースまで行うのがCD。

やることや目的はほぼ同じだけど、どこまでやるかで違いが出る。

JenkinsやcircleCI、AWS codeBuildなどがある。

・イベントトリガーとは

基本的に自動で実行する。

バージョン管理システムの連携(Github)、定時実行、指定した処理が完了したときなど。

試しにビルドしてみる

読んでいても、いまいち理解しきれないので実際にやってみようと思います。試しにcircleCI公式のドキュメント通りにやってみます。

リポジトリの作成

新規でリポジトリを作成します。READMEのところにチェックを付けます。

vpcウィザード

.ymlファイルの追加

テスト環境の構築方法や実行するテスト内容の定義するために YAML ファイルを使います。リポジトリを作成した際に.circleCIという隠しフォルダができているようなので、ディレクトリ配下に作成します。

vpcウィザード

ymlファイルの内容のメモ

・checkout→リポジトリからデータを取り出す。

・run→コマンドラインプログラムを呼び出す。

・echo→入力された文字列をそのまま出力。

ビルドの実行

circleCIにアクセスして、ログインします。

すでにgithubのアカウントを提携してあるので、ダッシュボードからプロジェクトに移り、先ほど作成したリポジトリのSet Up Projectをクリックします。

Start Buildingをクリックすると新しいymlファイルを追加するか聞かれますが、先ほど作ったファイルがあるのでAdd Manuallyをクリックします。Start Buildingをクリックします。

そうするとビルドが実行されます。

vpcウィザード

リポジトリにソースコードが無く、config.ymlにテストコードが含まれていなくても成功したと扱われているようです。

ビルドを意図的に失敗させる

githubで先ほどのconfig.ymlのecho"A first hello"をnotacommandに変更し、Commit changeをクリックします。circleCIのBuildページに戻ると新しくビルドされ、FAILEDになっています。

vpcウィザード

Workflows 機能を使ってみる

Workflowsメモ

ジョブの集まりや実行順序などのルールを決めることができる。

・定期的に実行したいジョブのスケジュール化ができる。

・ジョブの実行とトラブルシューティングが同時にできる。

・実行中のステータスをリアルタイムで確認できる。

config.ymlのbuild:以降をコピー&ペーストし、それぞれone、twoと名前を付けます。echoコマンドの内容も変えます。sleepコマンドで実行したときに分かりやすいように時間をおきます。

vpcウィザード

末尾にworkflowsのセクションを追加します。配置はどこでも可。だいたい先頭か末尾のようです。

コミットを変更し、circleCIのbuildページに戻ります。

SUCCESSになっています。と言いたいところですがFAILEDになりました。

vpcウィザード

確認したところ、いろいろやらかしてました。下のコードでちゃんとSUCCESSになります。

vpcウィザード

SUCCESSをクリックすると二つのジョブが実行されたのを確認できます。

vpcウィザード

さらにジョブごとに詳細を見ることができます。エラーが起きたときはここを確認しました。

vpcウィザード

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にビルドしてみたいと思います。

いいなと思ったら応援しよう!