LoginSignup
3
2

More than 5 years have passed since last update.

MRマージ時に自動でデプロイプレビュー環境を閉じる[GitLab][Review Apps]

Last updated at Posted at 2019-04-21

3行で概要

前々回の記事では、デプロイプレビュー後に「ここにデプロイしたよ!」と教えてくれる設定の仕方を見ていきました。ですがこのままだとデプロイプレビュー用に立てた環境が残ってしまうので、環境を止める設定が必要です。今回はその設定をしていきます:chipmunk:

自動で止める

手動でとめる設定もできるのですが、これまでの内容をスライドにまとめていた時に、@tnirさんに自動で止める設定もできるみたいですよ、と教えていただいたのでやってみました。公式の説明ページはこちらです。 これも結構簡単なのでぜひやってみてください。

↓が.gitlab-ci.ymlから関連する部分を抜き出したものです。

.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_reviewstop_reviewstage: 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を見に行くときちんとデプロイプレビュー用に作成された環境が一覧から消えていることが確認できます。これにて完成です:sparkles:

完結

というわけで、無事MR作成→デプロイプレビュー環境を作成→MRに環境の情報を通知→マージ後に削除という基本的な流れができるようになったため、デプロイプレビューシリーズは一旦完結します(シリーズ化してないけど)。
これを試したいがために自分のポートフォリオのレポジトリをGitLabにコピーしてきたのでついでに載せておきます。最終形態はこちらです。

残課題

とはいえまだ残課題もあります。現在私の.gitlab-ci.ymlは、

▶︎create-job
1. amplifyにbranchを作成する
2. amplifyのjobをstartさせる

▶︎deploy_review
1. amplifyのbranchをupdateする

という構成になっていて、create-jobにはallow_failure: trueを設定しています。
これはなぜかというと、MR作成後に新たなpushがあった場合、branchだけはすでにamplify上にあるのでエラーとなるためです。本当はamplifyのbranchのリストを取得して、そこにあればupdateだし、なければcreateという流れが良いのだと思いますが、私のyml記述スキルが足りないため実現できていません:pensive: ですので、もし最終形態としてご紹介した.gitlab-ci.ymlを参考にされる方がいたらこの点ご注意ください。

最後まで目を通して頂きありがとうございました:snowman:

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2