目录一览:
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 中进行归档所以需要资源清单进行部署;