pipeline { agent any environment { REMOTE_HOST_A = "43.130.56.138" // 远程服务器A REMOTE_HOST_B = "43.130.59.68" // 远程服务器B REMOTE_PROJECT_PATH_A = "/data/webapps/prod_lessie_sourcing_agents" // 远程 Python 项目路径 VENV_DIR_A = "/data/webapps/prod_lessie_sourcing_agents/venv" // 远程虚拟环境目录 REMOTE_PROJECT_PATH_B = "/data/webapps/prod_lessie_sourcing_agents" VENV_DIR_B = "/data/webapps/prod_lessie_sourcing_agents/venv" CONDA_PATH = "/root/miniconda3/bin/conda" // 修改为实际 Conda 安装路径 } 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") sh "ssh ${REMOTE_HOST_A} 'sh /data/sh/kill_lessie_sourcing_agents_7001.sh'" } } stage('工程A同步') { steps { echo("同步A") sh """ ssh ${REMOTE_HOST_A} 'mkdir -p ${REMOTE_PROJECT_PATH_A}' rsync -avz --exclude 'venv' ${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 ' """ } } stage('工程A启动') { steps { echo("启动A") sh """ ssh ${REMOTE_HOST_A} ' conda activate search mv ${REMOTE_PROJECT_PATH_A}/server.py ${REMOTE_PROJECT_PATH_A}/server7001.py source ${VENV_DIR_A}/bin/activate TIMESTAMP=\$(date +"%Y%m%d_%H%M%S") nohup env APP_ENV=prod python ${REMOTE_PROJECT_PATH_A}/server7001.py --port 7001 > ${REMOTE_PROJECT_PATH_A}/logs/lessie_sourcing_agents_\${TIMESTAMP}.log 2>&1 & ' """ } } stage('探测A服务 ') { steps { echo("探测A服务") sh "ssh ${REMOTE_HOST_A} 'sh /data/sh/check_lessie_agents_7001.sh' " } } stage('进程B下线') { steps { echo("下线B") sh "ssh ${REMOTE_HOST_B} 'sh /data/sh/kill_lessie_sourcing_agents_7001.sh'" } } stage('工程B同步') { steps { echo("同步B") sh """ ssh ${REMOTE_HOST_B} 'mkdir -p ${REMOTE_PROJECT_PATH_B}' rsync -avz --exclude 'venv' ${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 ' """ } } stage('工程B启动') { steps { echo("启动B") sh """ ssh ${REMOTE_HOST_B} ' conda activate search mv ${REMOTE_PROJECT_PATH_B}/server.py ${REMOTE_PROJECT_PATH_B}/server7001.py source ${VENV_DIR_B}/bin/activate TIMESTAMP_02=\$(date +"%Y%m%d_%H%M%S") nohup env APP_ENV=prod python ${REMOTE_PROJECT_PATH_B}/server7001.py --port 7001 > ${REMOTE_PROJECT_PATH_B}/logs/lessie_sourcing_agents_\${TIMESTAMP_02}.log 2>&1 & ' """ } } } post { success { echo '✅ 部署成功!' } failure { echo '❌ 部署失败,请检查日志!' } } } # =======================改造========================= pipeline { agent any parameters { choice(name: 'DEPLOY_TARGET', choices: ['AB', 'A', 'B'], description: '选择要部署的目标实例') string(name: 'Code_branch', defaultValue: 'main', description: 'Git 分支') } tools{ go 'go1.24.0' } environment { REMOTE_HOST_A = "43.153.98.191" REMOTE_HOST_B = "49.51.41.243" NGINX_HOST = "49.51.46.148" REMOTE_PROJECT_PATH_A = "/data/webapps/go_lessie_sourcing_api" REMOTE_PROJECT_PATH_B = "/data/webapps/go_lessie_sourcing_api" NGINX_GO_backend_A = "10.0.0.10" NGINX_GO_backend_B = "10.0.0.8" PORT_A = "8100" PORT_B = "8100" CONNECTION_TIMEOUT = "1200" CHECK_PORT_SCRIPT = "/data/sh/check_port.sh" NGINX_RELOAD_SCRIPT = "/data/sh/set_prod_go_backend_weight.sh" SEND_STOP_GOAPP_SCRIPT = "/data/sh/send_stop_goapp.sh" WAIT_CONNECTIONS_SCRIPT = "/data/sh/wait_for_connections.sh" 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/go/lessie-sourcing-api.git' } } stage('依赖并构建') { steps { sh """ cd ${WORKSPACE}/ export GOVCS="git.deeplink.media:git,*:git" go mod tidy -v -x make build-linux chmod +x ./build/lessie-sourcing-api """ } } stage('部署实例 A') { when { expression { params.DEPLOY_TARGET == 'A' || params.DEPLOY_TARGET == 'AB' } } steps { script { echo "=== 部署实例 A ===" } // 调用 A 的部署逻辑 build job: 'deploy-instance-A', parameters: [string(name: 'PORT', value: "${PORT_A}")] } } stage('部署实例 B') { when { expression { params.DEPLOY_TARGET == 'B' || params.DEPLOY_TARGET == 'AB' } } steps { script { echo "=== 部署实例 B ===" } // 调用 B 的部署逻辑 build job: 'deploy-instance-B', parameters: [string(name: 'PORT', value: "${PORT_B}")] } } } post { success { echo '✅ 部署成功!' } failure { echo '❌ 部署失败,请检查日志!' } } } # =================改造===============================