2024.03.26

GitLab機能紹介 #8「.gitlab-ci.yml」

佐藤梨花
SB C&S株式会社 テクニカルマーケティングセンター
このエントリーをはてなブックマークに追加

こんにちは。SB C&Sの佐藤です。

本連載では開発サイクル全体を管理出来るプラットフォームである「GitLab」で使用される主な機能について解説していきます。

GitLabについてご存知ない、もしくは名前は知っているけれど具体的にどんな機能があるか気になる、そんな方におすすめの連載となっております。

第8回目は「.gitlab-ci.yml」について解説します。

.gitlab-ci.yml

「.gitlab-ci.yml」はGitLabでのCICDパイプラインを定義するために使用するファイルです。このファイルにCICDパイプラインで行いたい処理を記述することで、コミット時に自動でCICDパイプラインが実行され、結果も確認することが可能です。

従来であれば複数のツールを組み合わせて実現することが大半であったCICDパイプラインを、1プラットフォーム、そして1ファイルの定義で実行出来るのは、学習コストや運用コスト、そしてセキュリティ面でも大きなメリットをもたらします。

そして対象のソースコードと同じリポジトリでの保存/管理が可能であり、もちろんコード同様に変更履歴も保存されます。

また記述形式もyaml形式のため、既に知識のある方であれば簡単に書き始めることが可能という点も嬉しいポイントです。

作成方法

通常のソースコードファイル同様、GitLab上で作成することも可能ですし、ローカルで作成したファイルをコミットすることも可能です。

またGitLabでは「Pipeline Editor」という独自のエディタも用意されているため、GitLabプラットフォーム上で修正し、そのままコミットすることも可能です。

このPipeline Editorでは.gitlab-ci.ymlファイルのsyntaxチェックも行ってくれるため、単純な誤記についてはその場で確認修正することが可能です。

gitlab_202403_02_01.png

 

キーワード

記述形式はyamlですが、その中で使用されるキーワードが数多く存在し、このキーワードを使いこなすことでリッチなCICDパイプラインを定義することが可能です。

今回はその中からいくつかご紹介させていただきます。

その他キーワードについては公式ドキュメントをご参照ください。

stage

・パイプラインステージの名前と順序。
 stageの詳細を別途記述することも可能。

・使用例)stage :
      - test
      - build
      - sast
      - dast
      ⇒テスト実行⇒ビルド⇒SAST⇒DASTの順でジョブが実行される

variables

・ジョブの CI/CD 変数を定義するために使用。

・使用例)variables:

     DEPLOY_SITE: "https://example.com/"

artifacts

・成功時にジョブにアタッチするファイルとディレクトリのリスト。

・使用例)job:
      artifacts:
       paths:
       - binaries/
       - .config

      ⇒「.config」と「binaries」ディレクトリ内のすべてのファイルを含む成果物を作成

before_script/after_script

・ジョブの前後に実行される一連のコマンドをオーバーライド。

・使用例)job:
     before_script:
      - echo " scriptコマンドの前にこのコマンドが実行される。"
     script:
        - echo "before_scriptコマンドの後にこのコマンドが実行される"

dependencies

・成果物をフェッチするジョブのリストを指定することで、特定のジョブに渡される成果物を制限。

・使用例)build osx:
      stage: build
      script: make build:osx
      artifacts:
      paths:
       - binaries/

     build linux:
      stage: build
      script: make build:linux
      artifacts:
       paths:
       - binaries/

     test osx:
      stage: test
      script: make test:osx
      dependencies:
       - build osx

     test linux:
      stage: test
      script: make test:linux
      dependencies:
       - build linux

     deploy:
      stage: deploy
      script: make deploy
       environment: production
        ⇒この例では、build osxbuild linuxという2つのジョブが
         成果物を持っており、test osxが実行されると、
         build osxの成果物がダウンロードされ、ビルドの
         コンテキストで抽出されます。同じことが、test linux
         build linux
からの成果物についても起こります。

image

・Docker イメージを使用。

・使用例)default:
      image: ruby:3.0
      ⇒パイプラインのデフォルトとしてruby:3.0を使用

release

・リリース用ファイルの作成

・使用例)release_job:
      stage: release
      image: registry.gitlab.com/gitlab-org/release-cli:latest
      rules:
       - if: $CI_COMMIT_TAG
      script:
       - echo "Running the release job."
      release:
       tag_name: $CI_COMMIT_TAG
       name: 'Release $CI_COMMIT_TAG'
        description: 'Release created using the release-cli.'

when

・ジョブを実行する条件(e.g. on_success, never, manual)を構成。

・使用例)stages:
     - build
     - cleanup_build
     - test
     - deploy
     - cleanup

     build_job:
      stage: build
      script:
      - make build

     cleanup_build_job:
      stage: cleanup_build
      script:
       - cleanup build when failed
     when: on_failure ⇒前のステージで少なくとも 1 つのジョブが失敗した場合にのみ実行

     test_job:
      stage: test
      script:
       - make test

     deploy_job:
      stage: deploy
      script:
       - make deploy
      when: manual ⇒前のステージのジョブのステータスに関係なく、ジョブを実行
      environment: production

     cleanup_job:
      stage: cleanup
      script:
       - cleanup after jobs
       when: always ⇒常に実行

実行

コミット毎に実行され、実行中の様子や結果をUIから確認可能です。
実行ログや成果物についても画面から取得可能なため、パイプラインの全てをGitLabプラットフォーム上で見渡すことが可能になります。

実行中パイプラインの確認

gitlab_202403_02_02.png

Jobの詳細も確認可能

gitlab_202403_02_03.png

過去実施されたパイプラインの履歴も保存され、確認可能

gitlab_202403_02_04.png

その他情報

GitLabではパイプライン定義用のテンプレートを多数用意しています。

公式リポジトリから確認可能ですので、ぜひ一度ご覧ください。

gitlab_202403_02_05.png

まとめ

CICDの構築はDevOps実現における重要な役割を担っています。それが1プラットフォームで実現出来るGitLabの強みを、改めて感じることのできる機能であることがご確認いただけたのではないでしょうか。

yamlファイルの記述法さえ分かっていれば比較的簡単に取り組むことの可能であり、そして大きな影響を与えることが可能な機能ですので、ぜひ一度お試しいただければ幸いです。

次回はプロジェクト管理者には必見の機能であるアナライズ機能について解説します。アナライズ機能では「GitLabの使用(活用)状況」の確認/分析や、CICDパイプライン、コードレビューの分析、そしてプロジェクトへの貢献度等が確認できます。

プロジェクトを1プラットフォームで管理するGitLabの特性を存分に活かした機能になりますので、こちらもぜひ併せてご覧ください。

GitLabの特設サイトはこちら

GitLab特設サイトでは、GitLabの製品情報や
トライアル(無償試用版)をお申込みいただけます。
ぜひ、特設サイトをご確認ください。

この記事の著者:佐藤梨花

SB C&S株式会社 テクニカルマーケティングセンター

勤怠管理システムの開発(使用言語:Java)に約8年間従事。
現在はエンジニア時の経験を活かしたDevOpsやDX推進のプリセールスとして業務に精励しています。


DevOps Hubのアカウントをフォローして
更新情報を受け取る

  • Like on Feedly
    follow us in feedly

関連記事

このエントリーをはてなブックマークに追加

お問い合わせ

DevOpsに関することなら
お気軽にご相談ください。

Facebook、TwitterでDevOpsに関する
情報配信を行っています。