尧图精选

CICD_01_持续集成与Jenkins入门

🕒 发布时间:2026/10/1 20:59:48 📁 来源:尧图网络
【CI/CD】持续集成入门与 Jenkins 基础从概念到第一个 Pipeline关键词CI/CD、Jenkins、Pipeline、Jenkinsfile、持续集成、自动化构建一、什么是 CI/CD1.1 三个核心概念概念英文含义持续集成CIContinuous Integration频繁地将代码合并到主干每次合并自动触发构建和测试持续交付CDContinuous Delivery在 CI 基础上代码随时可以手动触发部署到生产环境持续部署CDContinuous Deployment在持续交付基础上通过测试后自动部署到生产环境无需人工干预代码提交 → 自动构建 → 自动测试 → 自动部署 ↑ ↑ ↑ ↑ CI CI CD(交付) CD(部署)1.2 为什么需要 CI/CD没有 CI/CD 的痛点手动打包、手动部署容易出错集成问题到了上线前才发现修复成本极高环境不一致导致在我电脑上能跑部署依赖某个人请假就没人能发布有了 CI/CD 之后每次提交自动触发构建和测试问题早发现构建、测试、部署全流程自动化减少人为失误保证每次发布的产物都是一致的任何人都能触发部署不依赖特定人员二、主流 CI/CD 工具对比工具特点适用场景Jenkins开源免费、插件生态丰富、高度可定制企业级项目需要高度定制GitLab CI与 GitLab 深度集成、YAML 配置使用 GitLab 托管的项目GitHub Actions与 GitHub 深度集成、Marketplace 丰富开源项目、GitHub 托管项目Drone轻量级、容器原生小型团队、容器化项目选择建议企业私有化部署选 Jenkins代码在 GitLab 选 GitLab CI代码在 GitHub 选 GitHub Actions。本系列以 Jenkins 为主。三、Jenkins 简介Jenkins是一款开源的自动化服务器用于执行 CI/CD 流水线。3.1 核心能力构建编译代码、打包应用测试运行单元测试、集成测试部署部署到测试/生产环境调度定时任务、Webhook 触发通知邮件、钉钉、Slack 通知3.2 安装方式Docker 安装推荐# 拉取 Jenkins 镜像dockerpull jenkins/jenkins:lts# 启动容器dockerrun-d\--namejenkins\-p8080:8080\-p50000:50000\-vjenkins_home:/var/jenkins_home\jenkins/jenkins:lts# 查看初始密码dockerexecjenkinscat/var/jenkins_home/secrets/initialAdminPassword直接安装# Ubuntu/Debiansudoapt-getinstalljenkins# CentOS/RHELsudoyuminstalljenkins# macOSbrewinstalljenkins-lts3.3 初始化配置首次访问http://localhost:8080按以下步骤完成初始化解锁 Jenkins输入初始管理员密码安装插件选择「安装推荐的插件」创建管理员账户配置 Jenkins URL四、Pipeline 核心概念Pipeline 是 Jenkins 的核心功能用代码定义整个 CI/CD 流程。4.1 两种 Pipeline 语法类型说明推荐度Declarative声明式结构化语法更易读易维护✅ 推荐Scripted脚本式基于 Groovy 脚本更灵活复杂场景使用4.2 关键术语术语说明Pipeline整个流水线定义完整的 CI/CD 流程Stage阶段如 Build、Test、DeployStep步骤每个阶段内的具体操作Node/Agent执行任务的节点Jenkinsfile定义 Pipeline 的文件放在项目根目录五、第一个 Jenkinsfile5.1 最简 Pipeline// Jenkinsfilepipeline{agent any stages{stage(构建){steps{echo正在构建...shecho Build complete}}stage(测试){steps{echo正在运行测试...shecho Tests passed}}stage(部署){steps{echo正在部署...shecho Deployed successfully}}}}5.2 Java 项目 Pipelinepipeline{agent any tools{mavenMaven-3.9jdkJDK-21}stages{stage(编译){steps{shmvn clean compile}}stage(单元测试){steps{shmvn test}post{always{junittarget/surefire-reports/*.xml}}}stage(打包){steps{shmvn package -DskipTests}}stage(部署){steps{shscp target/*.jar deployserver:/app/shssh deployserver systemctl restart myapp}}}post{success{echo✅ 构建成功}failure{echo❌ 构建失败}}}六、Freestyle vs Pipeline对比Freestyle 项目Pipeline 项目配置方式Web 界面点击配置Jenkinsfile 代码定义可追溯配置不可追溯随代码一起版本管理可复用难以复用Pipeline 可复用、可共享复杂逻辑难以实现支持条件、并行、循环推荐度❌ 不推荐✅ 推荐建议新项目直接用 Pipeline老 Freestyle 项目逐步迁移。七、凭据管理7.1 为什么需要凭据管理Pipeline 中需要访问 Git 仓库、部署服务器、数据库等这些都需要密码、Token 或密钥。不能明文写在 Jenkinsfile 中。7.2 添加凭据Jenkins → Manage Jenkins → Credentials → System → Global credentials 添加类型 - Username with password用户名密码 - SSH Username with private keySSH 密钥 - Secret textToken/Secret - Secret file证书文件7.3 在 Pipeline 中使用pipeline{agent any environment{// 引用凭据GIT_CREDENTIALScredentials(git-credentials-id)DB_PASSWORDcredentials(db-password-id)}stages{stage(拉取代码){steps{// 使用凭据访问 Gitgit credentialsId:git-credentials-id,url:https://gitlab.com/xxx/project.git}}stage(连接数据库){steps{sh mysql -h db-host -u root -p${DB_PASSWORD}-e SELECT 1 }}}}八、构建触发器8.1 触发方式方式说明场景手动触发点击「Build Now」调试、紧急发布定时触发Cron 表达式定时构建、日报Webhook代码推送时自动触发CI/CD 核心场景轮询 SCM定时检查代码变化GitLab/GitHub Webhook 不可用时的备选8.2 定时触发配置pipeline{agent any triggers{// 每天晚上 10 点构建cron(0 22 * * *)// 每 4 小时构建一次// cron(H H/4 * * *)}stages{stage(构建){steps{shmvn clean package}}}}8.3 Webhook 触发GitLab1. Jenkins 安装 GitLab 插件 2. 在 Jenkins Pipeline 配置中勾选「Build when a change is pushed to GitLab」 3. 复制 Webhook URL 4. 在 GitLab 项目 → Settings → Webhooks 中粘贴 URL 5. 测试 Webhook 是否正常九、面试高频问题Q1CI 和 CD 的区别答CI持续集成关注代码合并后的自动构建和测试CD 有两个含义——持续交付Continuous Delivery是代码随时可部署到生产环境但需要手动触发持续部署Continuous Deployment是测试通过后自动部署无需人工干预。Q2Jenkins Pipeline 和 Freestyle 的区别答Freestyle 通过 Web 界面配置配置不可追溯、难以复用Pipeline 通过 Jenkinsfile 代码定义随代码一起版本管理支持条件判断、并行执行、循环等复杂逻辑推荐优先使用 Pipeline。Q3如何在 Jenkins 中安全地管理密码和密钥答使用 Jenkins 凭据管理功能Credentials将密码、Token、密钥等存储在全局或项目级凭据中Pipeline 中通过credentials()函数引用避免明文写入代码。十、总结知识点核心要点CI/CD持续集成→持续交付→持续部署Jenkins开源自动化服务器支持构建/测试/部署Pipeline用 Jenkinsfile 定义 CI/CD 流程关键术语Stage、Step、Agent、Node凭据管理密码/Token 不要明文写在 Jenkinsfile触发器手动/定时/Webhook/轮询下一篇预告《Jenkins 实战与进阶》详解多分支 Pipeline、参数化构建、Docker 集成与通知配置。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →