目錄一覽:
0x01 Jenkins之K8s叢集自動化部署單war包應用
- 前期準備
- (0) HelloWorld - Tomcat 應用伺服器
- (1) Nginx - Web伺服器
- (2) Jenkins Pipeline 腳本
- (3) Shell 部署腳本
- (4) 效果預覽
效果說明:

0x01 Jenkins之K8s叢集自動化部署單war包應用
實驗目的
描述: 采用Jenkins從Gitlab中拉取測試項目以及代碼品質檢測,然後進行編譯建構并利用K8s叢集進行WAR包應用部署實踐,最後将生成的制品進行歸檔到Gitlab的Release之中;
動态配置檔案或者腳本:
- setting.xml (Maven編譯建構配置檔案)
- HelloWorld.yaml (應用部署資源清單)
- options.sh (部署腳本)
前期準備
描述: 假定你已經按照我前面幾篇文章中安裝好基礎環境。
(0) HelloWorld - Tomcat 應用伺服器
- Step 1.基礎鏡像拉取于上傳到私有倉庫中
weiyigeek@weiyigeek-107:~/k8s/sonarqube$ docker tag tomcat:8.5.61-jdk8-corretto harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto
weiyigeek@weiyigeek-107:~/k8s/sonarqube$ docker push harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto
The push refers to repository [harbor.weiyigeek.top/devops/tomcat]
f13244e4918b: Pushed
536f15f78828: Pushed
1c98b6d16fad: Pushed
fdef502bf282: Pushed
cee8d35c645b: Pushed
8.5.61-jdk8-corretto: digest: sha256:110d7391739e868daf8c1bdd03fcb7ffe9eaf2b134768b9162e2cd47d58f7255 size: 1368
- Step 2.資源清單檔案
cat > HelloWorld.yaml <<'END'
apiVersion: v1
kind: Service
metadata:
name: deploy-maven-svc
spec:
type: NodePort # Service 類型
selector:
app: java-maven # 【注意】與deployment資源控制器建立的Pod标簽進行綁定;
release: stabel # Service 服務發現不能缺少Pod标簽,有了Pod标簽才能與之SVC對應
ports: # 映射端口
- name: http
port: 8080 # cluster 通路端口
targetPort: 8080 # Pod 容器内的服務端口
nodePort: 30089
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deploy-java-maven
spec:
serviceName: "deploy-maven-svc"
replicas: 3 # 副本數
selector: # 選擇器
matchLabels:
app: java-maven # 比對的Pod标簽非常重要
release: stabel
template:
metadata:
labels:
app: java-maven # 模闆标簽
release: stabel
spec:
volumes: # 關鍵點
- name: webapps # 卷名稱
hostPath: # 采用hostPath卷
type: DirectoryOrCreate # 卷類型DirectoryOrCreate: 如果子節點上沒有該目錄便會進行建立
path: /nfsdisk-31/test/ # 各主機節點上已存在的目錄此處是NFS共享
- name: timezone # 容器時區設定
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
containers:
- name: java-maven
image: harbor.weiyigeek.top/devops/tomcat:8.5.61-jdk8-corretto # 拉取的鏡像
imagePullPolicy: IfNotPresent
command: ["bash","-c","cp /tmp/${APPNAME} /usr/local/tomcat/webapps/ROOT.war && catalina.sh run"]
env:
- name: APPNAME
value: HelloWorld-v1.40.war
ports:
- name: http # 此端口在服務中的名稱
containerPort: 8080 # 容器暴露的端口
volumeMounts: # 挂載指定卷目錄
- name: webapps # Tomcat 應用目錄
mountPath: /tmp/
- name: logs # Tomcat 日志目錄
mountPath: /usr/local/tomcat/logs
- name: timezone # 鏡像時區設定
mountPath: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates: # 卷的體積要求模闆此處采用StorageClass存儲類主要針對于應用日志的存儲;
- metadata: # 根據模闆自動建立PV與PVC并且進行一一對應綁定;
name: logs
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: managed-nfs-storage # StorageClass存儲類
resources:
requests:
storage: 1Gi
END
(1) Nginx - Web伺服器
- Step 1.Nginx 配置檔案
root@468dd7df372e:/# grep -v "#" /etc/nginx/conf.d/default.conf
server {
listen 80;
listen [::]:80;
server_name rel.weiyigeek.top;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
- Step 2.将Jenkins建構的Release進行上傳在Nginx 中進行歸檔是以需要資源清單進行部署;