Jenkins Pipeline 快速开始

一、Jenkins Pipeline 介绍

Jenkins Pipeline 是 Jenkins 的核心插件,用于将软件交付流程(如构建、测试、部署等)定义为可重用、可版本化、可视化的自动化流水线 。它通过代码形式(通常是 Groovy 语法)描述整个流程,支持复杂的持续集成 / 持续部署(CI/CD)场景,且流水线定义(Jenkinsfile)可以与代码一起存入版本控制系统(如 Git),实现 "流水线即代码"(Pipeline as Code)。Pipeline 支持两种语法格式:声明式(Declarative Pipeline)和 脚本式(Scripted Pipeline)。

1、优点

  1. 可扩展性:支持复杂流程(如并行执行、条件判断、循环、异常处理等),满足多样化的 CI/CD 需求。
  2. 可维护性:流水线定义以代码形式存储,便于版本控制、评审和复用,避免手动配置的繁琐。
  3. 持久化:即使 Jenkins 重启或构建中断,流水线状态也能保留,支持从断点继续执行。
  4. 可视化:通过 Jenkins 界面直观展示流水线进度、阶段和步骤,便于问题排查。
  5. 集成性:无缝对接 Jenkins 生态的插件(如 Git、Docker、Kubernetes 等),扩展能力强。

2、声明式流水线(Declarative Pipeline)

声明式流水线是 Jenkins 2.5 后推出的简化语法,旨在提供结构化、易读的流水线定义方式。它更接近自然语言,适合大多数标准化的 CI/CD 流程。

核心特点:

  • 固定结构:必须包含在 pipeline 块中,且有明确的阶段划分(agent、stages、steps 等关键字)。
  • 声明式语法:通过关键字描述 "是什么"(如 agent any 表示在任意节点执行),而非 "怎么做"。
  • 内置功能:提供 post 块(定义构建后操作,如成功 / 失败通知)、environment(环境变量)、options(流水线选项)等简化配置的关键字。

示例:

Groovy 复制代码
pipeline {
  agent any  // 在任意可用节点执行
  environment {
    VERSION = '1.0.0'  // 定义环境变量
  }
  stages {
    stage('Build') {  // 构建阶段
      steps {
        sh 'echo "Building version ${VERSION}"'
        sh 'mvn clean package'
      }
    }
    stage('Test') {  // 测试阶段
      steps {
        sh 'mvn test'
      }
    }
  }
  post {  // 构建后操作
    success {
      echo 'Pipeline succeeded!'
    }
    failure {
      echo 'Pipeline failed!'
    }
  }
}

3、脚本式流水线(Scripted Pipeline)

脚本式流水线基于 Groovy 脚本语法,提供更灵活的编程能力,适合复杂、定制化的流程。它更接近传统编程,允许使用 Groovy 的控制结构(如 if-else、for、try-catch 等)。

核心特点:

  • 灵活语法:通过 node 块定义执行节点,无固定结构,可自由组合步骤和逻辑。
  • 编程式控制:支持 Groovy 的所有语法,适合处理动态逻辑(如根据条件选择不同部署环境)。
  • 低约束性:没有声明式的关键字限制,需要手动处理更多细节(如错误处理)。
示例:
Groovy 复制代码
node {  // 在节点上执行
  def version = '1.0.0'  // 定义变量
  stage('Build') {
    sh "echo 'Building version ${version}'"
    sh 'mvn clean package'
  }
  stage('Test') {
    sh 'mvn test'
  }
  // 构建后判断
  if (currentBuild.currentResult == 'SUCCESS') {
    echo 'Pipeline succeeded!'
  } else {
    echo 'Pipeline failed!'
  }
}

4、区别

维度 声明式流水线 脚本式流水线
语法风格 结构化、声明式(关键字驱动),类似配置文件 编程式(Groovy 脚本),类似代码逻辑
灵活性 约束性强,适合标准化流程 高度灵活,适合复杂、定制化流程
可读性 语法简洁,易读易写,适合新手 依赖 Groovy 知识,可读性取决于代码质量
错误处理 内置 post 块和 options 简化处理 需手动编写 try-catch 等逻辑
扩展性 依赖预定义关键字,扩展需通过插件 可直接调用 Groovy 库和 Jenkins API,扩展性更强
适用场景 常规 CI/CD 流程(如构建→测试→部署) 复杂逻辑(如动态阶段、条件分支、并行任务嵌套)

5、总结

  • 声明式流水线:推荐新手或标准化流程使用,语法简单、结构清晰,降低维护成本。
  • 脚本式流水线:适合需要高度定制化的场景,灵活但需掌握 Groovy 语法,适合复杂逻辑实现。

实际使用中,两者也可结合(如声明式中嵌入 script 块执行脚本式逻辑),平衡易用性和灵活性。

二、快速案例

Pipeline 5 个必备组成部分

  • pipeline:声明它所包含的内容为一个声明式的pipeline脚本。
  • agent:Jenkins 可以有主从节点,构建起 Jenkins 集群。agent 关键字用来指定 job 执行的节点。不同的节点具有的环境不同,有些节点有 maven 环境,有些节点有 Gradle,所以需要 agent 来指定 job 运行的节点。
  • stages:阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段)。
  • stage: 阶段,被 stages 包裹,一个 stages 可以有多个 stage。
  • steps: 步骤,为每个阶段的最小执行单元,被 stage 包裹。

1、新建流水线任务

Dashboard > 新建 Item

2、配置流水线

Dashboard > first-pipeline >Configuration

可以选择的流水线定义有两种:

Pipeline script:自己在下面编辑框内编写流水线脚本。

Pipeline script from SCM:从版本管理系统(如:Git)中拉取已经写好的 Jenkinsfile,实现流水线配置的可版本化。

  • 我们选择 Pipeline script

在右侧下拉选项中,选择 Hello World,以此为基础,编写一个简单的流水线脚本。

脚本如下:

Groovy 复制代码
pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码结束'
            }
        }
        stage('执行构建') {
            steps {
                echo '执行构建结束'
            }
        }
    }
}

agent any 表示当前构建任务可以运行在任一节点上。由 Jenkins 自己决定。

3、运行流水线

保存完流水线后,立即构建

构建完点击任务

点击流水线视图

可以看到 Jenkins 为我们呈现的可视化的流水线,包括每个阶段的耗时以及打印的日志,还可以选择某一阶段重新运行。

4、安装 Blue Ocean 插件

除了 Jenkins 原生的流水线视图外,我们还可以安装 Blue Ocean 插件,它提供了更丰富的功能,和更美观的界面。

Dashboard > Manage Jenkins > Plugins > Available plugins

下载完成后返回首页

打开 Blue Ocean

三、实战案例

Jenkins 实战2:pipeline 流水线实现自动化部署

相关推荐
艾莉丝努力练剑1 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源4 分钟前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
Trouvaille ~27 分钟前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏34 分钟前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南44 分钟前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
人间打气筒(Ada)1 小时前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
威迪斯特2 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.2 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔2 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
ONE_SIX_MIX2 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu