LoginSignup
8
13

More than 1 year has passed since last update.

10分で理解: GitLab CI/CD の設定

Posted at

CI/CD とは

  • Continuous Integration: ソースコードが変更されるたびに、テスト等の定型処理を自動実行。
  • Continuous Deployment: 公開サーバーへのコードの配置を自動実行。(テストを通った、などの条件を満たした場合)

例題

ここでは、以下のような CI/CD を GitLab 上で構築することをゴールとして、概念から実際の設定までを説明していく。

  • Merge Request が作られるたびにテストを自動実行する。このテストが成功しない限りは Merge ボタンを押せない。
  • release branch に対する Merge Request が承認され(Merge ボタンが押され)release branch に commit が為されたときには、release branch の内容を GitLab Pages に自動公開する。

概念

Stage, Job, Pipeline

  • Job: CI/CD の中で実行される実際の動作の単位。(例)build-job, test-job-1, release-job
  • Stage: Job をどのような順番で実行するのかを制御する。(例)Build stage, Test stage
  • Pipeline: commit などのきっかけで起動される Job 集合。
  • 各 job はいずれかの stage に属する。
  • stage 間には順番があり、前段 stage に全部の job が成功しない限り、後段の job は実行されない。

GitLab の UI 表現で表すと、たとえば Pipeline は下図のようになる。

image.png

Job の中身

  • Job は GitLab サーバー上で Container としてそれぞれ独立して実行される。
  • Container の Image を選ぶことで多様な処理が可能。たとえば Apline Linux Image を用いて shell script を実行することができる。

Rule

Job が起動される条件は Rule によって制御できる。例えば、今回の例題の場合は、以下のようになる。

条件 build-job test-job release-job
MR作成 実行 実行
release branch への commit 実行 実行

Artifact

  • Job はそれぞれが独立した Container として実行されるため、Job 間での情報の受け渡しが必要な場合は明示的な指示が必要。
  • Artifact: ある Container 上での Job 実行が終了した後で、後段の Job 群に伝えたい Container 内部のファイル群。たとえば、build-job はビルド結果を含むフォルダー以下を artifact とする。

実例

Pipeline の記述

GitLab 上の各 repo のルートディレクトリの .gitlab-ci.yml という設定ファイルが、その repo に関する Pipeline を記述する。今回の例題の場合は以下のようになる。

.gitlab-ci.yml
stages:                 # stages を定義
    - build
    - test
    - deploy

build-job:
    rules:
        - if: $CI_MERGE_REQUEST_IID             # Merge Request 生成時
        - if: $CI_COMMIT_BRANCH == "release"   # release branch への commit 時
    stage: build          # build ステージで実行
    image: node:latest    # node.js の docker image を用いた container 上で実行
    script:
        - yarn install
        - yarn build.     # react アプリを想定した例
    artifacts:
        paths:
            - build/      # ビルド成果物の入った "build" フォルダーを後段の job で利用できるように保存

test-job:
    rules:
        - if: $CI_MERGE_REQUEST_IID
    stage: test
    image: node:latest
    script:
        - yarn install
        - yarn test

pages:                    # この pages という job 名は特別で、この job の artifact が静的 Web サイトになる
    rules:
        - if: $CI_COMMIT_BRANCH == "release"
    stage: deploy         # build ステージの job (build-job) が成功した後で、deploy ステージで実行
    image: alpine:latest  # Alpine linux の docker image を用いた container 上で実行
    variables:
        GIT_STRATEGY: none  # git repo は clone しない
    script:
        - mv build public   # build-job から引き継いだ "build" フォルダーを "public" にリネーム
    artifacts:
        paths:
            - public        # pages job の出力として "public" フォルダーを保存。このフォルダー以下が静的 Web サイトとなる

GitLab 上での操作

.gitlab-ci.yml の編集

普通に repo をチェックアウトして .gitlab-ci.yml を編集することもできるが、下図のように GitLab UI 上で直接編集することも可能。

image.png

Pipeline の状態確認

image.png

GitLab Pages の確認

image.png

詳細情報

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