第五章 九析帶你玩轉 rancher - 流水線發佈

本系列文章:
java


第一章:九析帶你玩轉 rancher - 安裝篇git

第二章:九析帶你玩轉 rancher - 導入集羣篇spring

第三章:九析帶你玩轉 rancher - 集成 gitlabdocker

第四章:九析帶你玩轉 rancher - 集成 harborshell

第五章:九析帶你玩轉 rancher - 流水線發佈api

目錄併發

1 前言app

2 設置流水線maven

    2.1 關聯代碼庫tcp

        2.1.1 指定項目空間

        2.1.2 設置代碼庫

    2.2 關聯鏡像庫

    2.3 全局流水線設置

    2.4 項目空間流水線設置

3 執行流水線

4 流水線成功執行


1 前言

        本文是在上章《九析帶你玩轉 rancher - 集成 gitlab》的基礎上進行配置的,因此在發佈 rancher 流水線前,需確保 rancher 和 gitlab 已經關聯。

流水線是 DevOps 的實現,它提供很是友好的界面 UI,使開發人員僅僅經過鼠標,就能夠完成整個微服務的發佈上線。在 rancher 中,一個微服務就對應一條流水線。


2 設置流水線

        設置流水線需同時設置全局流水線和項目流水線。全局流水線的設置會影響到項目流水線。

2.1 關聯代碼庫

2.1.1 指定項目空間

        本文 default 項目空間下配置流水線:

clipboard.png

        在 default 項目空間下,選擇「資源」 -> 「流水線」 菜單:

clipboard2.png

2.1.2 設置代碼庫

        選擇「設置代碼庫」按鈕:

clipboard3.png

        選擇「刷新代碼庫」按鈕:

clipboard4.png

        因爲 gitlab 已經跟 rancher 關聯,故刷新代碼庫以後,就會顯示你在 gitlab 中的服務代碼:

clipboard5.png

        啓用服務:

clipboard6.png

        點擊完成:

clipboard7.png

2.2 關聯鏡像庫

        本文在 default 空間下關聯鏡像庫:

clipboard8.png

        添加憑證:

clipboard9.png

        填寫相關信息:

clipboard10.png

2.3 全局流水線設置

        選擇指定集羣(zcy-arch-k8s),再選擇「工具」,最後選擇「流水線」:

clipboard11.png

        修改內容以下:

clipboard12.png

        全局流水線會控制項目流水線的併發個數、資源佔比狀況等。

2.4 項目空間流水線設置

        項目空間流水線需同時選中「集羣」(zcy-arch-k8s)和「項目空間」(default):

clipboard13.png

        選擇 「編輯配置」 子菜單:

clipboard14.png         點擊 「設置流水線」 連接後的圖示以下:

clipboard15.png        可根據各自需求添加流水線「階段」,通常狀況下,整個流水線跑四個階段就足夠了,即:

1 clone 階段:這是系統默認的必須階段,指從代碼庫下載微服務的源代碼。

2 build 階段:編譯源代碼,並生成 Dockerfile 文件

3 publish 階段:根據上階段的 Dockerfile 文件生成鏡像,而後將鏡像上傳到指定鏡像倉庫

4 deploy 階段:從鏡像倉庫下載上階段生成的服務鏡像,而後啓動容器運行

        下面以 java 語言爲例,在服務(這裏是: chapter-001-helloworld)代碼庫建立 rancher 總流水線文件 .rancher-pipeline.yml,以下圖所示:

clipboard16.png

        文件定義了流水線 3 個階段,文件內容以下:

stages:

- name: Build

 steps:

 - runScriptConfig:

     image: jiuxi.harbor.org/stable/maven-3.6.0-jdk-8

     shellScript: mvn -B -U -DskipTests clean package spring-boot:repackage

- name: Publish

 steps:

 - publishImageConfig:

     dockerfilePath: ./Dockerfile

     buildContext: .

     tag: stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

     pushRemote: true

     registry: jiuxi.harbor.org

   env:

     PLUGIN_DEBUG: "true"

     PLUGIN_INSECURE: "true"

- name: Deploy

 steps:

 - applyYamlConfig:

     path: ./Deployment.yaml

notification: {}

        Publish 階段是把 Build 階段生成的 jar 文件,根據預先定義的 Dockerfile 文件作成服務鏡像,並推送到私有鏡像倉庫中,其中自定義 Dockerfile 文件定義以下:

FROM jiuxi.harbor.org/stable/java:8

MAINTAINER "jiuxi"<1494445739@qq.com>

ADD ./target/application.jar application.jar

EXPOSE 8080

CMD ["/bin/sh", "-c", "java -jar application.jar"]

        Deploy 階段是在 k8s 中執行自定義部署文件 Deployment.yaml,建立服務的 service 和 deployment 資源,並運行容器,自定義 Deployment.yaml 文件內容以下:

apiVersion: v1

kind: Service

metadata:

 name: ${CICD_GIT_REPO_NAME}

 labels:

   app: ${CICD_GIT_REPO_NAME}

spec:

 type: ClusterIP

 selector:

   app: ${CICD_GIT_REPO_NAME}

 ports:

 - port: 8080

   targetPort: 8080

---

apiVersion: apps/v1

kind: Deployment

metadata:

 name: ${CICD_GIT_REPO_NAME}

spec:

 replicas: 1

 selector:

   matchLabels:

     app: ${CICD_GIT_REPO_NAME}

 minReadySeconds: 5

 strategy:

   type: RollingUpdate

 template:

   metadata:

     labels:

       app: ${CICD_GIT_REPO_NAME}

   spec:

     containers:

     - name: ${CICD_GIT_REPO_NAME}

       image: jiuxi.harbor.org/stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

       livenessProbe:

         tcpSocket:

           port: 8080

       imagePullPolicy: Always

       env:

       - name: TZ

         value: "Asia/Shanghai"

       - name: MY_POD_IP

         valueFrom:

           fieldRef:

             fieldPath: status.podIP

       - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-stdout

         value: "stdout"

       - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-logs

         value: "/data/logs/${CICD_GIT_REPO_NAME}/*.log"

       volumeMounts:

       - name: logs

         mountPath: /data/logs/${CICD_GIT_REPO_NAME}

       - name: time

         mountPath: /etc/localtime

       resources:

         limits:

           memory: 1Gi

     volumes:

     - name: time

       hostPath:

         path: /etc/localtime

     - name: logs

       emptyDir: {}

     restartPolicy: Always

        提交 .rancher-pipeline.yaml、Deployment.yaml、Dockerfile 文件到 gitlab。而後在 rancher 中從新點擊「設置代碼庫」:

clipboard17.png

      「刷新代碼庫」,點擊「完成」:

clipboard18.png

        再點擊「編輯配置」:

clipboard19.png

        流水線已經自動配置好:

clipboard20.png

        肯定一下 Publish 階段的鏡像倉庫地址是否正確:

clipboard21.png

        點擊「完成」按鈕:

clipboard22.png

        點擊確認,整個流水線的配置已經完成。


3 執行流水線

        選擇「運行」菜單來執行流水線:

clipboard23.png

        選擇指定代碼分支,我這裏是「master」:

clipboard24.png

        點擊「運行」:clipboard25.png

        流水線開始執行,首次啓動流水線時,需下載 jenkins、minio、docker-registry 等鏡像,所以須要必定時間。若是執行報以下錯:clipboard26.png

        說明 pipeline 運行容器並不識別自定義域名,你須要重啓流水線。clipboard27.png

spacer.gif        啓動後,jenkins 會動態生成 pipeline 容器,此時你須要趁着 pipeline 容器生成瞬間進入它的控制檯(因此你最好同時打開 2 個 rancher 頁面,一個是流水線執行頁面,如上圖;另一個是 default 項目空間頁面,以下圖):clipboard28.png

spacer.gif        要注意,jenkins 在生成 pipeline 容器的時候,頁面會自動刷新(因此你不用手動刷新頁面);其次,你要確保流水線前面的狀態是 Running 時,操做後面的「更多」按鈕才能夠顯示「執行命令行」菜單:clipboard29.png

spacer.gif        在彈出的「執行命令行」界面輸入下面命令修改 /etc/hosts 文件:

echo "10.110.101.100 jiuxi.gitlab.com jiuxi.harbor.org jiuxi.nexus.org" >> /etc/hosts


4 流水線成功執行clipboard30.png

spacer.gif         在 default 項目空間下查看服務:clipboard31.png

spacer.gif        發現 chapter-001-helloworld 已經成功運行:clipboard32.png

spacer.gif        點擊進入 chapter-001-helloworld 查看 pod 日誌:clipboard33.png

spacer.gif        發現服務已經正常運行:clipboard34.png

spacer.gif        自此,輕鬆完爆 rancher 流水線發佈。

相關文章
相關標籤/搜索