Files
2026-07-03 20:19:17 +08:00

94 lines
3.5 KiB
Groovy

pipeline {
agent any
stages {
// ========== 阶段1:拉取代码 ==========
stage('1. 拉取代码') {
steps {
checkout scm
}
}
// ========== 阶段2:扫描可用服务 ==========
stage('2. 扫描可用服务') {
steps {
script {
// 扫描包含 docker-compose.yaml 的一级子目录
def dirs = sh(
script: 'find . -maxdepth 2 -name "docker-compose.yaml" -printf "%h\n" | sed "s|^\\./||" | sort -u',
returnStdout: true
).trim()
// 转换为 Groovy 列表
def serviceList = dirs.split('\n') as List
// 存入环境变量供后续使用
env.SERVICE_CHOICES = serviceList.join(',')
echo "✅ 发现服务: ${serviceList}"
}
}
}
// ========== 阶段3:弹出下拉菜单(人工选择) ==========
stage('3. 选择服务') {
steps {
script {
// 将逗号分隔的字符串转回列表
def choices = env.SERVICE_CHOICES.split(',') as List
// 如果列表为空,直接报错退出
if (choices.isEmpty() || choices[0] == '') {
error('❌ 未找到任何包含 docker-compose.yaml 的服务目录!')
}
// 弹出下拉菜单
def selected = input(
message: '请选择要部署的服务目录:',
parameters: [
choice(
name: 'SERVICE_DIR',
choices: choices,
description: '选择对应的 docker-compose 目录'
)
]
)
env.SELECTED_SERVICE = selected
echo "✅ 用户选择了: ${env.SELECTED_SERVICE}"
}
}
}
// ========== 阶段4:部署容器 ==========
stage('4. 部署容器') {
steps {
script {
// 进入选中的子目录执行 docker-compose
dir("${env.SELECTED_SERVICE}") {
echo "🚀 开始部署服务: ${env.SELECTED_SERVICE}"
// 如果存在则停止并删除旧容器(忽略失败)
sh 'docker-compose down || true'
// 拉取最新镜像(如果依赖外部镜像)并使用最新 yaml 创建/启动
sh 'docker-compose up -d --build'
// 打印运行状态
sh 'docker-compose ps'
echo "✅ 部署完成!"
}
}
}
}
}
// ========== 清理工作区(可选) ==========
post {
always {
echo '🏁 构建流程结束'
cleanWs() // 清理工作区,释放磁盘空间
}
}
}