GitLab CI/CD
GitLab CI/CDは、GitLabに組み込まれたツールで、継続的な開発手法によるソフトウェア開発を実現します。
- 継続的インテグレーション(CI)
- 継続的デリバリー(CD)
- 継続的デプロイ(CD)
概要
小さなコード片をGitリポジトリのコードベースにプッシュすると、継続的インテグレーションが実行されます。これにより、コードの変更をメインブランチにマージする前にビルド、テスト、検証ができます。
継続的なデリバリーとデプロイは、さらに一歩進んだCIで構成されています。リポジトリのデフォルトブランチにプッシュするごとに、アプリケーションを本番環境にデプロイします。
これらの方法論により、バグやエラーの早期発見が可能になります。また、本番環境にデプロイされたすべてのコードが、アプリケーション標準に準拠することを保証します。
これらの方法論とGitLab CI/CDの完全な概要については、GitLabでCI/CDを導入をご覧ください。
利用を開始
GitLab CI/CDはリポジトリのルートに.gitlab-ci.yml
というファイルを追加することで設定します。このファイルは、リポジトリ内のコードに変更があった場合にパイプラインを作成、実行します。パイプラインは順番に実行される1つ以上のステージで構成されており、それぞれのステージは、並行して実行される1つ以上のジョブを含むことができます。これらのジョブ(またはスクリプト)は、GitLab Runnerエージェントによって実行されます。
GitLab CI/CDを使い始めるには、以下のドキュメントを読むことをお勧めします。
- GitLab CI/CDの仕組み。
- 基本的なパイプラインのアーキテクチャ。
- GitLab CI/CDの基本的なワークフロー。
-
初めて
.gitlab-ci.yml
を書くためのステップバイステップガイド。
他のCI/CDツールから移行する場合は、便利なリファレンスをチェックしてください。
また、UIから利用できる .gitlab-ci.yml
テンプレート のいずれかを使って始めることもできます。新しいファイルを作成し、用途に合わせてテンプレートを選択して調整することで、それらを利用できます。
より広範な概要については、CI/CD入門ガイドを参照してください。
GitLab CI/CDの仕組みを理解したら、.gitlab-ci.yml
の完全なリファレンスを参照してください。
GitLab CI/CDと共有RunnerはGitLab.comで有効になっており、すべてのユーザーが利用できます。ただし、ユーザーのパイプラインクォータの制限があります。
概念
GitLab CI/CDは、ビルドとデプロイを記述して実行するために多くの概念を使用しています。
概念 | 説明 |
---|---|
パイプライン | パイプラインを通してCI/CDプロセスを構成します。 |
環境変数 | 変数/値のキーペアに基づいて値を再利用します。 |
環境 | アプリケーションをさまざまな環境(ステージング、本番環境など)にデプロイします。 |
ジョブのアーティファクト | ジョブのアーティファクト(成果物)を出力、使用、再利用します。 |
依存関係のキャッシュ | 依存関係をキャッシュすることで、より高速な実行が可能になります。 |
GitLab Runner | 独自のGitLab Runnersを設定してスクリプトを実行します。 |
設定
GitLab CI/CDは多くの設定オプションをサポートしています。
設定 | 説明 |
---|---|
パイプラインのスケジュール | パイプラインを必要に応じて実行するようにスケジュールします。 |
.gitlab-ci.yml のカスタムパス
| CI/CD設定ファイルのカスタムパスを定義します。 |
CI/CD用のGitサブモジュール | Gitサブモジュールを使用するためのジョブを設定します。 |
CI/CD用のSSHキー | CIパイプラインでSSHキーを使用します。 |
パイプラインのトリガー | APIを使用してパイプラインを開始します。 |
マージリクエスト用のパイプライン | マージリクエストでパイプラインを実行するように、パイプラインを設計します。 |
Kubernetesクラスターとのインテグレーション | プロジェクトをGoogle Kubernetes Engine(GKE)または既存のKubernetesクラスターに接続します。 |
GitLabとRunnerを大規模リポジトリに最適化 | 大規模リポジトリを扱うための推奨戦略です。 |
.gitlab-ci.yml の完全なリファレンス
| GitLab CI/CDで使えるすべての属性が記載されています。 |
特定の操作は、ユーザーとジョブの権限に従ってのみ実行できることに注意してください。
機能セット
たくさんの機能があるGitLab CI/CDを利用して、目的に応じた設定を簡単に行うことができます。 その機能セットは、DevOpsのステージに応じて下の表のようになっています。
機能 | 説明 |
---|---|
Configure | |
Auto DevOps | アプリのライフサイクル全体を設定します。 |
ChatOps | チャットからCIのジョブを起動して、結果をチャンネルに返します。 |
Verify | |
ブラウザパフォーマンステスト | 保留中のコード変更がパフォーマンスへ与える影響を迅速に判断します。 |
CI services | Dockerコンテナとベースイメージをリンクします。 |
コード品質 | ソースコードの品質を分析します。 |
外部リポジトリ用のGitLab CI/CD | GitHubやBitbucket Cloudのリポジトリと組み合わせて、GitLab CI/CDのメリットを享受します。 |
対話型Webターミナル | 実行中のジョブをデバッグするために、対話型のWebターミナルを開きます。 |
JUnitテスト | マージリクエスト上でスクリプトの失敗を直接識別します。 |
Dockerイメージの使用 | Dockerと一緒にGitLabとGitLab Runnerを使って、アプリケーションのビルドとテストをします。 |
Release | |
自動デプロイ | アプリケーションをKubernetesクラスターの本番環境にデプロイします。 |
Dockerイメージのビルド | GitLab CI/CDを使用してDockerベースのプロジェクトをメンテナンスします。 |
カナリアデプロイメント | 一部のPodにのみ機能をリリースし、指定した割合のユーザーベースに対して、一時的にデプロイされた機能を有効にします。 |
デプロイボード | Kubernetes上で稼働している各CI/CD環境の現在の健全性とステータスを表示します。 |
フィーチャーフラグ | フィーチャーフラグで、デプロイした機能を制御します。 |
GitLab Pages | 静的なウェブサイトをデプロイします。 |
GitLabのリリース | Gitタグにリリースノートを追加します。 |
レビューアプリ | GitLab CI/CDを設定してコードの変更をプレビューします。 |
クラウドにデプロイ | アプリケーションを主要なクラウドプロバイダーにデプロイします。 |
Secure | |
コンテナの脆弱性スキャン | Dockerコンテナに既知の脆弱性がないかチェックします。 |
依存関係の脆弱性スキャン | 既知の脆弱性がないか、依存関係を分析します。 |
ライセンスコンプライアンス | プロジェクトの依存関係を検索して、そのライセンスを確認します。 |
セキュリティテストレポート | アプリの脆弱性をチェックします。 |
使用例
CIの使用例 のページで、さまざまなアプリのフレームワーク、言語、プラットフォームでGitLab CI/CDを使用するためのプロジェクトコードのサンプルとチュートリアルをご覧ください。
また、GitLabでは、GitLab CI/CDを使用するようにあらかじめ設定されたサンプルプロジェクトも提供します。
管理
GitLab管理者として、GitLab CI/CDのデフォルトの動作を変更できます。
- GitLabインスタンス全体。
- パイプラインの設定を利用して、特定のプロジェクト。
こちらも参照してください。
リファレンス
なぜGitLab CI/CDなのか
詳しくはこちらを参照してください。
「なぜCI/CDが必要なのか」のプレゼンテーションも参照してください。
破壊的な変更
GitLab CI/CDが進化するために、一部に破壊的な変更が必要でした。
13.0
- バックポートされた
os.Expand
の削除 - Fedora 29パッケージサポートの削除
- macOS 32ビットサポートの削除
debug/jobs/list?v=1
エンドポイントの削除- Docker Executorのサービスを定義する際の文字列の配列のサポートを削除
- registerコマンドの
--docker-services
フラグを削除 - レガシーなビルドディレクトリのキャッシュを削除
FF_USE_LEGACY_VOLUMES_MOUNTING_ORDER
フィーチャーフラグを削除- Windows Server 1803のサポートを削除
12.0
- refspecを使ってGitリポジトリをクローン/フェッチ。
- 古いキャッシュの設定。
- 古いメトリクスサーバの設定。
-
FF_K8S_USE_ENTRYPOINT_OVER_COMMAND
を削除。 - EOLに達したLinuxディストリビューションのサポートを削除。
- ヘルパーイメージ更新のコマンドラインAPI。
-
git clean
の古いフローを削除。
11.0
- 破壊的な変更はありません。
10.0
- 破壊的な変更はありません。
9.0
- GitLab 9.0でCIの変数名を変更。非推奨のCIの変数とGitLab 9.0以降で使うべき変数については、こちらをご覧ください。
- 新しいCIのジョブの権限モデル。 GitLab 8.12で何が変わったのか、そしてそれがあなたのジョブにどのように影響するのかをご確認ください。 ジョブ内でGitサブモジュールやLFSオブジェクトにアクセスするための新しい方法が登場しました。