總覽
在本實驗室中,您將運用 GitHub、Cloud Build、自動建構觸發條件和 Artifact Registry,建構持續整合管道。

目標
在本實驗室中,您將瞭解如何執行下列工作:
- 在 GitHub 建立 Git 存放區
- 建立簡易的 Python 應用程式
- 在 Cloud Shell 測試網頁應用程式
- 定義 Docker 建構作業
- 運用 Cloud Build 和 Artifact Registry 管理 Docker 映像檔
- 透過觸發條件自動執行建構作業
- 測試建構作業異動
事前準備
如果您還沒有 GitHub 帳戶,必須先建立帳戶
建議
- 如果有 GitHub 帳戶,可直接使用。GitHub 比較可能將新帳戶視為垃圾內容帳戶,並加以封鎖。
-
為您的 GitHub 帳戶設定雙重驗證,這樣較不容易被當成垃圾內容帳戶。
設定實驗室環境
在每個研究室中,您都能在固定時間內免付費建立新的 Google Cloud 專案,並使用一組資源。
-
請透過無痕式視窗登入 Qwiklabs。
-
請記下研究室的存取時間 (例如 1:15:00
),並確保自己能在時間限制內完成作業。
研究室不提供暫停功能。如有需要,您可以重新開始,但原先的進度恕無法保留。
-
準備就緒後,請按一下「Start lab」。
-
請記下研究室憑證 (使用者名稱和密碼),這組資訊將用於登入 Google Cloud 控制台。
-
按一下「Open Google Console」。
-
按一下「Use another account」,然後複製這個研究室的憑證,並貼入提示訊息。
如果使用其他憑證,系統會顯示錯誤或向您收取費用。
-
接受條款,然後略過資源復原頁面。
工作 1:建立 Git 存放區
首先,用 GitHub 建立 Git 存放區。這個 Git 存放區將用於儲存原始碼。最後,您需要建立自動建構觸發條件,在程式碼推送到存放區時,啟動持續整合管道。
- 點選「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 使用者。
- 建立空的 GitHub 存放區,並命名為 devops-repo:
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 點按「開啟編輯器」(
),即可開啟程式碼編輯器。
- 在左側的探索工具樹狀結構中,依序選取「gcp-course」>「devops-repo」資料夾。
- 點選「devops-repo」。
- 點選「New File」。
- 將檔案命名為
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
」資料夾。
- 點選「New Folder」。
- 將資料夾命名為
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 管理。現在請新增一個檔案,並在其中列出應用程式的必要條件。
-
在 devops-repo 資料夾 (而非 templates 資料夾) 中建立新檔案,然後將下列指令新增至該檔案並儲存為 requirements.txt
:
Flask>=2.0.3
- 您現在有一些檔案了,請將這些檔案儲存至存放區。首先,您需要將建立的所有檔案新增至本機 Git 存放區。點選「開啟終端機」,然後在 Cloud Shell 輸入下列程式碼:
cd ~/gcp-course/devops-repo
git add --all
- 我們要將變更提交到存放區,因此需驗證身分。接著輸入下列指令,並填入您的資訊 (您可以直接使用 Gmail 地址或其他電子郵件地址):
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
- 現在,請將變更提交到本機:
git commit -a -m "Initial Commit"
- 您已將變更提交到本機,但尚未更新您在 Cloud Source Repositories 中建立的 Git 存放區。請輸入下列指令,將變更推送至雲端:
git push origin main
- 重新整理 GitHub 網頁,您應該會看見剛剛建立的檔案。
工作 3:定義 Docker 建構作業
使用 Docker 的第一步,就是建立一個 Dockerfile。這個檔案會定義 Docker 容器的建構方式。您現在就要建立 Dockerfile。
- 點選「開啟編輯器」,並展開「gcp-course/devops-repo」資料夾。接著選取「devops-repo」資料夾,點選「New File」,然後將新檔案命名為 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。
- 點選「Open Terminal」(開啟終端機) 返回 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" }}}
- 輸入下列指令,將 Docker 設為向 Artifact Registry 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 虛擬機器執行這個映像檔。
-
依序點選「Navigation menu」(導覽選單) >「Compute Engine」>「VM Instance」(VM 執行個體)。
-
點選「Create Instance」(建立執行個體) 來建立 VM。
-
在「建立執行個體」頁面上指定下列項目,並保留其餘設定的預設值:
屬性 |
值 |
「OS 和儲存空間」>「容器」
|
點按「部署容器」 |
容器映像檔 |
「-docker.pkg.dev//devops-repo/devops-image:v0.1」,然後點按「選取」 |
「網路」>「防火牆」
|
允許 HTTP 流量 |
-
點選「建立」。
-
VM 啟動之後,點選 VM 的外部 IP 位址。瀏覽器分頁隨即開啟,並顯示 Hello DevOps Fans
。
注意事項:建立 VM 之後,可能需要等候一分鐘左右,Docker 容器才會啟動。
- 現在請將變更儲存到 Git 存放區。在 Cloud Shell 輸入下列指令,確保您位在正確的資料夾中,然後將新的 Dockerfile 新增到 Git:
cd ~/gcp-course/devops-repo
git add --all
- 在本機修訂變更:
git commit -am "Added Docker Support"
- 將變更推送至 Cloud Source Repositories:
git push origin main
點選「Check my progress」,確認目標已達成。
運用 Cloud Build 和 Artifact Registry 管理 Docker 映像檔。
工作 5:透過觸發條件自動執行建構作業
-
點選導覽選單中的「Cloud Build」。「建構作業記錄」頁面應會開啟,且記錄上應列出一或多項建構作業。
-
點選「設定」。
-
在「服務帳戶」下拉式選單中,選取「@.iam.gserviceaccount.com」
-
啟用「設為偏好的服務帳戶」選項。將 Cloud Build
服務設為「已啟用」。
-
前往左方導覽選單的「觸發條件」,,點選「建立觸發條件」。
-
指定下列屬性:
「名稱」:devops-trigger
「區域」:
「存放區」:請點選「連結新的存放區」
- 選取「連結存放區」窗格中的「GitHub」(Cloud Build GitHub 應用程式),並點選「繼續」。
- 選取「{您的 GitHub 使用者名稱}/devops-repo」做為「存放區」,點選「確定」並選取「{您的 GitHub 使用者名稱}/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
-
「服務帳戶」則選取以您的 project-id 開頭,看起來像「@.iam.gserviceaccount.com」的帳戶,然後點選「建立」。
-
如要測試觸發條件,請依序點選「執行」和「執行觸發條件」。
-
按一下「記錄」連結,您應該會看到建構作業正在執行。請等待建構作業完成,然後點選導向建構作業的連結來查看詳細資料。
-
向下捲動並查看記錄檔。這裡顯示的建構作業輸出內容,就是您在機器中執行作業時會看見的內容。
-
返回 Artifact Registry 服務,依序點選「devops-repo」>「devops-image」資料夾,當中應會顯示新的映像檔。
-
返回 Cloud Shell 程式碼編輯器。在 gcp-course/devops-repo
資料夾中找出 main.py
檔案。
-
將 main() 函式的標題屬性變更為「Hello Build Trigger.
」,如下所示:
@app.route("/")
def main():
model = {"title": "Hello Build Trigger."}
return render_template("index.html", model=model)
- 使用下列指令提交變更:
cd ~/gcp-course/devops-repo
git commit -a -m "Testing Build Trigger"
- 輸入下列指令,將變更推送到 Cloud Source Repositories:
git push origin main
- 返回 Cloud 控制台和 Cloud Build 服務。您應該會看見另一項建構作業正在執行。
點選「Check my progress」,確認目標已達成。透過觸發條件自動化處理建構作業。
工作 6:測試建構作業異動
-
建構作業結束之後,點選該項作業來查看詳細資料。
-
點選「執行作業詳細資料」。
-
點選「映像檔名稱」,系統會將您重新導向至 Artifact Registry 的映像檔頁面。
-
在窗格頂端,點選映像檔名稱旁的「複製路徑」,後續步驟會用到這項資訊。格式應如下所示:
{{{project_0.default_region | Lab Region }}}-docker.pkg.dev/{{{project_0.project_id|Project ID}}}/devops-demo/devops-image@sha256:8aede81a8b6ba1a90d4d808f509d05ddbb1cee60a50ebcf0cee46e1df9a54810
Note: Do not use the image name located in Digest.
-
前往 Compute Engine 服務。如同先前的操作方式,請建立新的虛擬機器來測試映像檔。按一下「部署容器」,然後貼上剛剛複製的映像檔。
-
選取「允許 HTTP 流量」。
-
建立虛擬機器後,請向 VM 在您瀏覽器中的外部 IP 位址發出要求,藉此測試變更內容。系統應會顯示您設定的新訊息。
注意:建立 VM 後,您可能必須等候幾分鐘,才能啟動 Docker 容器。
點選「Check my progress」,確認目標已達成。測試建構作業變更內容。
恭喜!
在本實驗室中,您運用 GitHub、Cloud Build、自動建構觸發條件和 Artifact Registry,建構了持續整合管道。
關閉研究室
如果您已完成研究室,請按一下「End Lab」(關閉研究室)。Google Cloud Skills Boost 會移除您使用的資源,並清除所用帳戶。
您可以針對研究室的使用體驗評分。請選取合適的星級評等並提供意見,然後按一下「Submit」(提交)。
星級評等代表您的滿意程度:
- 1 星 = 非常不滿意
- 2 星 = 不滿意
- 3 星 = 普通
- 4 星 = 滿意
- 5 星 = 非常滿意
如果不想提供意見回饋,您可以直接關閉對話方塊。
如有任何想法、建議或指教,請透過「Support」(支援) 分頁提交。
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。