/** * OfferPie Job Cleaner 部署流水线 * * 架构:Jenkins 本机构建镜像 → 本机重启容器 * 部署目录:/opt/offerpie/job-cleaner/ */ pipeline { agent any parameters { choice(name: 'BRANCH', choices: ['master', 'dev'], description: '选择要部署的分支') } environment { IMAGE_NAME = 'offerpie-job-cleaner' IMAGE_TAG = 'latest' CONTAINER_NAME = 'offerpie-job-cleaner' DEPLOY_DIR = '/opt/offerpie/job-cleaner' } stages { stage('拉取代码') { 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('构建镜像') { steps { sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." } } stage('部署') { steps { script { // 确保部署目录存在 sh "mkdir -p ${DEPLOY_DIR}" // 拷贝 docker-compose.yml 到部署目录 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('清理') { steps { // 清理悬空镜像 sh "docker image prune -f || true" } } } post { success { echo "✅ 部署成功!容器 ${CONTAINER_NAME} 已启动" } failure { echo '❌ 部署失败,请检查日志' } } }