/** * OfferPie Job Cleaner 部署流水线 * * 架构:Jenkins 本机构建镜像 → 本机重启容器 * 部署目录:/opt/offerpie/job-cleaner/ */ pipeline { agent any parameters { choice(name: 'BRANCH', choices: ['master', 'dev'], description: '选择要部署的分支') choice(name: 'ACTION', choices: ['deploy', 'stop'], description: '操作:deploy=构建部署,stop=停止服务') } environment { IMAGE_NAME = 'offerpie-job-cleaner' IMAGE_TAG = 'latest' CONTAINER_NAME = 'offerpie-job-cleaner' DEPLOY_DIR = '/var/jenkins_home/deploy/job-cleaner' } stages { stage('停止服务') { when { expression { params.ACTION == 'stop' } } steps { script { sh "cd ${DEPLOY_DIR} && docker compose down || true" echo "✅ 服务已停止" } } } stage('拉取代码') { when { expression { params.ACTION == 'deploy' } } steps { echo "拉取 ${params.BRANCH} 分支代码" git branch: "${params.BRANCH}", credentialsId: 'gitea-fab089c1-b55d-4b58-9fad', url: 'http://git.jianshixingqiu.com/offerpai/offerpie_job_cleaner.git' } } stage('构建镜像') { when { expression { params.ACTION == 'deploy' } } steps { sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." } } stage('部署') { when { expression { params.ACTION == 'deploy' } } steps { script { sh "mkdir -p ${DEPLOY_DIR}" sh "cp docker-compose.yml ${DEPLOY_DIR}/docker-compose.yml" sh "cd ${DEPLOY_DIR} && docker compose down || true" sh "cd ${DEPLOY_DIR} && docker compose up -d" sleep 5 sh "docker ps -f name=${CONTAINER_NAME} --format '{{.Status}}'" } } } stage('清理') { when { expression { params.ACTION == 'deploy' } } steps { sh "docker image prune -f || true" } } } post { success { script { if (params.ACTION == 'deploy') { echo "✅ 部署成功!容器 ${CONTAINER_NAME} 已启动" } else { echo "✅ 服务已停止" } } } failure { echo '❌ 操作失败,请检查日志' } } }