LoginSignup
8
3

More than 1 year has passed since last update.

GitLabのEnvironmentを使いこなせ!(.gitlab-ci.ymlで使う編)

Last updated at Posted at 2021-12-04

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

本エントリーは、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の部分です。

.gitlab-ci.yml
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)で環境が追加されます。
image.png

上の図で③の部分にある「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

GitLabとKubernetesで作る、自動で起動・停止できるブランチ別環境 - JX通信社エンジニアブログ

Travis CIからGitLab CIに移行した — Commerce Hack

8
3
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
8
3