GitLab 基礎 - ハンズオンラボ: 継続的インテグレーションと継続的デリバリー
完了までの推定時間: 30分
目標
このラボでは、QAプロジェクト用の基本的なCI/CDパイプラインを作成する方法を学習します。
タスク A. コードベースのセットアップ
CI/CDプロセスを作成する前に、CI/CDプロセスを実行するコードが必要です。まず、Cool App QA プロジェクトに移動します。
プロジェクトで + > New file を選択します。
Filename フィールドに
main.goと入力します。main.goに以下のコードを追加します:package main import( "fmt" ) func main() { fmt.Println("We are up and running!") }Commit changes を選択します。
コミットの適切なメッセージを入力し、ブランチ名を
initial-codeに変更します。マージリクエストのチェックボックスにチェックが入っていることを確認し、Commit changes をクリックします。
マージリクエストのオプションをすべてデフォルトのままにして、Create merge request を選択します。
ここから、コードにもう1つファイル(
go.modファイル)を追加します。追加するには:左サイドバーで Code > Branches を選択します。
initial-codeを選択します。+ > New file を選択します。
Filename フィールドに
go.modと入力します。以下のコードをファイルに追加します:
module array go 1.22.2Commit changes を選択します。
Commit to current
initial-codebranch が選択されていることを確認します。Commit changes を選択します。
コードが作成できたので、コードのCI/CDプロセスを作成できます。
タスク B. CI/CDプロセスの作成
先ほど書いたコードのCI/CDプロセスを作成しましょう。目標は、書いたコードをビルドするプロセスを作成することです。これを行うには、.gitlab-ci.yml ファイルを作成する必要があります。このファイルには、CI/CDプロセスのすべてのジョブとステージが含まれます。
左サイドバーで Code > Repository を選択します。
+ > New file を選択します。
Filename に
.gitlab-ci.ymlを入力します。以下のコードを
.gitlab-ci.ymlファイルにコピーします:default: image: golang stages: - build build go: stage: build script: - go build - ./arrayこのインスタンスのすべてのGitLab CI/CDジョブはDockerコンテナで実行されます。
default行は、この.gitlab-ci.ymlファイルのジョブを実行するためのDockerイメージを定義します。その下に1つのステージ build を定義しています。このステージには1つのジョブがあり、go buildというスクリプトを実行します。その結果、Goアプリケーションがコンパイルされます。./arrayはコンパイルされたアプリケーションを実行します。Commit changes を選択します。Commit to the current
initial-codebranch が選択されていることを確認します。Commit changes を選択します。
タスク C. CI/CDプロセスの確認
コードをコミットすると、パイプラインがすぐに開始されます。パイプラインを確認するには、Build > Pipelines に移動します。
ここには、プロジェクトのすべてのパイプラインのサマリーが表示されます。各パイプラインには以下の詳細が表示されます:
- パイプラインのステータス
- パイプライン名、ID、ブランチ、トリガーとなったコミット
- パイプラインを作成したユーザー
- ステージ別のパイプラインステータスの内訳
パイプラインの詳細を確認するには、パイプラインの Status を選択します。このUIでは、各ステージとそのステージに関連するジョブを示すパイプラインのグラフが表示されます。
build go ジョブを選択します。
この画面では、ジョブの実行中に実行されたすべてのコマンドを含むジョブの詳細が表示されます。右側には、ジョブの実行時間、ジョブ完了時刻、ジョブのキュー時間、ジョブを完了したランナー、ジョブをトリガーしたコミット、およびジョブに関連するパイプラインの詳細が表示されます。
各詳細を確認しましょう。まず、ジョブに移動します:
Build > Jobs を選択します。
build go ジョブを選択します。
ジョブログを確認して、各ジョブステージをより深く理解しましょう。最初に次のような内容が表示されます:
ジョブ環境のセットアップ
Running with gitlab-runner 17.0.0 (44feccdf)
on ilt-gitlab-runner xZL9uN-ry, system ID: s_e1aab81f250d
Resolving secrets
Preparing the "docker-autoscaler" executor
00:33
Dialing instance https://www.googleapis.com/compute/v1/projects/demosys-ilt-training-cloud/zones/us-central1-c/instances/added-scale-ilt-runner-group-1138177e63ca2c1e...
Instance https://www.googleapis.com/compute/v1/projects/demosys-ilt-training-cloud/zones/us-central1-c/instances/added-scale-ilt-runner-group-1138177e63ca2c1e connected
Using Docker executor with image golang ...
Pulling docker image golang ...
Using docker image sha256:92c72d51a65b247eb5672073192030d4964cee907770b0569665499e9880fa48 for golang with digest golang@sha256:ab1f5c47de0f2693ed97c46a646bde2e4f380e40c173454d00352940a379af60 ...
GitLabラボ環境では、ジョブのスケーリングを支援するためにランナーマネージャーを使用しています。ジョブが開始すると、まずキューに入ります。ランナーマネージャーが利用可能になると、ジョブを引き受けます。次に、インスタンスを作成し、定義されたDockerイメージ(この場合はgolangイメージ)でセットアップします。このイメージがランナーにプルされてロードされ、ジョブリクエストの処理を開始する準備が整います。
Gitリポジトリのクローン
環境のセットアップ後、GitLabはリポジトリをランナーにクローンします。
Preparing environment
00:02
Running on runner-xzl9un-ry-project-25858-concurrent-0 via ilt-autoscale-runner-manager-2...
Getting source from Git repository
00:02
Fetching changes with git depth set to 20...
Initialized empty Git repository in /builds/training-users/session-c68006ec/iua7f2zr/fundamentals/qa/cool-app-qa/.git/
Created fresh repository.
Checking out e4f0de4d as detached HEAD (ref is initial-code)...
Skipping Git submodules setup
この後、すべてのコードがランナーで利用可能になります。重要な点として、ランナーにはGitリポジトリへのアクセス権があり、リモートリポジトリへのリンクが設定されています。これは2つのことを意味します:
- Gitリポジトリ内の任意のファイルにアクセスして使用できます
- ジョブプロセス中に変更を加えた場合、リポジトリにコミットして戻すことができます
オプションのタスク:
これを実際に確認したいですか? ジョブスクリプトに ls コマンドを追加してみましょう。これにより現在のディレクトリが一覧表示され、ランナーにクローンされたすべてのファイルが表示されます。
default:
image: golang
stages:
- build
build go:
stage: build
script:
- ls
- go build
- ./array
スクリプトの実行: 環境がセットアップされ、リポジトリがクローンされると、ジョブスクリプトが実行されます。
Executing "step_script" stage of the job script
Using docker image sha256:5905f95343e84d1f8f14aff8f8b83747fb39ea0e0fad52a9d14cf41860295fff for golang with digest golang@sha256:f43c6f049f04cbbaeb28f0aad3eea15274a7d0a7899a617d0037aec48d7ab010 ...
$ go build
Cleaning up project directory and file based variables
Job succeeded
まとめとして、パイプラインでジョブを実行する際に覚えておくべき重要なポイントがあります。
ジョブは通常、ジョブスクリプトを実行するためにDockerイメージを使用します
すべてのジョブは独自のDockerコンテナ内の別のランナーで実行されるため、ジョブが互いに干渉する心配はありません
ジョブの実行中は、Gitリポジトリや他のシステムリソースに完全にアクセスできます
ラボガイド完了
このラボの演習を完了しました。このコースの他のラボガイドを確認できます。
ご提案はありますか?
ラボへの変更を希望する場合は、マージリクエストで変更を送信してください。
