From 524a289a609eb772f418d49fbe22dded8d44dbdf Mon Sep 17 00:00:00 2001 From: zk Date: Tue, 26 May 2026 21:33:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=20=E5=AE=B9=E5=99=A8=20?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=20sshpass=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client-api/Jenkinsfile | 60 ++++++++++++++++++++++-------------------- client-api/nginx.conf | 2 +- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/client-api/Jenkinsfile b/client-api/Jenkinsfile index f92a571..3c798c3 100644 --- a/client-api/Jenkinsfile +++ b/client-api/Jenkinsfile @@ -55,6 +55,9 @@ pipeline { stage('环境准备') { steps { script { + // 确保 Jenkins 容器内有 sshpass + sh "which sshpass || (apt-get update && apt-get install -y sshpass)" + // 检查/安装 Docker sh """ ${SSH_CMD} ' @@ -162,34 +165,6 @@ pipeline { } } - /** - * 检查 Nginx - * - 不存在:启动 → docker cp 配置 → reload - * - 已存在:确保运行中 - */ - stage('检查Nginx') { - steps { - script { - def nginxExists = sh(script: "${SSH_CMD} 'docker ps -aq -f name=${CONTAINER_PREFIX}-nginx'", returnStdout: true).trim() - if (!nginxExists) { - echo "首次部署,初始化 Nginx 容器" - sh "${SSH_CMD} 'cd ${REMOTE_WORK_DIR} && docker-compose -f ${COMPOSE_FILE} up -d nginx'" - sh "sleep 3" - sh "${SSH_CMD} 'docker cp ${REMOTE_WORK_DIR}/client-api/nginx.conf ${CONTAINER_PREFIX}-nginx:/etc/nginx/nginx.conf'" - sh "${SSH_CMD} 'docker exec ${CONTAINER_PREFIX}-nginx nginx -s reload'" - } else { - def nginxRunning = sh(script: "${SSH_CMD} 'docker ps -q -f name=${CONTAINER_PREFIX}-nginx'", returnStdout: true).trim() - if (!nginxRunning) { - echo "Nginx 容器已停止,重新启动" - sh "${SSH_CMD} 'docker start ${CONTAINER_PREFIX}-nginx'" - sh "sleep 2" - } - echo "Nginx 容器已存在且运行中" - } - } - } - } - stage('启动新版本') { steps { script { @@ -232,6 +207,35 @@ pipeline { } } + /** + * 检查 Nginx + * - 放在健康检查之后,确保 blue/green 容器已运行,Nginx reload 时能解析主机名 + * - 不存在:启动 → docker cp 配置 → reload + * - 已存在:确保运行中 + */ + stage('检查Nginx') { + steps { + script { + def nginxExists = sh(script: "${SSH_CMD} 'docker ps -aq -f name=${CONTAINER_PREFIX}-nginx'", returnStdout: true).trim() + if (!nginxExists) { + echo "首次部署,初始化 Nginx 容器" + sh "${SSH_CMD} 'cd ${REMOTE_WORK_DIR} && docker-compose -f ${COMPOSE_FILE} up -d nginx'" + sh "sleep 3" + sh "${SSH_CMD} 'docker cp ${REMOTE_WORK_DIR}/client-api/nginx.conf ${CONTAINER_PREFIX}-nginx:/etc/nginx/nginx.conf'" + sh "${SSH_CMD} 'docker exec ${CONTAINER_PREFIX}-nginx nginx -s reload'" + } else { + def nginxRunning = sh(script: "${SSH_CMD} 'docker ps -q -f name=${CONTAINER_PREFIX}-nginx'", returnStdout: true).trim() + if (!nginxRunning) { + echo "Nginx 容器已停止,重新启动" + sh "${SSH_CMD} 'docker start ${CONTAINER_PREFIX}-nginx'" + sh "sleep 2" + } + echo "Nginx 容器已存在且运行中" + } + } + } + } + /** * 切换流量 * - sed 修改 nginx proxy_pass 指向新色 diff --git a/client-api/nginx.conf b/client-api/nginx.conf index 8e520dd..8ba3886 100644 --- a/client-api/nginx.conf +++ b/client-api/nginx.conf @@ -25,7 +25,7 @@ http { # HTTP → HTTPS 跳转 server { - listen 80; + listen 80 default_server; server_name api.offerpai.com.cn; # Nginx 自身健康检查