場景說明
本文實現的是一個比較複雜的基於Jenkins的CI/CD Pipeline流程。該流程實現如下持續整合和部署操作和場景:
1. 首先從**Git**或**Gogs**中獲取java應用程式碼。
2. 然後將其編譯成WAR應用包。
3. 使用**JUnit**進行功能測試
4. 使用**SonarQube**對其進行程式碼分析
5. 將WAR應用包推送至**Nexus**的Maven倉儲中
6. 構建**App Image**
7. 部署到**DEV**環境
8. 人工確認是否遷生至**STAGE**環境
9. 最後將App Image部署至STAGE環境
執行環境本場景可以在OpenShift 3.11/4.x執行環境,並已經在minishift和OpenShift CRC的執行環境中驗證。不過由於執行的軟體比較多,如使用minishift/OpenShift CRC,建議啟動時指定記憶體至少為10GB。
配置操作過程 準備執行所需資源1. 新建三個專案,分別是執行Jenkins的CICD專案,以及開發(Dev)和準上線環境(Stage)。
$ oc new-project USER-ID-dev$ oc new-project USER-ID-stage$ oc new-project USER-ID-cicd2. 用管理員使用者執行命令,允許從USER-ID-cicd專案訪問另外兩個專案的資源。
$ oc policy add-role-to-group edit system:serviceaccounts:USER-ID-cicd -n USER-ID-dev$ oc policy add-role-to-group edit system:serviceaccounts:USER-ID-cicd -n USER-ID-stage3. 執行命令建立應用模板(其實也可直接基於模板檔案建立應用)
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml -n openshift4. 成功後可以進入OpenShift Console中的Developer檢視,然後在USER-ID-cicd專案中進入“+Add”的“From Catalog”。
6. 再次執行第4步,在模板中選擇CI/CD分類中點選“Gogs+Nexus+Sonar used by Jenkins”,然後點選“Instantiate Template”,然後在“Instantiate Template”頁面中將DEV和STAGE專案名設為USER-ID-dev和USER-ID-stage,最後點選Create即可。
7. 在部署完後(其狀態應該是深藍色),可以在OpenShift Console的Developer檢視中檢視USER-ID-cicd專案部署的應用和狀態。應該如下圖包括6個部署(其中4個應用2個數據庫)。
8. 執行命令獲
得Jenkins、Gogs、Nexus和SonarQube的控制檯訪問地址,並設定到環境變數中。
$ GOGS=http://$(oc get route gogs -n USER-ID-cicd -o template --template '{{.spec.host}}')$ JENKINS=https://$(oc get route jenkins -n USER-ID-cicd -o template --template '{{.spec.host}}')$ NEXUS=http://$(oc get route nexus -n USER-ID-cicd -o template --template '{{.spec.host}}')$ SONARQUBE=https://$(oc get route sonarqube -n USER-ID-cicd -o template --template '{{.spec.host}}')訪問使用者名稱和密碼為:
- gogs: gogs/gogs
- nexus: admin/admin123
- sonarqube:admin/admin
配置Gogs並匯入應用程式碼為了能讓Jenkins從Gogs獲取應用程式碼,我們先需要將應用程式碼匯入到Gogs。
3. 在Clone Adress欄中填https://github.com/OpenShiftDemos/openshift-tasks,然後在Repository填openshift-task,最後點選Migration Repository。成功會看到gogs/openshift-tasks的Repository和相關應用程式碼。
執行Jenkins Pipeline1. 執行命令啟動Jenkins的Pipeline流程。
$ oc start-build tasks-pipeline2. 可以在OpenShift Console中進入Builds->tasks-pipeline->Builds->tasks-pipeline-1檢視執行進度。當出現以下步驟時, 點選"Input Required"連結跳轉到Jenkins。
3. 在Jinkins Console中通檢視Jenkins -> USER-ID-cicd -> USER-ID-cicd/tasks-pipeline -> #1的Console Output,此時執行停在以下步驟中。然後點選Promote即可。
4. 用admin/admin登入並
訪問SonarQube的控制檯,可以檢視Bugs的情況。
5. 訪問Nexus控制檯,用admin/admin123登入,然後檢視下載的應用依賴檔案。
7. 獲取部署在USER-ID-dev和USER-ID-stage專案中的應用route,然後用瀏覽器訪問。
其他說明在我們使用的https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml模板檔案中引用了gogs-template.yaml、sonarqube-template.yml等另外幾個模板,在這些模板中指定了用到的Image的名稱和版本。如果這些Image更新後無法訪問舊版本了,需要手工修改這些Template的YAML檔案,更新它們使用的Image版本後再次建立模板即可。