將應用程式從原始程式碼部署至 Azure Red Hat OpenShift

在本文中,您會使用 source-to-image (S2I) 組建,將應用程式從原始程式碼部署至 Azure Red Hat OpenShift 叢集。 Source-to-Image (S2I) 是一項組建程序,可從原始程式碼組建可重現的容器映像。 S2I 將原始程式碼插入容器映像,並讓容器準備該原始程式碼以供執行,藉此產生準備執行的映像。 您可以讓 OpenShift 從來源組建應用程式並加以部署,因此無須在每次變更時都手動建構容器。 然後,當收到原始程式碼變更通知時,OpenShift 會自動組建及部署新版本。

開始之前

注意

本文假設您已設定提取密碼。 若您並未替叢集設定提取密碼,可以遵循文件「新增或更新 Red Hat 提取密碼」的操作。

建立叢集

請遵循教學課程來建立 Azure Red Hat OpenShift 叢集。 如果您選擇在本機安裝和使用命令列介面 (CLI),本教學課程會要求您使用 Azure CLI 版本 2.6.0 或更新版本。 執行 az --version 來尋找您目前的版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

連線至叢集

若要管理 Azure Red Hat OpenShift 叢集,您必須使用 oc (OpenShift 命令列用戶端)。

注意

建議您在 Azure Cloud Shell安裝 OpenShift 命令列,並使用該命令列進行本文中的所有命令列作業。 自 shell.azure.com 開啟殼層或選取連結:

Button to launch Azure Cloud Shell

請遵循教學課程來安裝 CLI,擷取叢集認證,並使用 Web 主控台和 OpenShift CLI 來連線至叢集

登入之後,您應會看到訊息,說明您正在使用 default 專案。

Login successful.

You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'

Using project "default".

建立專案

若要建立名為 demoproject 的新專案,請執行命令:

oc new-project demoproject

您應該會看到類似下列的輸出:

Now using project "demoproject" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".

You can add applications to this project with the 'new-app' command. For example, try:

    oc new-app django-psql-example

to build a new example application in Python. Or use kubectl to deploy a simple Kubernetes application:

    kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

啟動 Web 主控台

執行下列命令,找出叢集 Web 主控台 URL:

 az aro show \
    --name <cluster name> \
    --resource-group <resource group> \
    --query "consoleProfile.url" -o tsv

您應該會取得與此相似的 URL。

https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/

在瀏覽器中啟動主控台 URL,並使用 kubeadmin 認證登入。

Azure Red Hat OpenShift login screen

在左側功能表中,切換至開發人員檢視方塊,而非系統管理員檢視方塊,並在專案清單中選取 demoproject。 然後,您應該位於專案的拓撲頁面。

Azure Red Hat OpenShift project topology

由於專案是空的,您應該找不到任何工作負載,並且會看到各種選項供您部署應用程式。

使用 Web 主控台部署

從用於部署應用程式的選項中,選取 [從 Git]。 這會將您導向 [從 Git 匯入] 頁面。 使用 https://github.com/sclorg/django-ex.git 作為 Git 存放庫 URL。 範例 Web 應用程式會以 Python 程式設計語言進行實作。

Azure Red Hat OpenShift project from Git

注意

OpenShift 會偵測到這是 Python 專案,並會選取適當的建立器映像。

向下捲動至 [進階選項],並確認已核取 [建立應用程式的路由]。 此動作會建立 OpenShift 路由,這是提供外部可連線主機名稱來公開服務的方法。

Azure Red Hat OpenShift project from Git - Route setup

當您準備好時,按一下頁面底部的 [建立]。 這會建立資源來管理應用程式的組建和部署。 接著,系統會將您重新導向至專案的拓樸概觀。

Azure Red Hat OpenShift project from Git - Topology

拓樸概觀提供已部署應用程式的視覺化呈現。 藉由檢視概觀,您可以查看整體的應用程式結構。

只要按一下 Git 圖示,您就會被導向至組建應用程式原始程式碼的 Git 存放庫。 應用程式的組建狀態會顯示在左下方顯示的圖示中。 按一下此圖示,便會將您導向 [組建詳細資料] 區段。 如果應用程式已公開路由,則可以按一下右上方的圖示,開啟已建立應用程式路由的 URL。

雖然應用程式正在擴大或縮小規模、開始推出及重新建立 Pod,但拓撲檢視中的應用程式表示法會以動畫呈現,供您即時檢視目前情況。

只要按一下應用程式圖示,便會顯示更多詳細資料,如下所示。

Azure Red Hat OpenShift project from Git - Details

檢視產生器記錄

組建啟動之後,按一下 [資源] 面板上顯示的 [檢視記錄] 連結。

Azure Red Hat OpenShift project from Git - Build logs

如此您便能在組建執行時監視組建進度。 產生器映像 (此處為 Python) 會將應用程式原始程式碼插入最終映像,再將其推送至 OpenShift 內部映像登錄。 當您看到「推送成功」的最終訊息時,代表組建已成功完成。

存取應用程式

待應用程式映像完成組建後,便會加以部署。

按一下左側功能表列中的 [拓撲],返回專案的拓撲檢視。 當您使用 Web 主控台建立應用程式時,系統會自動為應用程式建立路由,並且會在叢集外部公開。 您先前檢視的應用程式 [資源] 索引標籤,會顯示可用於從網頁瀏覽器存取應用程式的 URL。

從拓撲檢視中,您只要按一下環形右上方的圖示,便能取得已部署應用程式的 URL。 部署完成時,請按一下圖示,您就應該會看到已部署的應用程式。

Azure Red Hat OpenShift project from Git - Browse app

使用命令列進行部署

您已了解如何使用 Web 主控台部署應用程式,現在讓我們來部署相同的 Web 應用程式,不過這次會改用 oc 命令列工具,。

請執行下列命令來刪除專案並重新開始:

oc delete project demoproject

您應該會收到已刪除 demoproject 的確認訊息。

project.project.openshift.io "demoproject" deleted

執行下列命令,再次建立 demoproject

oc new-project demoproject

在專案中,從 GitHub 上的來源建立新應用程式,並指定最新版 Python 的 S2I 產生器。

oc new-app python:latest~https://github.com/sclorg/django-ex.git

這應該會顯示類似於下列的輸出:

--> Found image 8ec6f0d (4 weeks old) in image stream "openshift/python" under tag "latest" for "python:latest"

    Python 3.8
    ----------
   [...]

    Tags: builder, python, python38, python-38, rh-python38

    * A source build using source code from https://github.com/sclorg/django-ex.git will be created
      * The resulting image will be pushed to image stream tag "django-ex:latest"
      * Use 'oc start-build' to trigger a new build
    * This image will be deployed in deployment config "django-ex"
    * Port 8080/tcp will be load balanced by service "django-ex"
      * Other containers can access this service through the hostname "django-ex"

--> Creating resources ...
    imagestream.image.openshift.io "django-ex" created
    buildconfig.build.openshift.io "django-ex" created
    deploymentconfig.apps.openshift.io "django-ex" created
    service "django-ex" created
--> Success
    Build scheduled, use 'oc logs -f bc/django-ex' to track its progress.
    Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
     'oc expose svc/django-ex'
    Run 'oc status' to view your app.

OpenShift 會使用 Git 存放庫的名稱作為應用程式名稱。 請執行下列命令,檢閱組建和部署的狀態:

oc status

在組建和部署完成後,您應該會看到類似的輸出。

In project demoproject on server https://api.wzy5hg7x.eastus.aroapp.io:6443

svc/django-ex - 172.30.200.50:8080
  dc/django-ex deploys istag/django-ex:latest <-
    bc/django-ex source builds https://github.com/sclorg/django-ex.git on openshift/python:latest
    deployment #1 deployed about a minute ago - 1 pod


2 infos identified, use 'oc status --suggest' to see details.

若要在 OpenShift 叢集外部公開應用程式,您必須執行下列命令來建立路由:

oc expose service/django-ex

您應該會取得確認。

route.route.openshift.io/django-ex exposed

請執行下列命令來擷取 URL:

oc get route django-ex

您應該取回指派至路由的主機名稱,以便用於瀏覽已部署的應用程式。

NAME        HOST/PORT                                              PATH   SERVICES    PORT       TERMINATION   WILDCARD
django-ex   django-ex-demoproject.apps.wzy5hg7x.eastus.aroapp.io          django-ex   8080-tcp                 None

觸發新的二進位組建

當您處理應用程式時,可能會想要進行變更並查看其部署情況。 您可以輕鬆設定 Webhook,觸發每個程式碼認可的新組建和部署。 不過,這可能並非理想做法,因為有時您也會希望直接查看變更,不必將每個程式碼變更推送至存放庫。

在快速逐一查看變更的情況下,您可以使用所謂的二進位組建。 若要示範此案例,請執行下列命令,以在本機複製應用程式的 Git 存放庫:

git clone https://github.com/sclorg/django-ex.git

這會建立子目錄 django-ex,其中包含應用程式的原始程式碼:

Cloning into 'django-ex'...
remote: Enumerating objects: 980, done.
remote: Total 980 (delta 0), reused 0 (delta 0), pack-reused 980
Receiving objects: 100% (980/980), 276.23 KiB | 4.85 MiB/s, done.
Resolving deltas: 100% (434/434), done.

變更為子目錄:

cd django-ex

開啟整合式 Azure Cloud Shell 編輯器:

code welcome/templates/welcome/index.html

向下捲動並將顯示 Welcome to your Django application on OpenShift 的行變更為顯示 Welcome to Azure Red Hat OpenShift。 儲存檔案並從右上角的 ... 功能表關閉編輯器。

Azure Red Hat OpenShift project from Git - Edit application in Azure Cloud Shell editor

執行下列命令啟動新組建:

oc start-build django-ex --from-dir=. --wait

藉由傳遞 --from-dir=. 旗標,OpenShift 命令列會從指定的目錄上傳原始程式碼,然後起始組建和部署程序。 您應該會得到類似下列的輸出,組建在幾分鐘後就會完成。

Uploading directory "." as binary input for the build ...
.
Uploading finished
build.build.openshift.io/django-ex-2 started

如果您使用應用程式重新整理瀏覽器,則會看到更新的標題。

Azure Red Hat OpenShift project from Git - Browse updated app

清除資源

完成使用應用程式時,您可執行下列命令來刪除專案:

oc delete project demoproject

您也可採用教學課程:刪除 Azure Red Hat OpenShift 4 叢集中的指示來刪除叢集。

下一步

在本指南中,您將了解如何:

  • 建立專案
  • 使用 Web 主控台從原始程式碼部署應用程式
  • 使用 OpenShift 命令列從原始程式碼部署應用程式
  • 使用 OpenShift 命令列觸發二進位組建

深入了解如何使用 source-to-image 和其他組建策略來組建及部署應用程式。