Jenkins 流水线(Pipeline)详解

        大家好,Jenkins 流水线(Pipeline)是一种可编排的持续集成和交付(CI/CD)方法,它以代码的方式定义整个软件开发过程中的构建、测试和部署流程。接下来就跟大家分享一下Jenkins 流水线(Pipeline)。

关于Jenkins安装可以参考:

使用Docker安装Jenkins

一、介绍

        Jenkins 流水线(Pipeline)是一种持续集成和交付(CI/CD)工具,它以代码的方式定义整个软件开发过程中的构建、测试和部署流程。与传统的 Jenkins 项目和自由风格项目相比,Jenkins 流水线具有以下显著特点和优势:

  1. 可编排性(Orchestration): 流水线允许用户通过编写脚本来定义软件开发过程中的整个流程,包括构建、测试、部署等环节的顺序和依赖关系,实现了对整个流程的可编排性和可控性。

  2. 可追溯性(Traceability): 流水线通过将整个软件开发过程的定义存储在版本控制系统中,实现了对每一次构建的全面追踪和记录,包括每个阶段的执行结果、日志输出等信息,方便用户进行问题排查和分析。

  3. 可重用性(Reusability): 流水线通过提供一系列的 Pipeline DSL(Domain-Specific Language)来定义流水线的各个阶段和任务,使得用户可以编写可重用的模块和函数,方便流水线的复用和扩展。

  4. 可视化(Visualization): 流水线提供了直观的可视化界面来展示流水线的执行过程和结果,包括阶段的执行状态、耗时、触发原因等信息,方便用户实时监控和管理流水线的运行情况。

  5. 灵活性(Flexibility): 流水线允许用户根据具体的需求和场景定制和调整流水线的配置,包括添加、删除、修改阶段和任务,调整触发条件和参数配置等,实现了对流水线的灵活性和定制性。

        Jenkins 流水线为软件开发团队提供了一种灵活、可控、可视化的持续集成和交付解决方案,帮助团队更好地管理和优化软件开发过程,提高开发效率和质量。

二、Pipeline 插件

        Pipeline 插件是 Jenkins 中用于创建和管理流水线的核心插件,它提供了一种强大而灵活的方式来定义整个软件开发过程中的构建、测试和部署流程。

1、插件安装

        Pipeline 插件是 Jenkins 的默认安装插件之一,通常在安装 Jenkins 后就会自动包含。如果你的 Jenkins 没有安装 Pipeline 插件,可以通过 Jenkins 管理界面的插件管理功能进行安装。

2、Pipeline DSL

        Pipeline 插件引入了一种名为 Pipeline DSL(Domain-Specific Language)的脚本语言,它是基于 Groovy 语言的,并提供了一系列关键字和语法来定义流水线的各个阶段和任务。Pipeline DSL 主要包括以下几个核心概念:

  • pipeline:定义整个流水线的入口,包括流水线的名称、参数、触发条件等信息。
  • stage:定义流水线的一个阶段,包括阶段的名称、任务、并行执行等信息。
  • step:定义流水线的一个任务,可以是构建、测试、部署等操作。
  • node:指定流水线的执行节点,可以是 Jenkins 主节点或者代理节点。
  • agent:指定流水线的代理节点,即流水线的执行环境。
  • parameters:定义流水线的参数,可以在流水线执行时传入不同的参数值。

3、Pipeline 编写

编写 Pipeline 脚本通常分为以下几个步骤:

  1. 定义流水线:使用 pipeline 关键字定义流水线,并设置流水线的参数和触发条件。
  2. 定义阶段:使用 stage 关键字定义流水线的各个阶段,并设置阶段的名称和任务。
  3. 编写任务:在每个阶段中使用 steps 或其他任务相关的关键字来编写具体的任务脚本,如构建、测试、部署等。
  4. 设置代理节点:如果需要在特定的节点上执行任务,可以使用 agentnode 关键字来设置执行节点。
  5. 参数化:如果流水线需要接受外部参数,可以使用 parameters 关键字定义参数列表,并在流水线执行时传入参数值。

4、示例

下面是一个简单的 Pipeline 脚本示例,演示了一个简单的构建和测试流水线:

pipeline {
    agent any
    
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}

        以上示例定义了一个包含两个阶段(Build 和 Test)的流水线,其中 Build 阶段用于执行 Maven 构建,Test 阶段用于执行 Maven 测试。这个示例演示了如何使用 Pipeline 插件来创建和管理流水线,以及如何编写简单的 Pipeline 脚本来定义流水线的各个阶段和任务。

三、Pipeline 脚本语法

        Pipeline 脚本语法是 Pipeline 插件提供的一种特定语法,用于编写 Jenkins 流水线的各个阶段和任务。

1、Stage(阶段)

Stage 是流水线中的一个逻辑单元,用于将流水线划分为不同的阶段,如构建、测试、部署等。

使用 stage 关键字定义一个阶段,并指定阶段的名称。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // 构建步骤
            }
        }
        stage('Test') {
            steps {
                // 测试步骤
            }
        }
        // 更多阶段...
    }
}

2、Step(步骤)

Step 是流水线执行的最小单元,用于执行具体的任务,如构建项目、运行测试、发送通知等。

使用不同的关键字或函数来定义一个步骤,如 sh(执行 Shell 命令)、echo(输出信息)、git(Git 操作)等。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                echo 'Running unit tests...'
                sh 'mvn test'
            }
        }
        // 更多步骤...
    }
}

3、Parallel(并行执行)

Parallel 允许将多个步骤或阶段并行执行,以提高流水线的执行效率。

使用 parallel 关键字将多个步骤或阶段包裹起来,并在其中定义需要并行执行的任务。

pipeline {
    agent any
    stages {
        stage('Test') {
            parallel {
                stage('Unit Tests') {
                    steps {
                        // 执行单元测试
                    }
                }
                stage('Integration Tests') {
                    steps {
                        // 执行集成测试
                    }
                }
            }
        }
    }
}

4、Node(节点)

Node 用于指定流水线的执行节点,即流水线的执行环境,可以是 Jenkins 主节点或代理节点。

使用 nodeagent 关键字指定执行节点,并在其中定义流水线的各个阶段和任务。

pipeline {
    agent {
        label 'my-agent' // 指定代理节点
    }
    stages {
        stage('Build') {
            steps {
                // 构建步骤
            }
        }
        // 更多阶段...
    }
}

四、流水线基础

        在 Jenkins 中创建简单的流水线通常涉及以下几个步骤:定义流水线的结构、设置环境变量、编写脚本以及运行流水线。

1、定义流水线结构

首先需要定义流水线的结构,包括流水线的名称、代理节点、阶段和步骤等。

下面是一个简单的流水线定义示例,包括了一个构建阶段和一个测试阶段。

pipeline {
    agent any // 使用任意可用的代理节点

    stages {
        stage('Build') { // 定义构建阶段
            steps {
                echo 'Building...'
                sh 'make build'
            }
        }
        stage('Test') { // 定义测试阶段
            steps {
                echo 'Testing...'
                sh 'make test'
            }
        }
    }
}

2、设置环境变量

可以在流水线中设置环境变量,用于在流水线执行过程中传递参数、配置选项等。

下面示例演示了如何设置一个环境变量并在流水线的步骤中使用。

pipeline {
    agent any

    environment {
        NAME = 'John' // 设置一个环境变量
    }

    stages {
        stage('Print') {
            steps {
                echo "Hello, ${NAME}!" // 使用环境变量
            }
        }
    }
}

3、编写流水线脚本

在流水线的各个阶段中编写脚本来实现具体的构建、测试、部署等任务。

下面示例展示了一个简单的流水线,其中包括了一个构建阶段和一个测试阶段,并在每个阶段中执行了一些命令。

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'make test'
            }
        }
    }
}

4、运行流水线

        在 Jenkins 中,可以通过在 Jenkins 界面上选择相应的流水线项目并点击“构建”按钮来手动触发流水线的执行。也可以通过配置触发器来实现自动触发流水线的执行,如定时触发、代码提交触发等。

        手动触发流水线的执行通常在 Jenkins 界面上进行,点击流水线项目的“构建”按钮即可。自动触发流水线的执行需要在流水线项目的配置中配置相应的触发器,如下:

pipeline {
    triggers {
        cron('H/5 * * * *') // 每隔 5 分钟触发一次流水线执行
    }
    ...
}

五、流水线高级特性

        在 Jenkins 中,流水线不仅可以实现简单的构建和测试任务,还可以利用一些高级特性来增强流水线的灵活性、可维护性和扩展性。下面详细介绍几种流水线的高级特性,并提供相应的示例代码。

1、参数化构建

参数化构建允许在流水线执行时传递参数值,使得流水线具有更大的灵活性。

下面是一个示例,演示了如何定义一个参数化的流水线,其中包括一个字符串类型的参数 ENVIRONMENT,用于指定环境名称。

pipeline {
    parameters {
        string(name: 'ENVIRONMENT', defaultValue: 'production', description: 'Environment name')
    }
    agent any
    stages {
        stage('Build') {
            steps {
                echo "Building for environment: ${params.ENVIRONMENT}"
            }
        }
    }
}

2、流水线共享库

流水线共享库允许将常用的流水线代码封装为可复用的库,并在多个流水线项目中共享和引用。

创建一个名为 vars 的目录,并在其中编写一个 Groovy 脚本文件(如 utils.groovy),定义一个名为 sayHello 的全局函数,然后在流水线脚本中引用该函数:

// vars/utils.groovy
def call() {
    echo 'Hello, world!'
}
// Jenkinsfile
@Library('my-shared-library') _
pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                utils.sayHello()
            }
        }
    }
}

3、异常处理

异常处理允许在流水线执行过程中捕获和处理异常情况,以实现更健壮的流水线。

下面示例展示了如何使用 try-catch 块来捕获异常,并在出现异常时执行相应的处理逻辑。

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                script {
                    try {
                        sh 'deploy.sh'
                    } catch (Exception e) {
                        echo "Failed to deploy: ${e.message}"
                        currentBuild.result = 'FAILURE'
                    }
                }
            }
        }
    }
}

4、日志记录

日志记录允许在流水线执行过程中输出自定义的日志信息,以便在 Jenkins 界面中查看流水线的执行日志。

下面示例展示了如何使用 echo 函数输出自定义的日志信息。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'make build'
            }
        }
    }
}

六、与源代码管理集成

        将流水线与版本控制系统(如 Git、SVN 等)集成可以实现当代码发生变更时自动触发流水线的执行,从而实现持续集成和持续交付。

1、Git 集成

        Git 是目前最流行的版本控制系统之一,在 Jenkins 中配置 Git 集成可以实现当代码提交或分支变更时自动触发流水线的执行。

        下面是一个简单的流水线配置示例,其中包括了 Git 集成,使用了 checkout 步骤来拉取代码并切换到指定分支。

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: 'master']], userRemoteConfigs: [[url: 'https://github.com/myuser/myrepo.git']]])
            }
        }
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }
}

2、SVN 集成

        SVN 是另一种常用的版本控制系统,与 Git 类似,通过配置 SVN 集成可以实现当代码提交或分支变更时自动触发流水线的执行。

        下面是一个简单的流水线配置示例,其中包括了 SVN 集成,使用了 checkout 步骤来拉取代码并切换到指定路径。

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                svn 'https://svn.example.com/svn/repo/trunk'
            }
        }
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }
}

3、高级配置

        除了简单的拉取代码外,还可以配置更多高级选项,如指定分支、拉取代码的深度、使用认证信息等。

例如:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', credentialsId: 'my-git-credentials', url: 'https://github.com/myuser/myrepo.git'
            }
        }
        // 其他阶段...
    }
}

七、与测试框架集成

将流水线与测试框架集成可以实现自动执行测试并生成测试报告,从而实现持续集成和持续交付。

1、JUnit 集成

        JUnit 是 Java 平台上广泛使用的单元测试框架,通过配置 JUnit 集成可以在流水线执行过程中自动执行单元测试,并生成 JUnit 格式的测试报告。

        下面是一个简单的流水线配置示例,其中包括了 JUnit 集成,使用了 junit 步骤来执行单元测试并生成测试报告。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
            post {
                always {
                    junit 'target/surefire-reports/*.xml'
                }
            }
        }
    }
}

2、TestNG 集成

        TestNG 是 Java 平台上的另一个流行的测试框架,与 JUnit 类似,通过配置 TestNG 集成可以在流水线执行过程中自动执行测试并生成测试报告。

        下面是一个简单的流水线配置示例,其中包括了 TestNG 集成,使用了 testng 步骤来执行测试并生成测试报告。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
            post {
                always {
                    testng 'target/surefire-reports/*.xml'
                }
            }
        }
    }
}

3、Selenium 集成

        Selenium 是用于自动化 Web 应用程序测试的工具,通过配置 Selenium 集成可以在流水线执行过程中自动执行 Web UI 测试,并生成测试报告。

        下面是一个简单的流水线配置示例,其中包括了 Selenium 集成,使用了 sh 步骤来执行 Selenium 测试脚本。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
        stage('Test') {
            steps {
                sh 'make test'
            }
            post {
                always {
                    sh 'python selenium_tests.py'
                }
            }
        }
    }
}

八、与部署工具集成

将流水线与部署工具集成可以实现自动化部署和发布,从而实现持续交付和持续部署。

此处将介绍两个常用的部署工具,具体可以参考:

Jenkins Pipeline常用插件整理

1、Docker 集成

        Docker 是一个流行的容器化平台,通过配置 Docker 集成可以在流水线执行过程中构建、打包和发布 Docker 镜像。

        下面是一个简单的流水线配置示例,其中包括了 Docker 集成,使用了 Docker Pipeline 插件提供的 docker.builddocker.push 步骤来构建和发布 Docker 镜像。

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    docker.build('my-image:latest')
                }
            }
        }
        stage('Push') {
            steps {
                script {
                    docker.withRegistry('https://docker.example.com', 'docker-credentials') {
                        docker.image('my-image:latest').push()
                    }
                }
            }
        }
    }
}

2、Kubernetes 集成

        Kubernetes 是一个开源的容器编排平台,通过配置 Kubernetes 集成可以在流水线执行过程中部署和管理容器化应用。

        下面是一个简单的流水线配置示例,其中包括了 Kubernetes 集成,使用了 Kubernetes Pipeline 插件提供的 kubectl 步骤来部署应用到 Kubernetes 集群。

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                script {
                    kubernetesDeploy(
                        kubeconfigId: 'my-kube-config',
                        configs: 'kube/*.yml'
                    )
                }
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/647981.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云计算-基础设施和管理机制(Infrastructure and Management Mechanisms)

逻辑网络边界(Logical Network Perimeter) 逻辑网络边界是软件控制的虚拟网络,它是物理网络的一部分。其主要思想是隔离逻辑网络,防止不希望的访问,同时仍然为合法用户提供访问权限。下图显示了云系统中一个简单的逻辑…

【Qt】Qt入门

思维导图 学习目标 这一系列是学习Qt,在C中,会发现有不少岗位的要求是熟悉Qt,所以Qt的学习是不能推迟的。 一、Qt的概述 1.1 Qt的特点 Qt是一个跨平台的C应用程序开发框架: 具有短平快的优秀特质:投资少&#xff0…

每日练习——同余方程以及格雷码

同余方程 题目描述 运行代码 #include<iostream> #define ll long long using namespace std; ll exgcd(ll a, ll b, ll& x, ll& y) {if (!b)return x 1, y 0, a;ll d exgcd(b, a % b, y, x);y - a / b * x;return d; } int main() {ll a, b, x, y;cin >…

【教学类-58-05】黑白三角拼图05(2-10宫格,每个宫格随机1张-6张,带空格纸,1页3张黑白3张白卡)

背景需求&#xff1a; 【教学类-58-04】黑白三角拼图04&#xff08;2-10宫格&#xff0c;每个宫格随机1张-6张&#xff0c;带空格纸&#xff0c;1页6张黑白&#xff0c;1张6张白卡&#xff09;-CSDN博客文章浏览阅读582次&#xff0c;点赞16次&#xff0c;收藏3次。【教学类-58…

Kafka 安装教程和基本操作

一、简介 Kafka 是最初由 Linkedin 公司开发&#xff0c;是一个分布式、分区的、多副本的、多订阅者&#xff0c;基于 zookeeper 协调的分布式日志系统&#xff08;也可以当做 MQ 系统&#xff09;&#xff0c;常见可以用于 web/nginx 日志、访问日志&#xff0c;消息服务等等…

C++之lambda函数与std::bind区别及用法实例(二百八十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

AI网络爬虫-从当当网批量获取图书信息

工作任务和目标&#xff1a;用户输入一个图书名称&#xff0c;然后程序自动从当当网批量获取图书信息 查看相关元素在源代码中的位置&#xff1a; 第一步&#xff1a;在deepseek中输入提示词&#xff1a; 你是一个Python爬虫专家&#xff0c;一步步的思考&#xff0c;完成以下…

5.26机器人基础-DH参数 正解

1.建立DH坐标系 1.确定Zi轴&#xff08;关节轴&#xff09; 2.确定基础坐标系 3.确定Xi方向&#xff08;垂直于zi和zi1的平面&#xff09; 4.完全确定各个坐标系 例子&#xff1a; 坐标系的布局是由个人决定的&#xff0c;可以有不同的选择 标准坐标系布局&#xff1a; …

HAL库LED点灯

一、搭建开发环境 &#xff08;一&#xff09;安装MDK5 具体安装请参照下面链接&#xff1a;如何开始一个stm32的简单程序的编译_stm32程序编译-CSDN博客 &#xff08;二&#xff09;安装Jdk 由于STM32CubeMX需要用到JAVA&#xff0c;因此需要安装jdk环境。 jdk官网下载链接…

素数判断的奥秘与编程实践

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、素数定义的深入理解 二、非素数的例子与思考 三、素数判断的编程实现 1. 穷举法判断素…

protobuf —— 认识和安装

protobuf —— 认识和安装 什么是序列化和反序列化有哪些常见的什么是序列化和反序列化工具Protobuf安装安装依赖开始安装 连接动态库一些遗留问题 我们今天来看一个序列化和反序列化的工具&#xff1a;protobuf。 什么是序列化和反序列化 序列化&#xff08;Serialization&a…

基于SpringBoot和Mybatis实现的留言板案例

目录 一、需求及界面展示 二、准备工作 引入依赖 .yml文件相关配置 数据库数据准备 三、编写后端代码 需求分析 代码结构 Model Mapper Service Controller 前端代码 四、测试 一、需求及界面展示 需求&#xff1a; 1. 输入留言信息&#xff0c;点击提交&…

MySQL:图文超详细教程MySQL5.7下载与安装

一、前言 MySQL 5.7 是一个重要的数据库管理系统版本&#xff0c;它带来了多项改进和新特性&#xff0c;本文将超详细的带大家手动安装一下MySQL5.7。 二、下载MySQL5.7版本 MySQL5.7安装包 链接&#xff1a;https://pan.baidu.com/s/1lz5rp9PwfyeHzkEfI_lW6A 提取码&#…

MyBatis框架的使用:mybatis介绍+环境搭建+基础sql的使用+如何使用Map传入多个参数+返回多个实体用List或者Map接收+特殊sql的使用

MyBatis框架的使用&#xff1a;mybatis介绍环境搭建基础sql的使用如何使用Map传入多个参数返回多个实体用List或者Map接收特殊sql的使用 一、MyBatis介绍1.1 特性1.2 下载地址1.3 和其它持久层技术对比 二、搭建环境2.1配置maven2.2 创建mybatis配置文件2.3 搭建测试环境 三、基…

spring状态机实战

引言 完整代码库gitee地址:代码地址 一、什么是状态机 状态机是有限状态自动机的简称&#xff0c;是现实事物运行规则抽象而成的一个数学模型&#xff0c;是一种概念性机器&#xff0c;它能采取某种操作来响应一个外部事件。这种操作不仅能取决于接收到的事件&#xff0c;还…

如何使用Rust构建Python原生库?注意,不是动态链接库!!!

参考文档&#xff1a;https://github.com/PyO3/pyo3 创建python虚拟环境&#xff1a; conda create --name pyo3 python3.11.7激活虚拟环境&#xff1a; conda activate pyo3安装依赖&#xff1a; pip install maturin初始化项目&#xff1a; maturin init构建项目&#x…

搜索二叉树(C++)

文章目录 1. 搜索二叉树的概念2. 搜索二叉树结构的定义3. 搜索二叉树的操作3.1 搜索二叉树的插入3.2 搜索二叉树的删除3.3 搜索二叉树的查找 4. 完整代码 1. 搜索二叉树的概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;&#xff0c;又称二叉…

Android Studio 获取 SHA1

以 debug.keystore 调试密钥库为例。 步骤1&#xff1a;明确 debug.keystore 位置 debug.keystore 在 .android 目录下&#xff1a; Windows 用户&#xff1a;C:\Users\用户名\.android\debug.keystore Mac 用户&#xff1a;/Users/用户名/.android/debug.keystore 假设我的…

在Windows中安装Redis

一、下载Redis github链接&#xff1a;https://github.com/redis-windows/redis-windows/releases 二、安装 解压后点击start.bat文件即可启动服务 新开一个cmd窗口进入安装了Redis的文件夹输入redis-cli.exe -h 127.0.0.1 -p 6379连接Redis&#xff0c;见如下结果便是成功&…

数据结构——链式二叉树知识点以及链式二叉树数据操作函数详解!!

引言&#xff1a;该博客将会详细的讲解二叉树的三种遍历方法&#xff1a;前序、中序、后序&#xff0c;也同时会讲到关于二叉树的数据操作函数。值得一提的是&#xff0c;这些函数几乎都是建立在一个函数思想——递归之上的。这次的代码其实写起来十分简单&#xff0c;用不了几…