☰
CICD_01_持续集成与Jenkins入门
2026/10/1 20:59:48 网站建设 项目流程

【CI/CD】持续集成入门与 Jenkins 基础:从概念到第一个 Pipeline

🔑关键词:CI/CD、Jenkins、Pipeline、Jenkinsfile、持续集成、自动化构建


一、什么是 CI/CD?

1.1 三个核心概念

概念英文含义
持续集成(CI)Continuous Integration频繁地将代码合并到主干,每次合并自动触发构建和测试
持续交付(CD)Continuous Delivery在 CI 基础上,代码随时可以手动触发部署到生产环境
持续部署(CD)Continuous 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-lts

3.3 初始化配置

首次访问http://localhost:8080,按以下步骤完成初始化:

  1. 解锁 Jenkins:输入初始管理员密码
  2. 安装插件:选择「安装推荐的插件」
  3. 创建管理员账户
  4. 配置 Jenkins URL

四、Pipeline 核心概念

Pipeline 是 Jenkins 的核心功能,用代码定义整个 CI/CD 流程。

4.1 两种 Pipeline 语法

类型说明推荐度
Declarative(声明式)结构化语法,更易读易维护✅ 推荐
Scripted(脚本式)基于 Groovy 脚本,更灵活复杂场景使用

4.2 关键术语

术语说明
Pipeline整个流水线,定义完整的 CI/CD 流程
Stage阶段,如 Build、Test、Deploy
Step步骤,每个阶段内的具体操作
Node/Agent执行任务的节点
Jenkinsfile定义 Pipeline 的文件,放在项目根目录

五、第一个 Jenkinsfile

5.1 最简 Pipeline

// Jenkinsfilepipeline{agent any stages{stage('构建'){steps{echo'正在构建...'sh'echo "Build complete"'}}stage('测试'){steps{echo'正在运行测试...'sh'echo "Tests passed"'}}stage('部署'){steps{echo'正在部署...'sh'echo "Deployed successfully"'}}}}

5.2 Java 项目 Pipeline

pipeline{agent any tools{maven'Maven-3.9'jdk'JDK-21'}stages{stage('编译'){steps{sh'mvn clean compile'}}stage('单元测试'){steps{sh'mvn test'}post{always{junit'target/surefire-reports/*.xml'}}}stage('打包'){steps{sh'mvn package -DskipTests'}}stage('部署'){steps{sh'scp target/*.jar deploy@server:/app/'sh'ssh deploy@server "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 key:SSH 密钥 - Secret text:Token/Secret - Secret file:证书文件

7.3 在 Pipeline 中使用

pipeline{agent any environment{// 引用凭据GIT_CREDENTIALS=credentials('git-credentials-id')DB_PASSWORD=credentials('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{sh'mvn clean package'}}}}

8.3 Webhook 触发(GitLab)

1. Jenkins 安装 GitLab 插件 2. 在 Jenkins Pipeline 配置中勾选「Build when a change is pushed to GitLab」 3. 复制 Webhook URL 4. 在 GitLab 项目 → Settings → Webhooks 中粘贴 URL 5. 测试 Webhook 是否正常

九、面试高频问题

Q1:CI 和 CD 的区别?

答:CI(持续集成)关注代码合并后的自动构建和测试;CD 有两个含义——持续交付(Continuous Delivery)是代码随时可部署到生产环境,但需要手动触发;持续部署(Continuous Deployment)是测试通过后自动部署,无需人工干预。

Q2:Jenkins 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 集成与通知配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询