身為 Code Stream 管理員或開發人員,您可以使用 Code Stream 和 VMware Tanzu Kubernetes Grid Integrated Edition (先前稱為 VMware Enterprise PKS) 自動將軟體應用程式部署到 Kubernetes 叢集。此使用案例提及可用於自動發佈應用程式的其他方法。

在此使用案例中,您將建立包含兩個階段的管線,然後使用 Jenkins 建置並部署應用程式。

  • 第一個階段是用於開發。此階段使用 Jenkins 從 GitHub 存放庫中的分支提取程式碼,然後建置、測試並將其發佈。
  • 第二個階段是用於部署。此階段執行使用者操作工作,該工作需要得到關鍵使用者的核准,然後管線才能將應用程式部署至 Kubernetes 叢集。

在管線工作區中使用 Kubernetes API 端點時, Code Stream 會建立必要的 Kubernetes 資源 (如 ConfigMap、密碼和網繭) 以執行持續整合 (CI) 工作或自訂工作。 Code Stream 使用 NodePort 與容器進行通訊。

若要在各個管線執行過程中共用資料,您必須提供持續性磁碟區宣告, Code Stream 會將此持續性磁碟區宣告掛接到容器以儲存資料,並將其用於後續管線執行。

Code Stream 管線工作區支援使用 Docker 和 Kubernetes 執行持續整合工作和自訂工作。

如需有關設定工作區的詳細資訊,請參閱設定管線工作區

將應用程式部署至 Kubernetes 叢集的工作流程使用 Jenkins、Code Stream、GitHub、適用於 Git 的觸發器和 Kubernetes。

開發工具、部署執行個體和管線 YAML 檔案必須可用,以便管線可以建置、測試、發佈及部署應用程式。管線會將應用程式部署到 Kubernetes 叢集的開發和生產執行個體。

此工作流程將協助您導覽將應用程式發佈至 Kubernetes 叢集的程序。

自動發佈應用程式的其他方法:

  • 您可以使用 Code Stream 原生建置功能和 Docker 建置主機,而不是使用 Jenkins 建置應用程式。
  • 您可以將應用程式部署到 Amazon Web Services (AWS) 叢集,而不是將其部署到 Kubernetes 叢集。

如需有關使用 Code Stream 原生建置功能和 Docker 主機的詳細資訊,請參閱:

必要條件

  • 確認要部署的應用程式代碼位於正在運作的 GitHub 存放庫中。
  • 確認您具有有效的 Jenkins 執行個體。
  • 確認您具有有效的電子郵件伺服器。
  • Code Stream 中,建立用於連線至電子郵件伺服器的電子郵件端點。
  • Amazon Web Services (AWS) 上設定兩個 Kubernetes 叢集分別用於開發和生產,您的管線將在其中部署應用程式。
  • 確認 GitHub 存放庫包含管線的 YAML 程式碼,或包含用於定義環境之中繼資料和規格的 YAML 檔案。

程序

  1. Code Stream 中,按一下端點 > 新增端點,然後建立您將在管線中使用以從 GitHub 存放庫提取程式碼的 Jenkins 端點。
  2. 若要建立 Kubernetes 端點,請按一下新增端點
    1. 為開發 Kubernetes 叢集建立端點。
    2. 為生產 Kubernetes 叢集建立端點。
      Kubernetes 叢集的 URL 可能包含連接埠號碼,也可能不包含連接埠號碼。
      例如:
      https://10.111.222.333:6443
      https://api.kubernetesserver.fa2c1d78-9f00-4e30-8268-4ab81862080d.k8s-user.com
  3. 建立一個管線,將應用程式的容器 (例如 Wordpress) 部署到開發 Kubernetes 叢集,並設定管線的輸入內容。
    1. 若要允許管線辨識觸發管線之 GitHub 中的程式碼認可,請在管線中按一下輸入索引標籤,然後選取自動插入內容
    2. 新增名為 GIT_COMMIT_ID 的內容,然後按一下旁邊的星號。
      當管線執行時,管線執行會顯示 Git 觸發器傳回的認可識別碼。
    在使用 Jenkins 和 Kubernetes 的管線中,輸入索引標籤顯示 Git 輸入內容。
  4. 新增通知以在管線成功或失敗時傳送電子郵件。
    1. 在管線中,按一下通知索引標籤,然後按一下新增
    2. 若要在管線執行完成時新增電子郵件通知,請選取電子郵件,並選取完成。然後,選取電子郵件伺服器,輸入電子郵件地址,並按一下儲存
    3. 若要針對管線失敗新增另一個電子郵件通知,請選取失敗,然後按一下儲存
    新增電子郵件通知時,選取其中一個管線狀態,然後選取電子郵件伺服器和收件者。
  5. 將開發階段新增至管線,並新增建置、測試和發佈應用程式的工作。然後,驗證每個工作。
    1. 若要建置應用程式,請新增使用 Jenkins 端點的 Jenkins 工作,然後從 Jenkins 伺服器執行建置工作。然後,若要使管線提取程式碼,請輸入以下格式的 Git 分支:${input.GIT_BRANCH_NAME}
    2. 若要測試應用程式,請新增使用相同 Jenkins 端點的 Jenkins 工作,然後從 Jenkins 伺服器執行測試工作。然後,輸入相同的 Git 分支。
    3. 若要發佈應用程式,請新增使用相同 Jenkins 端點的 Jenkins 工作,然後從 Jenkins 伺服器執行發佈工作。然後,輸入相同的 Git 分支。
    在使用 Jenkins 和 Kubernetes 的管線中,用於建置應用程式的 Jenkins 工作使用 Jenkins 端點、Jenkins 工作和分支名稱。
  6. 將部署階段新增至管線,然後新增需要核准應用程式部署的工作,以及將應用程式部署到 Kubernetes 叢集的另一個工作。然後,驗證每個工作。
    1. 若要申請核准應用程式部署,請新增使用者操作工作,新增必須予以核准的使用者的電子郵件地址,並輸入訊息。然後,啟用傳送電子郵件
    2. 若要部署應用程式,請新增 Kubernetes 工作。然後,在 Kubernetes 工作內容中,選取開發 Kubernetes 叢集,選取建立動作,然後選取本機定義裝載來源。然後,選取本機 YAML 檔案。
  7. 新增可讓 Code Stream 使用 Git 觸發器的 Git webhook,當開發人員認可其程式碼時,會觸發管線。
    在觸發 Kubernetes 管線的適用於 Git 的 Webhook 中,您必須輸入分支和密碼 Token。
  8. 若要測試管線,請移至 GitHub 存放庫,更新應用程式 YAML 檔案,並認可變更。
    1. Code Stream 中,確認認可將會顯示。
    1. 按一下觸發器 > Git > 活動
    2. 尋找管線的觸發器。
    3. 按一下儀表板 > 管線儀表板
    4. 在管線儀表板上的最新成功變更區域中,找到 GIT_COMMIT_ID。
  9. 檢查您的管線程式碼並確認該變更會出現。

結果

恭喜您!您已自動將軟體應用程式部署至 Kubernetes 叢集。

範例: 將應用程式部署至 Kubernetes 叢集的管線 YAML 範例

對於此範例中使用的管線類型,YAML 類似於下列程式碼:

apiVersion: v1
kind: Namespace
metadata:
  name: ${input.GIT_BRANCH_NAME}
  namespace: ${input.GIT_BRANCH_NAME}
---  
apiVersion: v1
data:
  .dockercfg: eyJzeW1waG9ueS10YW5nby1iZXRhMi5qZnJvZy5pbyI6eyJ1c2VybmFtZSI6InRhbmdvLWJldGEyIiwicGFzc3dvcmQiOiJhRGstcmVOLW1UQi1IejciLCJlbWFpbCI6InRhbmdvLWJldGEyQHZtd2FyZS5jb20iLCJhdXRoIjoiZEdGdVoyOHRZbVYwWVRJNllVUnJMWEpsVGkxdFZFSXRTSG8zIn19
kind: Secret
metadata:
  name: jfrog
  namespace: ${input.GIT_BRANCH_NAME}
type: kubernetes.io/dockercfg
---   
apiVersion: v1
kind: Service
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  ports:
    - port: 80
  selector:
    app: codestream
    tier: frontend
  type: LoadBalancer 
---
apiVersion: extensions/v1
kind: Deployment
metadata:
  name: codestream
  namespace: ${input.GIT_BRANCH_NAME}
  labels:
    app: codestream
spec:
  selector:
    matchLabels:
      app: codestream
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: codestream
        tier: frontend
    spec:
      containers:
      - name: codestream
        image: cas.jfrog.io/codestream:${input.GIT_BRANCH_NAME}-${Dev.PublishApp.output.jobId}
        ports:
        - containerPort: 80
          name: codestream
      imagePullSecrets:
      - name: jfrog
      

下一步

若要將軟體應用程式部署至生產 Kubernetes 叢集,請再次執行這些步驟,然後選取生產叢集。

若要瞭解有關將 Code Stream 與 Jenkins 整合的詳細資訊,請參閱如何整合 Code Stream 與 Jenkins