新闻详情

新闻详情

首页 / 资讯中心 / 详情

CICD_02_Jenkins实战与进阶

发布时间:2026/10/1 7:59:14来源:尧图网络
CICD_02_Jenkins实战与进阶
【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 人工确认、检查日志
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Node-RED低代码可视化:零Node.js基础构建工业数据看板 2026/10/1 11:10:10

Node-RED低代码可视化:零Node.js基础构建工业数据看板

1. 这不是写代码,是搭积木:为什么“拖拽可视化”能绕过Node.js门槛 “即使不会node.js,拖拽就可完成数据的可视化展示”——这句话乍看像营销话术,但背后是一套真实存在的、已被工业现场和中小团队验证数年的低代码可视化路径。它…

阅读更多 →
CIOE2026展台交换机选型与配置实操:从光模块到AI集群的现场验证 2026/10/1 11:10:09

CIOE2026展台交换机选型与配置实操:从光模块到AI集群的现场验证

CIOE2026的展台上要摆一台交换机,这在三年前几乎是不可想象的事。光通信展区的主角向来是光模块、硅光芯片、相干DSP,交换机最多在角落当个背景板。但这几年风向变了,AI集群、数据中心互联、CPO光电共封装全都要靠交换机来验证价值——谁家的…

阅读更多 →
银河麒麟V10 SSH安装配置与故障排查实战 2026/10/1 11:10:02

银河麒麟V10 SSH安装配置与故障排查实战

1. 银河麒麟 V10 上的一套 SSH 究竟由哪些东西组成很多人第一次接触银河麒麟 V10 的远程运维,脑子里只有一句"要用 SSH 连上去",但真到机器上敲命令的时候才发现,SSH 其实不是"一个软件",而是一组工具的集合。…

阅读更多 →
链表中间结点查找:快慢指针原理与代码实现全解析 2026/10/1 11:09:56

链表中间结点查找:快慢指针原理与代码实现全解析

链表相关的算法题里,找到链表的中间结点绝对是一道绕不开的入门题。不管你是刚开始刷 LeetCode、准备数据结构期末考试,还是面试前临时抱佛脚,这道题出现的频率都高得吓人。它的经典解法快慢指针,更是后续许多链表高级技巧的基石。…

阅读更多 →
安卓APK反编译与Smali修改实战指南 2026/10/1 11:09:56

安卓APK反编译与Smali修改实战指南

1. 这不是“破解”,而是安卓应用的深度理解入口你手头有个APK,想改掉启动页的广告、删掉某个没用的功能按钮、把深色主题换成自己设计的渐变紫,甚至想看看某款工具类App的算法逻辑——但打开Android Studio新建项目重写?成本太高&…

阅读更多 →
实时数据驱动的网红营销:从过程监控到策略调整 2026/10/1 11:09:56

实时数据驱动的网红营销:从过程监控到策略调整

做网红营销这几年,我最大的一个感触是:钱投出去以后,最怕的不是数据不好看,而是你等到活动结束才知道哪里出了问题。以前做一轮推广,经常要等供应商的结案报告,几十页PPT翻到最后,才发现那位“看…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉