GitLab Fundamentals - ハンズオンラボ: 継続的インテグレーションと開発
完了までの推定時間: 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ファイルにコピーします:stages: - build build go: image: golang stage: build script: - go build - ./arraybuild という 1 つのステージを定義しました。このステージには、
go buildという 1 つのスクリプトを実行する単一のジョブがあります。その結果、Go アプリケーションがコンパイルされます。./arrayはコンパイルされたアプリケーションを実行します。imageキーワードは、GitLab Runner でジョブが Golang Docker コンテナ内で実行されるようにするために使用されます。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コマンドを追加してみましょう。これにより現在のディレクトリが一覧表示され、ランナーにクローンされたすべてのファイルが表示されます。stages: - build build go: stage: build image: golang 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 リポジトリや他のシステムリソースに完全にアクセスできます
ラボガイド完了
このラボの演習を完了しました。このコースの他のラボガイドを確認できます。
ご提案はありますか?
このラボへの変更を希望する場合は、マージリクエストを通じて変更を送信してください。
a1f3c26a)