处理 容器 没有 sshpass 问题
This commit is contained in:
Vendored
+32
-28
@@ -55,6 +55,9 @@ pipeline {
|
|||||||
stage('环境准备') {
|
stage('环境准备') {
|
||||||
steps {
|
steps {
|
||||||
script {
|
script {
|
||||||
|
// 确保 Jenkins 容器内有 sshpass
|
||||||
|
sh "which sshpass || (apt-get update && apt-get install -y sshpass)"
|
||||||
|
|
||||||
// 检查/安装 Docker
|
// 检查/安装 Docker
|
||||||
sh """
|
sh """
|
||||||
${SSH_CMD} '
|
${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('启动新版本') {
|
stage('启动新版本') {
|
||||||
steps {
|
steps {
|
||||||
script {
|
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 指向新色
|
* - sed 修改 nginx proxy_pass 指向新色
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ http {
|
|||||||
|
|
||||||
# HTTP → HTTPS 跳转
|
# HTTP → HTTPS 跳转
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80 default_server;
|
||||||
server_name api.offerpai.com.cn;
|
server_name api.offerpai.com.cn;
|
||||||
|
|
||||||
# Nginx 自身健康检查
|
# Nginx 自身健康检查
|
||||||
|
|||||||
Reference in New Issue
Block a user