
【Jenkins】实战与进阶多分支 Pipeline、Docker 集成与通知配置关键词Jenkins、多分支Pipeline、参数化构建、Docker、Webhook、通知、共享库一、多分支 Pipeline1.1 什么是多分支 Pipeline传统 Pipeline 只能监听一个分支。多分支 Pipeline 可以自动发现仓库中的所有分支为每个分支自动创建和配置 Pipeline。1.2 配置步骤1. Jenkins → 新建任务 → 选择「Multibranch Pipeline」 2. 配置分支源Branch Source - Git填写仓库地址和凭据 - GitHub / GitLab选择对应插件 3. 配置发现策略 - 发现所有分支 - 只发现特定分支如 main、develop、feature/* 4. 保存后Jenkins 自动扫描并为每个分支创建 Pipeline1.3 分支过滤// Jenkinsfile 中根据分支执行不同逻辑pipeline{agent any stages{stage(构建){steps{shmvn clean package -DskipTests}}stage(测试){when{// 只在 feature 分支执行测试branchfeature/*}steps{shmvn test}}stage(部署){when{// 只在 main 和 develop 分支部署anyOf{branchmainbranchdevelop}}steps{shbash deploy.sh}}}}1.4 when 条件判断stage(生产部署){when{allOf{branchmain// 分支是 mainexpression{env.DEPLOYtrue}// 环境变量 DEPLOYtrue}}steps{sh./deploy-production.sh}}条件说明branch xxx分支匹配environment name: xx, value: yy环境变量匹配expression { ... }Groovy 表达式allOf { ... }所有条件都满足anyOf { ... }任一条件满足not { ... }条件取反二、参数化构建2.1 定义参数pipeline{agent any parameters{string(name:DEPLOY_ENV,defaultValue:staging,description:部署环境)choice(name:VERSION,choices:[1.0,1.1,2.0],description:版本号)booleanParam(name:RUN_TESTS,defaultValue:true,description:是否运行测试)text(name:DEPLOY_NOTES,defaultValue:,description:部署备注)}stages{stage(构建){steps{echo部署环境:${params.DEPLOY_ENV}echo版本号:${params.VERSION}shmvn package -Dversion${params.VERSION}}}stage(测试){when{expression{params.RUN_TESTStrue}}steps{shmvn test}}stage(部署){steps{shbash deploy.sh${params.DEPLOY_ENV}${params.VERSION}echo部署备注:${params.DEPLOY_NOTES}}}}}2.2 参数类型类型说明示例string字符串输入版本号、环境名choice下拉选择环境选择booleanParam布尔值是否运行测试text多行文本部署备注password密码隐藏临时密钥file文件上传配置文件三、Docker 集成3.1 使用 Docker 作为构建环境pipeline{agent{docker{imagemaven:3.9-eclipse-temurin-21args-v maven-repo:/root/.m2}}stages{stage(编译){steps{shmvn clean compile}}stage(测试){steps{shmvn test}}}}3.2 构建 Docker 镜像pipeline{agent any environment{REGISTRYharbor.example.comIMAGE_NAMEzoo-management}stages{stage(构建镜像){steps{sh docker build \ -t${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}\ -t${REGISTRY}/${IMAGE_NAME}:latest \ . }}stage(推送镜像){steps{withCredentials([usernamePassword(credentialsId:harbor-credentials,usernameVariable:HARBOR_USER,passwordVariable:HARBOR_PASS)]){sh echo${HARBOR_PASS}| docker login${REGISTRY}-u${HARBOR_USER}--password-stdin docker push${REGISTRY}/${IMAGE_NAME}:${BUILD_NUMBER}docker push${REGISTRY}/${IMAGE_NAME}:latest }}}}}3.3 Docker Compose 部署stage(部署){steps{sh ssh deployserver EOF cd /app export IMAGE_TAG${BUILD_NUMBER}docker-compose pull docker-compose up -d docker image prune -f EOF }}四、通知配置4.1 邮件通知pipeline{agent any post{success{mail to:teamexample.com,subject:✅ 构建成功:${env.JOB_NAME}#${env.BUILD_NUMBER},body:构建成功\n\n详情:${env.BUILD_URL}}failure{mail to:teamexample.com,subject:❌ 构建失败:${env.JOB_NAME}#${env.BUILD_NUMBER},body:构建失败请检查日志。\n\n详情:${env.BUILD_URL}}}}五、Pipeline 共享库5.1 为什么需要共享库多个项目有相似的 Pipeline 逻辑避免在每个项目的 Jenkinsfile 中重复写。6.2 使用共享库项目的 Jenkinsfile 只需引入共享库并调用Library(my-shared-library)_buildJavaApp(jdk:JDK-21,maven:Maven-3.9)共享库目录结构vars/可调用方法、src/工具类、resources/配置文件。六、常见问题排查6.1 构建失败排查问题可能原因解决方案拉取代码失败凭据错误或网络不通检查凭据配置、SSH 连通性编译失败JDK/Maven 版本不匹配检查 tools 配置测试失败测试用例问题或环境问题查看测试报告、检查数据库连接部署失败服务器不可达或权限不足检查 SSH 连接、文件权限Docker 构建失败Dockerfile 错误或磁盘空间不足检查 Dockerfile、清理镜像6.2 Pipeline 调试技巧// 打印环境变量stage(调试){steps{shenv | sortecho当前分支:${env.GIT_BRANCH}echo构建号:${env.BUILD_NUMBER}echo工作目录:${env.WORKSPACE}}}// 暂停等待人工确认stage(确认部署){steps{input message:确认要部署到生产环境吗,ok:确认部署}}七、面试高频问题Q1多分支 Pipeline 的优势答自动发现仓库中所有分支为每个分支自动创建 Pipeline。结合when条件不同分支执行不同逻辑如 feature 分支只跑测试main 分支自动部署。无需为每个分支手动创建任务。Q2Jenkins 如何实现参数化构建答在 Jenkinsfile 中使用parameters块定义参数string/choice/booleanParam 等构建时会弹出表单让用户填写。Pipeline 中通过params.参数名引用。适用于选择部署环境、版本号等场景。Q3Jenkins Pipeline 共享库是什么答将多个项目共用的 Pipeline 逻辑封装成库放在独立的 Git 仓库中。项目通过Library(库名)引入调用其中定义的方法。避免每个项目重复写相同的 Pipeline 代码便于统一维护和升级。八、总结功能核心要点多分支 Pipeline自动发现分支when条件控制不同分支逻辑参数化构建parameters定义参数构建时动态传入Docker 集成agent docker 指定构建环境构建并推送镜像通知post 块中发送邮件/钉钉通知共享库抽取公共 Pipeline 逻辑多项目复用排查打印环境变量、input 人工确认、检查日志