| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- pipeline {
- agent any
- environment {
- REGISTRY = "harbor.xxx.com"
- IMAGE_NAME = "portal-service-frontend"
- IMAGE_TAG = "latest"
- NAMESPACE = "portal-frontends"
- INGRESS_NAME = "portal-service-frontend"
- INGRESS_HOST = "radar-power.asia"
- TLS_SECRET = "portal-tls"
- }
- stages {
- stage('Build Image') {
- steps {
- script {
- sh """
- docker build -t ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG} .
- docker login ${REGISTRY} -u harbor-username -p harbor-password
- docker push ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}
- """
- }
- }
- }
- stage('Deploy to Kubernetes') {
- steps {
- script {
- sh """
- kubectl create namespace ${NAMESPACE} --dry-run=client -o yaml | kubectl apply -f -
- # 创建 Deployment
- cat <<EOF | kubectl apply -f -
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: ${IMAGE_NAME}
- namespace: ${NAMESPACE}
- spec:
- replicas: 2
- selector:
- matchLabels:
- app: ${IMAGE_NAME}
- template:
- metadata:
- labels:
- app: ${IMAGE_NAME}
- spec:
- containers:
- - name: ${IMAGE_NAME}
- image: ${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}
- ports:
- - containerPort: 80
- EOF
- # 创建 Service
- cat <<EOF | kubectl apply -f -
- apiVersion: v1
- kind: Service
- metadata:
- name: ${IMAGE_NAME}
- namespace: ${NAMESPACE}
- spec:
- selector:
- app: ${IMAGE_NAME}
- ports:
- - port: 80
- targetPort: 80
- type: ClusterIP
- EOF
- # 创建 Ingress
- cat <<EOF | kubectl apply -f -
- apiVersion: networking.k8s.io/v1
- kind: Ingress
- metadata:
- name: ${INGRESS_NAME}
- namespace: ${NAMESPACE}
- annotations:
- nginx.ingress.kubernetes.io/rewrite-target: /
- spec:
- ingressClassName: nginx
- rules:
- - host: ${INGRESS_HOST}
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: ${IMAGE_NAME}
- port:
- number: 80
- tls:
- - hosts:
- - ${INGRESS_HOST}
- secretName: ${TLS_SECRET}
- EOF
- """
- }
- }
- }
- stage('Fix Ingress Controller Service') {
- steps {
- script {
- echo "检查 ingress-nginx-controller Service 是否是 NodePort..."
- def svcType = sh(script: "kubectl get svc ingress-nginx-controller -n ingress-nginx -o jsonpath='{.spec.type}'", returnStdout: true).trim()
- if (svcType != "NodePort") {
- echo "修改 ingress-nginx-controller Service 类型为 NodePort..."
- sh """
- kubectl patch svc ingress-nginx-controller -n ingress-nginx -p '{"spec": {"type": "NodePort"}}'
- """
- } else {
- echo "ingress-nginx-controller 已经是 NodePort,无需修改"
- }
- sh "kubectl get svc ingress-nginx-controller -n ingress-nginx -o wide"
- }
- }
- }
- }
- }
|