Shaw0xyz 发表于 2024-6-21 11:48:20

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

本帖最后由 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 的基本结构如下:

pipeline {
    agent any
    stages {
      stage('Build') {
            steps {
                echo 'Building...'
            }
      }
      stage('Test') {
            steps {
                echo 'Testing...'
            }
      }
      stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
      }
    }
}

2.2 详细解释

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

2.3 常用指令

2.3.1 参数化构建

pipeline {
    agent any
    parameters {
      string(name: 'BRANCH_NAME', defaultValue: 'main', description: 'Branch to build')
    }
    stages {
      stage('Checkout') {
            steps {
                git branch: "${params.BRANCH_NAME}", url: 'https://github.com/example/repo.git'
            }
      }
    }
}

2.3.2 环境变量

pipeline {
    agent any
    environment {
      ENV_VAR = 'value'
    }
    stages {
      stage('Example') {
            steps {
                sh 'echo $ENV_VAR'
            }
      }
    }
}

3. 脚本式 Pipeline 语法

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

3.1 基本结构

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

node {
    stage('Build') {
      echo 'Building...'
    }
    stage('Test') {
      echo 'Testing...'
    }
    stage('Deploy') {
      echo 'Deploying...'
    }
}

3.2 详细解释

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

3.3 常用功能

3.3.1 使用工具

node {
    stage('Build') {
      tool name: 'Maven 3', type: 'maven'
      sh 'mvn clean install'
    }
}

3.3.2 捕获错误并继续执行

node {
    stage('Test') {
      try {
            sh 'exit 1'
      } catch (Exception e) {
            echo 'Tests failed but we continue...'
      }
    }
    stage('Deploy') {
      echo 'Deploying...'
    }
}

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

4.1 易用性

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

4.2 灵活性

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

4.3 错误处理

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

5. 实践示例

5.1 声明式 Pipeline 示例

pipeline {
    agent any
    stages {
      stage('Build') {
            steps {
                echo 'Building...'
                sh 'mvn clean install'
            }
      }
      stage('Test') {
            steps {
                echo 'Testing...'
                junit 'target/surefire-reports/*.xml'
            }
      }
      stage('Deploy') {
            steps {
                echo 'Deploying...'
                sh 'scp target/*.jar user@server:/path/to/deploy'
            }
      }
    }
}

5.2 脚本式 Pipeline 示例

node {
    stage('Build') {
      echo 'Building...'
      sh 'mvn clean install'
    }
    stage('Test') {
      echo 'Testing...'
      junit 'target/surefire-reports/*.xml'
    }
    stage('Deploy') {
      echo 'Deploying...'
      sh 'scp target/*.jar user@server:/path/to/deploy'
    }
}

6. 结论

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





/ 荔枝学姐de课后专栏 /

Hi!这里是荔枝学姐~

欢迎来到我的课后专栏

自然语言学渣 NLP摆烂姐

热衷于技术写作 IT边角料

AIGC & Coding & Linux ...

~互撩~ TG: @Shaw_0xyz
页: [1]
查看完整版本: jenkins-pipeline语法详解(声明式Pipeline和脚本式)