diff --git a/Jenkinsfile b/Jenkinsfile index 4bc308c..42ebaf5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,6 +9,7 @@ pipeline { parameters { choice(name: 'BRANCH', choices: ['master', 'dev'], description: '选择要部署的分支') + choice(name: 'ACTION', choices: ['deploy', 'stop'], description: '操作:deploy=构建部署,stop=停止服务') } environment { @@ -19,7 +20,22 @@ pipeline { } stages { + stage('停止服务') { + when { + expression { params.ACTION == 'stop' } + } + steps { + script { + sh "cd ${DEPLOY_DIR} && sudo docker compose down || true" + echo "✅ 服务已停止" + } + } + } + stage('拉取代码') { + when { + expression { params.ACTION == 'deploy' } + } steps { echo "拉取 ${params.BRANCH} 分支代码" git branch: "${params.BRANCH}", @@ -29,47 +45,52 @@ pipeline { } stage('构建镜像') { + when { + expression { params.ACTION == 'deploy' } + } steps { - sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." + sh "sudo docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ." } } stage('部署') { + when { + expression { params.ACTION == 'deploy' } + } 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" - - // 等待启动 + sh "sudo mkdir -p ${DEPLOY_DIR}" + sh "sudo cp docker-compose.yml ${DEPLOY_DIR}/docker-compose.yml" + sh "cd ${DEPLOY_DIR} && sudo docker compose down || true" + sh "cd ${DEPLOY_DIR} && sudo docker compose up -d" sleep 5 - - // 检查容器状态 - sh "docker ps -f name=${CONTAINER_NAME} --format '{{.Status}}'" + sh "sudo docker ps -f name=${CONTAINER_NAME} --format '{{.Status}}'" } } } stage('清理') { + when { + expression { params.ACTION == 'deploy' } + } steps { - // 清理悬空镜像 - sh "docker image prune -f || true" + sh "sudo docker image prune -f || true" } } } post { success { - echo "✅ 部署成功!容器 ${CONTAINER_NAME} 已启动" + script { + if (params.ACTION == 'deploy') { + echo "✅ 部署成功!容器 ${CONTAINER_NAME} 已启动" + } else { + echo "✅ 服务已停止" + } + } } failure { - echo '❌ 部署失败,请检查日志' + echo '❌ 操作失败,请检查日志' } } }