GitLab CIクイックスタート
GitLab CIクイックスタートガイドへようこそ。このガイドでは、GitLabでのプロジェクト設定から、シンプルなCI設定をコードで作成するまでの手順をご案内します。GitLab CIを素早く始められるよう、わかりやすく解説します。
このクイックスタートガイドでは、以下のタスクについて説明します:
- 新規プロジェクトの作成
- 初めてのCI/CD設定の作成とパイプラインの実行
- 実行結果へのアクセスと確認
- ジョブ実行を決定するルールベースの条件の導入
- パイプラインテンプレートを活用した有益な設定のシームレスな統合
開始前の準備
GitLabアカウントをお持ちであることをご確認ください。アカウントをお持ちでない場合は、こちらからサインアップしてください。
プロジェクト内では、コードベース、CI設定、計画、分析、チームメンバーなど、さまざまなコンポーネントが管理されます。このガイドでは、readmeファイルのみを含むまっさらな状態の新規プロジェクトを作成します。
- トップバーの右側にあるプラスアイコンをクリックし、新規プロジェクト/リポジトリを選択して新規プロジェクトを作成します
- 空のプロジェクトの作成を選択します。
プロジェクト名
にmy-projectと入力します。 - プロジェクトを作成をクリックします。
- おめでとうございます!初めてのプロジェクトの作成に成功しました。
GitLabでは、CI設定はYAML構文を使用してコードで定義されます。この設定では、ジョブの実行、ジョブの順序、ジョブの条件などに関するランナーマシンへの指示を指定します。CI設定を定義するには、リポジトリのルートに配置する**.gitlab-ci.yml**というファイルを作成する必要があります。このガイドでは、Web IDEを使用してこのファイルを作成・編集します。
Web IDEにアクセスするには、プロジェクト内にあるWeb IDEクイックボタンをクリックするだけです。Web IDE内で、左側のファイルエクスプローラーに移動します。ファイルエクスプローラー内で右クリックし、新しいファイルオプションを選択します。新しく作成したファイルに**.gitlab-ci.yml**という名前を付けます。
ジョブ実行の順序は、設定で定義されたステージによって決まります。このガイドでは、build、test、packageの3つのステージを、この順序で定義します。以下のコードを**.gitlab-ci.yml**ファイルにコピー&ペーストしてください:
stages:
- build
- test
- package
2つのテキストファイルを作成するシナリオを想定してみましょう。これらのファイルを連結した時に「Hello world.」という文字列が含まれることが最も重要です。パイプラインジョブを使用して、この要件をビルド、テスト、パッケージ化することが目標です。
以下のタスクを実行するビルドジョブを指定します:「Hello,」という単語を含むテキストファイルの作成、「World」という単語を含む別のテキストファイルの作成、2つのファイルの結合内容を保存する3番目のファイルを生成します。3番目のファイルをアーティファクトとして保存し、testとpackageステージの後続ジョブがアクセスできるようします。stagesブロックの下に以下のコードを挿入します:
build-job:
stage: build
script:
- echo "Hello " | tr -d "\n" > file1.txt
- echo "world" > file2.txt
- cat file1.txt file2.txt > compiled.txt
artifacts:
paths:
- compiled.txt
ビルドの整合性を検証するため、テストジョブを組み込みます。このジョブは、compiled.txtファイルに期待される「Hello world」という文字列が実際に含まれているかを確認します。ビルドジョブの下に以下のコードを挿入してください:
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world '
テストが正常に完了すると、次の目標はコードのパッケージを生成することです。これを実現するため、パッケージジョブを含めます。テストが失敗した場合、パイプライン全体が失敗とみなされ、処理が継続されないことにご注意ください。テストジョブの下に以下のコードを挿入してください:
package:
stage: package
script: cat compiled.txt | gzip > packaged.gz
artifacts:
paths:
- packaged.gz
stages: # ジョブのステージリストと実行順序
- build
- test
- package
build-job:
stage: build
script:
- echo "Hello " | tr -d "\n" > file1.txt
- echo "world" > file2.txt
- cat file1.txt file2.txt > compiled.txt
artifacts:
paths:
- compiled.txt
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world'
package:
stage: package
script: cat compiled.txt | gzip > packaged.gz
artifacts:
paths:
- packaged.gz
サンプルプロジェクトの設定ファイルへのリンクはこちらです。
おめでとうございます!初めてのCIパイプラインを構築しました。
プロジェクト内で継続的インテグレーション(CI)を有効にするには、.gitlab-ci.ymlファイルをリポジトリにプッシュする必要があります。このファイルがリポジトリのルートに配置されると、プロジェクトに対するすべてのコミットが自動的にCIパイプラインを開始します。このファイルをサーバーにプッシュした直後に、初回のパイプラインが開始されます。
- ファイルエクスプローラーの左側にあるマージアイコンをクリックします。
- 「CI設定を追加」などのコミットメッセージを入力します。
- コミット&プッシュをクリックします。
- 「新しいブランチにコミットしますか?」と表示されたら、「いいえ、現在のブランチmainを使用」を選択します。
- プロジェクトに戻るには、左下にあるプロジェクトに移動ボタンをクリックします。
おめでとうございます!プロジェクトがすべてのコードコミットに対してCIパイプラインを自動的に開始するよう正常に設定されました。
パイプラインの実行中は、CI/CDタブでステータスを監視できます。この機能により、ジョブの進行状況を簡単に追跡でき、実行ステータス(開始済み、成功、失敗など)や、ジョブスクリプトによって生成された出力も確認できます。
- GitLabプロジェクトに移動し、左側のメニューを確認します。
- メニューのCI/CDをクリックし、パイプラインをクリックします。
- パイプラインページで、ステータス列のパイプラインボタンを見つけます。それをクリックしてパイプライングラフを開きます。
- パイプライングラフ内でジョブとそれぞれのステータスを確認できます。
- 特定のジョブを詳しく調べるには、ジョブをクリックしてジョブコンソールを開きます。このコンソールには、Runnerマシンで実行されたすべてのステップが表示されます。
- packageジョブコンソールを開いて、Runnerによって処理されたステップを確認します。
- packageジョブはアーティファクトを生成します。右側にあるダウンロードボタンをクリックしてダウンロードできます。
- これらの手順に従うことで、パイプラインステータスを効果的に追跡し、ジョブの詳細を検査し、パイプライン実行中に生成された関連するアーティファクトやパッケージを取得できます。
** 初めてのパイプラインの実行に成功しました。おめでとうございます!パイプラインが成功し、結果を確認してジョブアーティファクトをダウンロードします。**
テストジョブの期待値を変更すると、テストジョブが失敗し、パイプライン全体も失敗します。
- testジョブを編集し、「Hello World」という文字列を「hello world」(小文字)に変更します。
- コードの変更をコミットし、ステップ4と同様にパイプラインを確認します。
- パイプラインを確認すると、testジョブが失敗していることがわかります。さらに、後続のpackageジョブは開始されず、想定通りにパイプライン自体が失敗しています。
ステップ5では、ジョブの失敗がパイプライン全体を失敗させることを確認しました。以下の手順で、ジョブの失敗がパイプライン全体の失敗を引き起こすタイミングを決定するロジックをパイプラインに導入できます:
- ジョブの失敗がパイプラインの失敗につながる条件を評価します。たとえば、mainまたはデフォルトブランチでジョブが失敗した場合はパイプラインの失敗を強制し、他のブランチでのジョブ失敗はパイプラインの継続を許可することができます。
- 失敗動作を制御するルールを定義します。$CI_COMMIT_BRANCHなどの変数を活用して現在のブランチを確認し、それに基づいて決定を行うことができます。
- 適切な条件を設定し、ジョブをallow_failure: falseまたはallow_failure: trueとしてマークするかを指定します。
- テストジョブにrules/if条件を追加します。
- ブランチに基づいてtrueまたはfalseに設定されたallow_failureキーワードを使用します。
test:
stage: test
script: cat compiled.txt | grep -q 'Hello world'
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
allow_failure: false
- if: $CI_COMMIT_BRANCH
allow_failure: true
パイプライン設定のセットアップを効率化するため、GitLabが提供する組み込みパイプラインテンプレートを活用できます。これらのテンプレートは、セキュリティスキャン、AWSデプロイなど、一般的なユースケースに対応した事前定義された設定を提供します。
組み込みパイプラインテンプレートを利用するには、以下の手順に従ってください:
- ビルド、テスト、デプロイなど、さまざまなシナリオに対してGitLabが提供する利用可能なパイプラインテンプレートを確認します。テンプレートはこちらで確認できます。
- 要件に合ったテンプレートを選択します。
- .gitlab-ci.ymlファイルでテンプレートを参照することで、パイプライン設定にテンプレートを組み込みます。通常、includeキーワードを使用してテンプレートファイルへのパスまたはURLを指定することで実行できます。
このガイドでは、Code-Qualityテンプレートを使用して、コード品質スキャンを設定に追加します。
stagesブロックの下に以下のコードを追加して、コード品質テンプレートを**.gitlab-ci.yml**に含めます。
include:
- template: Jobs/Code-Quality.gitlab-ci.yml
この変更をコミットしてプッシュします。
パイプラインにコード品質ジョブが追加されたことが確認できます。コード品質スキャナーは、このリポジトリにコミットされたすべてのコード変更を徹底的に分析し、注意や改善が必要なコード品質の問題を強調表示する有益なフィードバックを提供します。この貴重な洞察により、コードベース全体の品質を向上させ、パフォーマンスを最適化できます。
以上です!これらの手順により、GitLab CIを開始し、プロジェクトのビルドとテストプロセスを自動化できるようになります。