初始化提交
This commit is contained in:
155
jenkins/流水线配置/s1_jennie.im/s1_new.conf
Normal file
155
jenkins/流水线配置/s1_jennie.im/s1_new.conf
Normal file
@@ -0,0 +1,155 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
REMOTE_HOST_A = "43.130.56.138"
|
||||
REMOTE_HOST_B = "43.130.53.202"
|
||||
NGINX_HOST = "49.51.46.148"
|
||||
|
||||
REMOTE_PROJECT_PATH_A = "/data/webapps/lessie_sourcing_agents"
|
||||
VENV_DIR_A = "/data/webapps/lessie_sourcing_agents/venv"
|
||||
|
||||
REMOTE_PROJECT_PATH_B = "/data/webapps/lessie_sourcing_agents"
|
||||
VENV_DIR_B = "/data/webapps/lessie_sourcing_agents/venv"
|
||||
|
||||
CONDA_PATH = "/root/miniconda3/bin/conda"
|
||||
|
||||
NGINX_PY_backend_A = "10.0.0.5"
|
||||
NGINX_PY_backend_B = "10.0.0.13"
|
||||
PORT_A = "8000"
|
||||
PORT_B = "8002"
|
||||
|
||||
CONNECTION_TIMEOUT = "600" // 等待连接关闭的超时时间(秒)
|
||||
|
||||
NGINX_RELOAD_SCRIPT = "/data/sh/set_s1_backend_weight_new.sh" // 设置nginx后端组up/down
|
||||
WAIT_CONNECTIONS_SCRIPT = "/data/sh/wait_s1_for_connections.sh" // 等待连接数变为0
|
||||
CHECK_STATUS_SCRIPT = "/data/sh/check_s1_backend_status.sh" // 检查后端组状态
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Checkout 代码') {
|
||||
steps {
|
||||
git branch: "${params.Code_branch}", credentialsId: 'fly_gitlab_auth', url: 'http://172.24.16.20/python/lessie-sourcing-agents.git'
|
||||
}
|
||||
}
|
||||
stage('A脱离后端组') {
|
||||
steps {
|
||||
echo "将实例A的权重设置为down,停止接收新连接"
|
||||
sh "ssh ${NGINX_HOST} 'sh ${NGINX_RELOAD_SCRIPT} ${NGINX_PY_backend_A} ${PORT_A} down'"
|
||||
echo "等待实例A的现有连接关闭"
|
||||
sh "ssh ${REMOTE_HOST_A} 'sh ${WAIT_CONNECTIONS_SCRIPT} ${PORT_A} ${CONNECTION_TIMEOUT}'"
|
||||
}
|
||||
}
|
||||
stage('A下线&同步') {
|
||||
steps {
|
||||
echo("下线A后同步A")
|
||||
sh "ssh ${REMOTE_HOST_A} 'sh /data/sh/kill_lessie_sourcing_agents.sh'"
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_A} 'mkdir -p ${REMOTE_PROJECT_PATH_A}'
|
||||
rsync -avz --exclude 'venv' --exclude '.git' ${WORKSPACE}/ ${REMOTE_HOST_A}:${REMOTE_PROJECT_PATH_A}/
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('A依赖&启动') {
|
||||
steps {
|
||||
echo("A依赖&启动")
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_A} '
|
||||
cd ${REMOTE_PROJECT_PATH_A}
|
||||
source ~/.bashrc
|
||||
conda activate search
|
||||
source ${VENV_DIR_A}/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
TIMESTAMP=\$(date +"%Y%m%d_%H%M%S")
|
||||
LOGFILE="${REMOTE_PROJECT_PATH_A}/logs/lessie_sourcing_agents_\${TIMESTAMP}.log"
|
||||
nohup env APP_ENV=s1 python ${REMOTE_PROJECT_PATH_A}/server.py --port 8000 > ${REMOTE_PROJECT_PATH_A}/logs/lessie_sourcing_agents_\${TIMESTAMP}.log 2>&1 &
|
||||
ln -sf "\$LOGFILE" ${REMOTE_PROJECT_PATH_A}/logs/lessie_sourcing_agents_latest.log
|
||||
'
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('探测A服务 ') {
|
||||
steps {
|
||||
echo("探测A服务")
|
||||
sh "sleep 5"
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_A} "head -n 300 ${REMOTE_PROJECT_PATH_A}/logs/lessie_sourcing_agents_latest.log | grep -i 'error' || true"
|
||||
ssh ${REMOTE_HOST_A} "sh /data/sh/check_lessie_agents_8000.sh"
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('恢复A流量') {
|
||||
steps {
|
||||
echo "恢复实例A的流量"
|
||||
sh "sleep 5"
|
||||
sh "ssh ${NGINX_HOST} 'sh ${NGINX_RELOAD_SCRIPT} ${NGINX_PY_backend_A} ${PORT_A} up'"
|
||||
echo "实例 A 部署完成"
|
||||
}
|
||||
}
|
||||
stage('截B流量') {
|
||||
steps {
|
||||
echo "将实例B的权重设置为down,停止接收新连接"
|
||||
sh "ssh ${NGINX_HOST} 'sh ${NGINX_RELOAD_SCRIPT} ${NGINX_PY_backend_B} ${PORT_B} down'"
|
||||
echo "等待实例B的现有连接关闭"
|
||||
sh "ssh ${REMOTE_HOST_B} 'sh ${WAIT_CONNECTIONS_SCRIPT} ${PORT_B} ${CONNECTION_TIMEOUT}'"
|
||||
}
|
||||
}
|
||||
stage('B下线&同步') {
|
||||
steps {
|
||||
echo("B下线&同步")
|
||||
sh "ssh ${REMOTE_HOST_B} 'sh /data/sh/kill_lessie_sourcing_agents.sh'"
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_B} 'mkdir -p ${REMOTE_PROJECT_PATH_B}'
|
||||
rsync -avz --exclude 'venv' --exclude '.git' ${WORKSPACE}/ ${REMOTE_HOST_B}:${REMOTE_PROJECT_PATH_B}/
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('B依赖&启动') {
|
||||
steps {
|
||||
echo("B依赖&启动")
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_B} '
|
||||
cd ${REMOTE_PROJECT_PATH_B} &&
|
||||
source ~/.bashrc &&
|
||||
conda activate search &&
|
||||
source ${VENV_DIR_B}/bin/activate &&
|
||||
pip install --upgrade pip &&
|
||||
pip install -r requirements.txt
|
||||
TIMESTAMP=\$(date +"%Y%m%d_%H%M%S")
|
||||
LOGFILE="${REMOTE_PROJECT_PATH_B}/logs/lessie_sourcing_agents_\${TIMESTAMP}.log"
|
||||
nohup env APP_ENV=s1 python ${REMOTE_PROJECT_PATH_B}/server.py --port 8002 > ${REMOTE_PROJECT_PATH_B}/logs/lessie_sourcing_agents_\${TIMESTAMP}.log 2>&1 &
|
||||
ln -sf "\$LOGFILE" ${REMOTE_PROJECT_PATH_B}/logs/lessie_sourcing_agents_latest.log
|
||||
'
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('探测B服务 ') {
|
||||
steps {
|
||||
echo("探测B服务")
|
||||
sh "sleep 5"
|
||||
sh """
|
||||
ssh ${REMOTE_HOST_B} "head -n 300 ${REMOTE_PROJECT_PATH_B}/logs/lessie_sourcing_agents_latest.log | grep -i 'error' || true"
|
||||
ssh ${REMOTE_HOST_B} "sh /data/sh/check_lessie_agents_8002.sh"
|
||||
"""
|
||||
}
|
||||
}
|
||||
stage('恢复B流量') {
|
||||
steps {
|
||||
echo "恢复实例B的流量"
|
||||
sh "sleep 5"
|
||||
sh "ssh ${NGINX_HOST} 'sh ${NGINX_RELOAD_SCRIPT} ${NGINX_PY_backend_B} ${PORT_B} up'"
|
||||
echo "实例 B 部署完成"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
echo '✅ 部署成功!'
|
||||
}
|
||||
failure {
|
||||
echo '❌ 部署失败,请检查日志!'
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user