毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
本エントリーは、Qiita Adventカレンダー 2021 GitLab の記事です。
0. はじめに
2021年12月03日のQiita Adventカレンダー 2021 GitLa
に以下の記事を書きました。
GitLabのEnvironmentを使いこなせ!(Environmentってなに?編) - Qiita
https://qiita.com/ynott/items/79d567ecb0cfbce722a8
GitLabの機能にあるEnvironment機能を解説しました。
本エントリーは、.gitlab-ci.ymlの書き方を解説します。
1. いきなり本題
以下のように書きます!
重要なのはenvironment
の部分です。
stages:
- deploy
- stop
deploy_staging:
stage: deploy
script:
- echo "Deploy to staging server" # <--- デプロイするスクリプトを書きます
environment:
name: staging # <--- (2)
url: https://staging.example.com # <--- (3)
on_stop: stop_staging # <--- (4)
only:
- main
stop_staging: <--- (4)
stage: deploy
script:
- echo "Stop deployed" # <--- デプロイを削除するスクリプトを書きます
when: manual
environment:
name: staging
action: stop
これを実行すると、以下のようにGitLabの「Deployment」>「環境」①に「staging」という名前(2)で環境が追加されます。
上の図で③の部分にある「Open」のリンクは、(3)で示したURLが設定されます。
④の部分は「停止」ボタンを押すと(4)で示したジョブが実行されます。
2. deploy_stagingの解説
deploy_stagingでは、scriptにデプロイするスクリプトを書きます。
dockerならばdocker run、Kubernetesならkubectl apply、ec2をterraformでデプロイしてもOKです。
environment.nameにこのデプロイの環境名を記載します。
environment.urlにこのデプロイで参照されるURLを記載します。このURLは「Open」のリンクに自動的に適用されます。
3. stop_stagingの解説
stop_stagingでは、scriptに削除するスクリプトを書きます。
パイプライン内で実行ないようにwhen: manual
をつけます。
environment:nameにこのデプロイを削除したい環境名を記載します。
environment:actionにstop
とだけ書いておきます。
4. 環境を自動停止したい
一定の時間が経ったら、自動的に環境を停止できます。
auto_stop_in: 1 week
を入れておきます。
review_app:
script: deploy-review-app
environment:
name: review/$CI_COMMIT_REF_SLUG
on_stop: stop_review_app
auto_stop_in: 1 week
参考URL: Stop an environment after a certain time period
5. リンクのURLがデプロイ中に決まる場合
これは、例えばリンクのURLにブランチ名などが入っている場合です。
http://<ブランチ名>.example.jp/ といったURLにする場合、 `<ブランチ名>部分は任意なのでenvironment:urlで指定することができません。 この場合、environment:urlの指定を変数にして、その変数をscript内で宣言し、.envファイルに書き出します。 書き出した.envファイルを
artifacts:reports:dotenv`で指定します。
deploy_staging:
stage: deploy
script:
- echo "Deploy to staging"
- DYNAMIC_ENVIRONMENT_URL="https://$CI_COMMIT_REF_SLUG.example.jp" # <--- environment:urlに指定したいURLを変数定義
- echo "DYNAMIC_ENVIRONMENT_URL=$DYNAMIC_ENVIRONMENT_URL" >> test.env # <--- 変数定義した内容を.dotenvファイル書き出す
artifacts:
reports:
dotenv: test.env # <--- .dotenvファイルを保存する
environment:
name: review/$CI_COMMIT_REF_SLUG
url: $DYNAMIC_ENVIRONMENT_URL # <--- .dotenvファイル内で指定した変数を記載
on_stop: stop_review
6. まとめ
地味に便利な機能だと思うのですが、紹介している記事が少なかったので書いてみました。
7. 参考
日本語情報:
環境とデプロイメント | GitLab
GitLab Document
Environments and deployments | GitLab