用户名  找回密码
 立即注册
查看: 490|回复: 0

[后端] jenkins-pipeline语法详解(声明式Pipeline和脚本式)

[复制链接]

279

主题

0

回帖

964

积分

超级版主

积分
964
发表于 2024-6-21 11:48:20 | 显示全部楼层 |阅读模式
本帖最后由 Shaw0xyz 于 2024-6-21 14:05 编辑

1. 引言

Jenkins 是一个流行的开源持续集成和持续交付工具,用于自动化构建、测试和部署软件项目。Jenkins Pipeline 是其核心功能之一,通过 Pipeline 语法,用户可以定义复杂的构建流程。Pipeline 主要有两种语法:声明式(Declarative)和脚本式(Scripted)。本文将详细介绍这两种语法的使用和差异。

2. 声明式 Pipeline 语法

声明式 Pipeline 是 Jenkins 2.0 引入的一种更简单、可读性更高的 Pipeline 语法。它通过预定义的语法结构使 Pipeline 更加直观和易于维护。

2.1 基本结构

声明式 Pipeline 的基本结构如下:

  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('Build') {
  5.             steps {
  6.                 echo 'Building...'
  7.             }
  8.         }
  9.         stage('Test') {
  10.             steps {
  11.                 echo 'Testing...'
  12.             }
  13.         }
  14.         stage('Deploy') {
  15.             steps {
  16.                 echo 'Deploying...'
  17.             }
  18.         }
  19.     }
  20. }
复制代码


2.2 详细解释

(1) pipeline:声明一个新的 Pipeline。
(2) agent:指定在哪个节点或环境中运行 Pipeline。`any` 表示在任意可用节点上运行。
(3) stages:定义一系列阶段(stage),每个阶段包含具体的构建步骤。
(4) stage:表示 Pipeline 的一个阶段。
(5) steps:在每个阶段中执行的具体步骤。

2.3 常用指令

2.3.1 参数化构建

  1. pipeline {
  2.     agent any
  3.     parameters {
  4.         string(name: 'BRANCH_NAME', defaultValue: 'main', description: 'Branch to build')
  5.     }
  6.     stages {
  7.         stage('Checkout') {
  8.             steps {
  9.                 git branch: "${params.BRANCH_NAME}", url: 'https://github.com/example/repo.git'
  10.             }
  11.         }
  12.     }
  13. }
复制代码


2.3.2 环境变量

  1. pipeline {
  2.     agent any
  3.     environment {
  4.         ENV_VAR = 'value'
  5.     }
  6.     stages {
  7.         stage('Example') {
  8.             steps {
  9.                 sh 'echo $ENV_VAR'
  10.             }
  11.         }
  12.     }
  13. }
复制代码


3. 脚本式 Pipeline 语法

脚本式 Pipeline 是一种更灵活和强大的语法,允许用户使用 Groovy 脚本定义 Pipeline。它适用于需要复杂逻辑和自定义功能的场景。

3.1 基本结构

脚本式 Pipeline 的基本结构如下:

  1. node {
  2.     stage('Build') {
  3.         echo 'Building...'
  4.     }
  5.     stage('Test') {
  6.         echo 'Testing...'
  7.     }
  8.     stage('Deploy') {
  9.         echo 'Deploying...'
  10.     }
  11. }
复制代码


3.2 详细解释

(1) node:在 Jenkins 节点上执行代码块。
(2) stage:表示 Pipeline 的一个阶段。

3.3 常用功能

3.3.1 使用工具

  1. node {
  2.     stage('Build') {
  3.         tool name: 'Maven 3', type: 'maven'
  4.         sh 'mvn clean install'
  5.     }
  6. }
复制代码


3.3.2 捕获错误并继续执行

  1. node {
  2.     stage('Test') {
  3.         try {
  4.             sh 'exit 1'
  5.         } catch (Exception e) {
  6.             echo 'Tests failed but we continue...'
  7.         }
  8.     }
  9.     stage('Deploy') {
  10.         echo 'Deploying...'
  11.     }
  12. }
复制代码


4. 声明式与脚本式 Pipeline 对比

4.1 易用性

声明式 Pipeline 更易于理解和使用,适合大多数常见的 CI/CD 场景。其结构清晰,便于维护和阅读。

4.2 灵活性

脚本式 Pipeline 提供更高的灵活性,允许用户编写复杂的 Groovy 脚本,适用于需要复杂逻辑或自定义功能的场景。

4.3 错误处理

脚本式 Pipeline 允许更细粒度的错误处理,而声明式 Pipeline 在这方面则相对有限。

5. 实践示例

5.1 声明式 Pipeline 示例

  1. pipeline {
  2.     agent any
  3.     stages {
  4.         stage('Build') {
  5.             steps {
  6.                 echo 'Building...'
  7.                 sh 'mvn clean install'
  8.             }
  9.         }
  10.         stage('Test') {
  11.             steps {
  12.                 echo 'Testing...'
  13.                 junit 'target/surefire-reports/*.xml'
  14.             }
  15.         }
  16.         stage('Deploy') {
  17.             steps {
  18.                 echo 'Deploying...'
  19.                 sh 'scp target/*.jar user@server:/path/to/deploy'
  20.             }
  21.         }
  22.     }
  23. }
复制代码


5.2 脚本式 Pipeline 示例

  1. node {
  2.     stage('Build') {
  3.         echo 'Building...'
  4.         sh 'mvn clean install'
  5.     }
  6.     stage('Test') {
  7.         echo 'Testing...'
  8.         junit 'target/surefire-reports/*.xml'
  9.     }
  10.     stage('Deploy') {
  11.         echo 'Deploying...'
  12.         sh 'scp target/*.jar user@server:/path/to/deploy'
  13.     }
  14. }
复制代码


6. 结论

通过本文的介绍,您应该掌握了 Jenkins Pipeline 的两种主要语法:声明式 Pipeline 和脚本式 Pipeline。声明式 Pipeline 更加简洁和易用,适合大多数常见场景;而脚本式 Pipeline 提供了更高的灵活性,适用于复杂的构建流程。根据具体需求选择合适的 Pipeline 语法,可以更高效地实现持续集成和持续交付。





/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & linux ...

~互撩~ TG: @Shaw_0xyz
荔枝学姐爱吃荔枝!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系站长|Archiver|手机版|小黑屋|主机论坛

GMT+8, 2025-4-6 23:19 , Processed in 0.068127 second(s), 24 queries .

Powered by 主机论坛 HostSsss.Com

HostSsss.Com

快速回复 返回顶部 返回列表