概要
このラボでは、GitHub、Cloud Build、ビルドトリガー、Artifact Registry を使用して、継続的インテグレーション パイプラインを構築します。
目標
このラボでは、次のタスクの実行方法について学びます。
- GitHub の Git リポジトリを作成する
- 簡単な Python アプリケーションを作成する
- Cloud Shell でウェブ アプリケーションをテストする
- Docker ビルドを定義する
- Cloud Build と Artifact Registry を使用して Docker イメージを管理する
- トリガーを使用してビルドを自動化する
- ビルドの変更をテストする
前提条件
GitHub アカウントをお持ちでない場合は、GitHub アカウントを作成する必要があります。
推奨事項
- GitHub アカウントをお持ちの場合は、そのアカウントを使用してください。GitHub では、新しいアカウントが迷惑メールとしてブロックされることがよくあります。
-
GitHub アカウントで 2 要素認証を構成して、アカウントが迷惑メールとしてマークされる可能性を減らしてください。R
ラボ環境を設定する
各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。
-
Qwiklabs にシークレット ウィンドウでログインします。
-
ラボのアクセス時間(例: 1:15:00
)に注意し、時間内に完了できるようにしてください。
一時停止機能はありません。必要な場合はやり直せますが、最初からになります。
-
準備ができたら、[ラボを開始] をクリックします。
-
ラボの認証情報(ユーザー名とパスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。
-
[Google Console を開く] をクリックします。
-
[別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。
-
利用規約に同意し、再設定用のリソースページをスキップします。
タスク 1. Git リポジトリを作成する
まず、GitHub を使用して Git リポジトリを作成します。この Git リポジトリを使用して、ソースコードを保管します。最終的にはビルドトリガーを作成し、ここにコードが push されると継続的インテグレーション パイプラインが起動されるようにします。
-
Cloud コンソールをクリックし、新しいタブで [Cloud Shell をアクティブにする]()をクリックします。
- プロンプトが表示されたら、[続行] をクリックします。
- 次のコマンドを実行して GitHub CLI をインストールします。
curl -sS https://webi.sh/gh | sh
- GitHub CLI にログインします
gh auth login
Enter
キーを押してデフォルト オプションを受け入れます。CLI ツールに表示される手順に沿って、GitHub ウェブサイトからログインします。
- ログインしていることを確認します。
gh api user -q ".login"
正常にログインできていると、GitHub ユーザー名が表示されます。
-
GITHUB_USERNAME
変数を作成します。
GITHUB_USERNAME=$(gh api user -q ".login")
- 環境変数が作成されたことを確認します。
echo ${GITHUB_USERNAME}
変数が正常に作成されていると、GitHub ユーザー名が表示されます。
- グローバル Git 認証情報を設定します。
git config --global user.name "${GITHUB_USERNAME}"
git config --global user.email "${USER_EMAIL}"
このコマンドは、Cloud Shell ターミナルの git ユーザーを作成します。
-
devops-repo という名前の空の GitHub リポジトリを作成します。
gh repo create devops-repo --private
- Cloud Shell で次のコマンドを入力して
gcp-course
という名前のフォルダを作成します。
mkdir gcp-course
- 作成したフォルダに移動します。
cd gcp-course
- 作成した空のリポジトリのクローンを作成します。プロンプトが表示されたら、[承認] をクリックします。
gh repo clone devops-repo
注: 空のリポジトリのクローンを作成したことを警告するメッセージが表示される場合があります。現時点では想定される挙動です。
- 上記のコマンドにより、
devops-repo
という名前の空のフォルダが作成されます。そのフォルダに移動します。
cd devops-repo
タスク 2. 簡単な Python アプリケーションを作成する
管理するソースコードが必要なので、簡単な Python Flask ウェブ アプリケーションを作成します。これは「hello world」のような簡単なアプリケーションですが、これから構築するパイプラインをテストするにはこれで十分です。
- Cloud Shell で [エディタを開く]()をクリックして、コードエディタを開きます。
- 左側の Explorer ツリーで、[gcp-course] > [devops-repo] フォルダを選択します。
- [devops-repo] をクリックします。
- [新しいファイル] をクリックします。
- ファイルに「
main.py
」という名前を付け、Enter キーを押します。
- 作成したファイル内に次のコードを貼り付けます。
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/")
def main():
model = {"title": "Hello DevOps Fans."}
return render_template('index.html', model=model)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True, threaded=True)
- 変更を保存します。Ctrl+S キーを押します。
-
devops-repo
フォルダをクリックします。
- [新しいフォルダ] をクリックします。
- フォルダに「
templates
」という名前を付け、Enter キーを押します。
-
templates
フォルダを右クリックして、layout.html
という名前の新しいファイルを作成します。
- このファイル内に次のコードを追加して、先ほどと同じようにファイルを保存します。
<!doctype html>
<html lang="en">
<head>
<title>{{model.title}}</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
{% block content %}{% endblock %}
<footer></footer>
</div>
</body>
</html>
-
同じく templates フォルダ内に、index.html
という名前の新しいファイルを追加します。
-
このファイル内に次のコードを追加して、先ほどと同じようにファイルを保存します。
{% extends "layout.html" %}
{% block content %}
<div class="jumbotron">
<div class="container">
<h1>{{model.title}}</h1>
</div>
</div>
{% endblock %}
-
Python では、pip を使用してアプリケーションの前提条件を管理します。次は、このアプリケーションの要件のリストが記載されたファイルを追加します。
-
(templates フォルダではなく)devops-repo フォルダ内に新しいファイルを作成し、そのファイルに以下の内容を追加して、requirements.txt
という名前で保存します。
Flask>=2.0.3
- いくつかのファイルが用意できたので、これらをリポジトリに保存します。まず、作成したすべてのファイルをローカル Git リポジトリに追加する必要があります。[ターミナルを開く] をクリックし、Cloud Shell で次のコードを入力します。
cd ~/gcp-course/devops-repo
git add --all
- リポジトリに加えた変更を commit するには、本人確認が必要です。そのためには、次のコマンドを入力します。ただし、自分の情報を反映させてください(Gmail アドレスまたは他のメールアドレスを使用できます)。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
- これで、ローカルで変更を commit できます。
git commit -a -m "Initial Commit"
- ローカルで変更を commit しましたが、Cloud Source Repositories 内に作成した Git リポジトリはまだ更新されていません。次のコマンドを入力して、変更を Cloud に push します。
git push origin main
-
GitHub ウェブページを更新します。先ほど作成したファイルが表示されます。
タスク 3. Docker ビルドを定義する
Docker を使用するために、まず、Dockerfile というファイルを作成します。このファイルで、Docker コンテナをどのように構成するかを定義します。その作業を今から行います。
- [エディタを開く] をクリックし、gcp-course/devops-repo フォルダを展開します。devops-repo フォルダを選択した状態で、[新しいファイル] をクリックし、Dockerfile という名前の新しいファイルを作成します。
この Dockerfile ファイルを使用して、コンテナのビルド方法を定義します。
- ファイルの先頭に、次のコードを入力します。
FROM python:3.9
これはベースイメージです。複数のベースイメージを選択することもできます。この例では、Python にインストール済みのものを使用します。
- 次のように入力します。
WORKDIR /app
COPY . .
上記のコード行により、現在のフォルダ内にあるソースコードがコンテナ イメージ内の /app フォルダにコピーされます。
- 次のように入力します。
RUN pip install gunicorn
RUN pip install -r requirements.txt
これにより、pip を使用して Python アプリケーションの要件がコンテナにインストールされます。gunicorn は、このウェブアプリを実行するために使用する Python ウェブサーバーです。
- 次のように入力します。
ENV PORT=80
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app
この環境変数は、アプリケーションを実行するポートを設定します(この例ではポート 80)。最後の行により、gunicorn ウェブサーバーを使用してウェブアプリが実行されます。
- 完成したファイルが次のような内容になっていることを確認してから、ファイルを保存します。
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install gunicorn
RUN pip install -r requirements.txt
ENV PORT=80
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app
タスク 4. Cloud Build と Artifact Registry を使用して Docker イメージを管理する
Docker イメージをビルドして、どこかに保管する必要があります。それには Cloud Build と Artifact Registry を使用します。
- [ターミナルを開く] をクリックして Cloud Shell に戻ります。次のコマンドを入力して、正しいフォルダに移動します。
cd ~/gcp-course/devops-repo
- Cloud Shell 環境変数 DEVSHELL_PROJECT_ID に、現在のプロジェクト ID が自動的に格納されます。Artifact Registry 内にイメージを保管するには、このプロジェクト ID が必要です。次のコマンドを入力して、プロジェクト ID を表示します。
echo $DEVSHELL_PROJECT_ID
- 次のコマンドを入力して、devops-repo という名前の Artifact Registry リポジトリを作成します。
gcloud artifacts repositories create devops-repo \
--repository-format=docker \
--location={{{ project_0.default_region | "REGION" }}}
- Artifact Registry Docker リポジトリに対する認証を行うように Docker を構成するには、次のコマンドを入力します。
gcloud auth configure-docker {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev
- Cloud Build を使用してイメージを作成し、Artifact Registry に保管するには、次のコマンドを入力します。
gcloud builds submit --tag {{{ project_0.default_region | "REGION" }}}-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-repo/devops-image:v0.1
このコマンドで使用されている環境変数に注目してください。イメージは Artifact Registry 内に保管されます。
-
Google Cloud コンソールのタイトルバーで、[検索] フィールドに「Artifact Registry」と入力し、検索結果から [Artifact Registry] をクリックします。
-
[Artifact Registry] の横にある固定アイコンをクリックします。
-
[devops-repo] をクリックします。
-
[devops-image] をクリックします。イメージがリストに表示されるはずです。
-
Google Cloud コンソールのタイトルバーで、[検索] フィールドに「Cloud Build」と入力し、検索結果から [Cloud Build] をクリックします。
-
[Cloud Build] の横にある固定アイコンをクリックします。
-
ビルドが履歴に表示されます。
これから、このイメージを Compute Engine 仮想マシンから実行できるかどうかを試します。
-
ナビゲーション メニューで、[Compute Engine] > [VM インスタンス] をクリックします。
-
[インスタンスを作成] をクリックして VM を作成します。
-
[インスタンスの作成] ページで、次の設定を指定します。残りの設定はデフォルト値のままにします。
プロパティ |
値 |
[OS とストレージ] > [コンテナ] |
[コンテナをデプロイ] をクリック |
コンテナ イメージ |
「-docker.pkg.dev//devops-repo/devops-image:v0.1」として [選択] をクリック |
[ネットワーキング] > [ファイアウォール] |
HTTP トラフィックを許可する |
-
[作成] をクリックします。
-
VM が起動したら、VM の外部 IP アドレスをクリックします。ブラウザタブが開き、そのページに Hello DevOps Fans.
という文字列が表示されます。
注: VM の作成後、Docker コンテナが起動するまで 1 分ほど待たなければならない場合があります。
- 変更を Git リポジトリに保存します。Cloud Shell で次のコマンドを入力して、正しいフォルダが作業ディレクトリになっていることを確認してから、新しい Dockerfile を Git に追加します。
cd ~/gcp-course/devops-repo
git add --all
- ローカルで変更を commit します。
git commit -am "Added Docker Support"
- 変更を Cloud Source Repositories に push します。
git push origin main
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Build と Artifact Registry を使用して Docker イメージを管理する。
タスク 5. トリガーを使用してビルドを自動化する
-
ナビゲーション メニューで、[Cloud Build] をクリックします。[ビルド履歴] ページが開き、1 つ以上のビルドが履歴に表示されます。
-
[設定] をクリックします。
-
[サービス アカウント] プルダウンから @.iam.gserviceaccount.com を選択します。
-
[優先サービス アカウントとして設定] オプションを有効にします。Cloud Build
サービスのステータスを [有効] に設定します。
-
左側のナビゲーションで [トリガー] に移動し、[トリガーを作成] をクリックします。
-
以下を指定します。
名前: devops-trigger
リージョン:
[リポジトリ] で [新しいリポジトリに接続] をクリックします。
- [リポジトリを接続] ペインで [GitHub(Cloud Build GitHub アプリ)] を選択し、[続行] をクリックします。
- [リポジトリ] として {your github username}/devops-repo を選択し、[OK] をクリックして {your github username}/devops-repo(GitHub アプリ)を選択します。
- 利用規約に同意して [接続] をクリックします。
ブランチ: .*(任意のブランチ)
構成タイプ: Cloud Build 構成ファイル(yaml または json)
ロケーション: インライン
-
[エディタを開く] をクリックし、コードを以下のコードに置き換えて [完了] をクリックします。
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '{{{project_0.default_region|REGION}}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-repo/devops-image:$COMMIT_SHA', '.']
images:
- '{{{project_0.default_region|REGION}}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-repo/devops-image:$COMMIT_SHA'
options:
logging: CLOUD_LOGGING_ONLY
-
[サービス アカウント] で、プロジェクト ID で始まるサービス アカウント(@.iam.gserviceaccount.com の形式)を選択し、[作成] をクリックします。
-
[実行]、[トリガーの実行] の順にクリックして、トリガーをテストします。
-
[履歴] リンクをクリックし、ビルドが実行中であることを確認します。ビルドが完了するまで待ってから、リンクをクリックしてビルドの詳細を表示します。
-
下にスクロールしてログを確認します。現在のマシンでビルドを実行した場合、ビルドの出力は、このログに示されるような内容になります。
-
Artifact Registry サービスに戻ります。新規のイメージが [devops-repo] > [devops-image] フォルダに表示されるはずです。
-
Cloud Shell コードエディタに戻ります。gcp-course/devops-repo
フォルダ内にある main.py
ファイルを見つけます。
-
次のように、main() 関数内の title プロパティの値を「Hello Build Trigger.
」に変更します。
@app.route("/")
def main():
model = {"title": "Hello Build Trigger."}
return render_template("index.html", model=model)
- 次のコマンドを使用して変更を commit します。
cd ~/gcp-course/devops-repo
git commit -a -m "Testing Build Trigger"
- 次のコマンドを入力して、変更を Cloud Source Repositories に push します。
git push origin main
- Cloud コンソールの Cloud Build サービスに戻ります。実行中の別のビルドが表示されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
トリガーを使用してビルドを自動化する。
タスク 6. ビルドの変更をテストする
-
ビルドの完了後、ビルドをクリックしてその詳細を表示します。
-
[実行の詳細] をクリックします。
-
[イメージ名]をクリックします。Artifact Registry のイメージページにリダイレクトされます。
-
ペインの上端で、イメージ名の横にある [パスをコピー] をクリックします。これは次のステップのための操作です。形式は次のようになっています。
{{{project_0.default_region | Lab Region }}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-demo/devops-image@sha256:8aede81a8b6ba1a90d4d808f509d05ddbb1cee60a50ebcf0cee46e1df9a54810
注: ダイジェストにあるイメージ名は使用しないでください。
-
Compute Engine サービスに移動します。先ほどと同じように新しい仮想マシンを作成して、このイメージをテストします。[DEPLOY CONTAINER] をクリックし、先ほどコピーしたイメージを貼り付けます。
-
[HTTP トラフィックを許可する] を選択します。
-
仮想マシンの作成後、変更をテストするために、ブラウザでその VM の外部 IP アドレスにリクエストを送信します。新しいメッセージが表示されます。
注: VM の作成後、Docker コンテナが起動されるまで数分待たなければならない場合があります。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
ビルドの変更をテストする。
お疲れさまでした
このラボでは、GitHub、Cloud Build、ビルドトリガー、Artifact Registry を使用して、継続的インテグレーション パイプラインを構築しました。
ラボを終了する
ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
- 星 1 つ = 非常に不満
- 星 2 つ = 不満
- 星 3 つ = どちらともいえない
- 星 4 つ = 満足
- 星 5 つ = 非常に満足
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
Copyright 2025 Google LLC All rights reserved. Google および Google のロゴは、Google LLC の商標です。その他すべての社名および製品名は、それぞれ該当する企業の商標である可能性があります。