GitLab機能紹介 #8「.gitlab-ci.yml」
こんにちは。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チェックも行ってくれるため、単純な誤記についてはその場で確認修正することが可能です。
キーワード
記述形式は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 osxとbuild 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プラットフォーム上で見渡すことが可能になります。
実行中パイプラインの確認
各Jobの詳細も確認可能
過去実施されたパイプラインの履歴も保存され、確認可能
その他情報
GitLabではパイプライン定義用のテンプレートを多数用意しています。
公式リポジトリから確認可能ですので、ぜひ一度ご覧ください。
まとめ
CICDの構築はDevOps実現における重要な役割を担っています。それが1プラットフォームで実現出来るGitLabの強みを、改めて感じることのできる機能であることがご確認いただけたのではないでしょうか。
yamlファイルの記述法さえ分かっていれば比較的簡単に取り組むことの可能であり、そして大きな影響を与えることが可能な機能ですので、ぜひ一度お試しいただければ幸いです。
次回はプロジェクト管理者には必見の機能であるアナライズ機能について解説します。アナライズ機能では「GitLabの使用(活用)状況」の確認/分析や、CICDパイプライン、コードレビューの分析、そしてプロジェクトへの貢献度等が確認できます。
プロジェクトを1プラットフォームで管理するGitLabの特性を存分に活かした機能になりますので、こちらもぜひ併せてご覧ください。
GitLabの特設サイトはこちら
GitLab特設サイトでは、GitLabの製品情報や
トライアル(無償試用版)をお申込みいただけます。
ぜひ、特設サイトをご確認ください。
この記事の著者:佐藤梨花
勤怠管理システムの開発(使用言語:Java)に約8年間従事。
現在はエンジニア時の経験を活かしたDevOpsやDX推進のプリセールスとして業務に精励しています。
DevOps Hubのアカウントをフォローして
更新情報を受け取る
-
Like on Facebook
-
Like on Feedly