3行で概要
前々回の記事では、デプロイプレビュー後に「ここにデプロイしたよ!」と教えてくれる設定の仕方を見ていきました。ですがこのままだとデプロイプレビュー用に立てた環境が残ってしまうので、環境を止める設定が必要です。今回はその設定をしていきます
自動で止める
手動でとめる設定もできるのですが、これまでの内容をスライドにまとめていた時に、@tnirさんに自動で止める設定もできるみたいですよ、と教えていただいたのでやってみました。公式の説明ページはこちらです。 これも結構簡単なのでぜひやってみてください。
↓が.gitlab-ci.yml
から関連する部分を抜き出したものです。
deploy_review:
stage: deploy
environment:
name: review/${CI_COMMIT_REF_NAME}
url: https://${CI_COMMIT_REF_NAME}.${APP_ID}.amplifyapp.com
on_stop: stop_review
only:
- branches
except:
- master
script:
- aws amplify update-branch --app-id ${APP_ID} --branch-name ${CI_BUILD_REF_NAME}
stop_review:
stage: deploy
variables:
GIT_STRATEGY: none
when: manual
environment:
name: review/${CI_COMMIT_REF_NAME}
action: stop
script:
- aws amplify delete-branch --app-id ${APP_ID} --branch-name ${CI_BUILD_REF_NAME}
それでは、ポイントごとにみていきたいと思います。
1. ストップするjobは環境をデプロイするjobと同じstageに配置する
deploy_review
もstop_review
もstage: deploy
になっています。
2. デプロイするjobの環境にon_stop
でストップするjobを設定する
これがないと、手動で「環境を止める」を押したとしてもストップするjobが実行されません。
on_stop: stop_review
で設定しています。
3. jobを実行する条件を設定する
デプロイプレビュー自体はデプロイjobの実行タイミングをonly: merge_requests
で設定しても動くのですが、 ストップするjobはデプロイjobの実行タイミングを
only:
- branches
except:
- master
**にしないと実行されませんでした。**ちょっとこのあたり、2つの条件の違いがよくわかっていないのでもう少し勉強しないといけなさそうです。
4. ストップするjobのvariablesにGIT_STRATEGY: none
を設定する
だいたいこんな感じです。基本的には上記公式リンクのサンプルを参考にすれば問題なく動くと思います。このように設定して、MRマージ後にAWS ConsoleでAmplifyを見に行くときちんとデプロイプレビュー用に作成された環境が一覧から消えていることが確認できます。これにて完成です
完結
というわけで、無事MR作成→デプロイプレビュー環境を作成→MRに環境の情報を通知→マージ後に削除という基本的な流れができるようになったため、デプロイプレビューシリーズは一旦完結します(シリーズ化してないけど)。
これを試したいがために自分のポートフォリオのレポジトリをGitLabにコピーしてきたのでついでに載せておきます。最終形態はこちらです。
残課題
とはいえまだ残課題もあります。現在私の.gitlab-ci.yml
は、
▶︎create-job
- amplifyにbranchを作成する
- amplifyのjobをstartさせる
▶︎deploy_review
- amplifyのbranchをupdateする
という構成になっていて、create-job
にはallow_failure: true
を設定しています。
これはなぜかというと、MR作成後に新たなpushがあった場合、branchだけはすでにamplify上にあるのでエラーとなるためです。本当はamplifyのbranchのリストを取得して、そこにあればupdateだし、なければcreateという流れが良いのだと思いますが、私のyml記述スキルが足りないため実現できていません ですので、もし最終形態としてご紹介した
.gitlab-ci.yml
を参考にされる方がいたらこの点ご注意ください。
最後まで目を通して頂きありがとうございました