|
|
@@ -28,6 +28,7 @@ pipeline {
|
|
|
echo ">>> 环境:${params.env}, Harbor项目:${env.HARBOR_PROJECT}, K8s命名空间:${params.NAMESPACE}"
|
|
|
if (params.DOMAIN?.trim()) {
|
|
|
echo ">>> 域名:${params.DOMAIN}, TLS Secret:${params.TLS_SECRET}"
|
|
|
+ echo ">>> 注意:TLS Secret 应该已经存在,请确保命名空间一致"
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -64,7 +65,30 @@ pipeline {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- stage(' Kubernetes 部署') {
|
|
|
+ stage('�� 验证 TLS Secret') {
|
|
|
+ when {
|
|
|
+ expression { params.DOMAIN?.trim() }
|
|
|
+ }
|
|
|
+ steps {
|
|
|
+ script {
|
|
|
+ sh """
|
|
|
+ export KUBECONFIG=${KUBECONFIG_PATH}
|
|
|
+
|
|
|
+ # 验证 TLS Secret 是否存在
|
|
|
+ if ! kubectl get secret ${params.TLS_SECRET} -n ${params.NAMESPACE} >/dev/null 2>&1; then
|
|
|
+ echo "❌ TLS Secret '${params.TLS_SECRET}' 在命名空间 '${params.NAMESPACE}' 中不存在!"
|
|
|
+ echo "请先创建 TLS Secret:"
|
|
|
+ echo "kubectl create secret tls ${params.TLS_SECRET} --cert=fullchain.pem --key=privkey.pem -n ${params.NAMESPACE}"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "✅ TLS Secret '${params.TLS_SECRET}' 验证成功"
|
|
|
+ """
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ stage('�� Kubernetes 部署') {
|
|
|
steps {
|
|
|
script {
|
|
|
def domain = params.DOMAIN?.trim()
|
|
|
@@ -82,6 +106,7 @@ pipeline {
|
|
|
|
|
|
# 更新 Ingress(如果提供了域名)
|
|
|
if [ -n "${domain}" ]; then
|
|
|
+ echo ">>> 更新 Ingress 配置..."
|
|
|
kubectl apply -n ${params.NAMESPACE} -f - <<EOF
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
kind: Ingress
|
|
|
@@ -115,6 +140,7 @@ EOF
|
|
|
fi
|
|
|
else
|
|
|
# 创建新的 Deployment 和 Service
|
|
|
+ echo ">>> 创建新的 Deployment 和 Service..."
|
|
|
kubectl apply -n ${params.NAMESPACE} -f - <<EOF
|
|
|
apiVersion: apps/v1
|
|
|
kind: Deployment
|
|
|
@@ -151,6 +177,7 @@ EOF
|
|
|
|
|
|
# 创建 Ingress(如果提供了域名)
|
|
|
if [ -n "${domain}" ]; then
|
|
|
+ echo ">>> 创建新的 Ingress..."
|
|
|
kubectl apply -n ${params.NAMESPACE} -f - <<EOF
|
|
|
apiVersion: networking.k8s.io/v1
|
|
|
kind: Ingress
|
|
|
@@ -184,6 +211,10 @@ EOF
|
|
|
fi
|
|
|
fi
|
|
|
|
|
|
+ # 等待部署完成
|
|
|
+ echo ">>> 等待部署完成..."
|
|
|
+ kubectl wait --for=condition=available --timeout=300s deployment/${PROJECT_NAME} -n ${params.NAMESPACE}
|
|
|
+
|
|
|
# 显示部署状态
|
|
|
echo ">>> 部署状态:"
|
|
|
kubectl get all -n ${params.NAMESPACE}
|
|
|
@@ -193,7 +224,7 @@ EOF
|
|
|
if [ -n "${domain}" ]; then
|
|
|
echo ">>> 应用部署完成!"
|
|
|
echo ">>> 访问地址:https://${domain}"
|
|
|
- echo ">>> 注意:确保域名 ${domain} 已正确解析到集群"
|
|
|
+ echo ">>> 注意:确保域名 ${domain} 已正确解析到集群公网IP"
|
|
|
else
|
|
|
echo ">>> 应用部署完成!"
|
|
|
echo ">>> 注意:未配置域名,请手动配置 Ingress 或使用 NodePort 访问"
|
|
|
@@ -219,7 +250,7 @@ EOF
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- stage(' 清理悬空镜像 <none>') {
|
|
|
+ stage(' 清理悬空镜像 <none>') {
|
|
|
steps {
|
|
|
script {
|
|
|
sh """
|
|
|
@@ -230,7 +261,7 @@ EOF
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- stage(' 触发 Harbor 镜像保留策略') {
|
|
|
+ stage(' 触发 Harbor 镜像保留策略') {
|
|
|
steps {
|
|
|
script {
|
|
|
sh """
|
|
|
@@ -245,7 +276,12 @@ EOF
|
|
|
|
|
|
post {
|
|
|
success {
|
|
|
- echo "✅ 构建 & 部署成功 "
|
|
|
+ echo "✅ 构建 & 部署成功!"
|
|
|
+ script {
|
|
|
+ if (params.DOMAIN?.trim()) {
|
|
|
+ echo "🌐 应用可通过 https://${params.DOMAIN} 访问"
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
failure {
|
|
|
echo "❌ 构建或部署失败,请检查日志"
|