五、流水线介绍

发布时间 2023-05-22 22:39:59作者: shigp1

一、什么是流水线

Jenkins Pipeline(或简称“管道”,大写“P”)是一套插件,支持在Jenkins中实现和集成连续交付管道。
 
连续交付(CD)管道是您从版本控制到用户和客户的软件获取过程的自动化表达。对软件的每一次更改(在源代码管理中提交)都要经过一个复杂的过程才能发布。这个过程包括以可靠和可重复的方式构建软件,以及通过多个测试和部署阶段推进构建的软件(称为“构建”)。
 
Pipeline提供了一组可扩展的工具,用于通过Pipeline领域特定语言(DSL)语法将简单到复杂的交付管道建模为“代码”。
 
Jenkins管道的定义被写入一个文本文件(称为Jenkinsfile),该文本文件又可以提交到项目的源代码管理存储库。 这是“管道即代码”的基础;将CD管道视为应用程序的一部分,以便像任何其他代码一样进行版本控制和审查。
 
创建Jenkinsfile并将其提交给源代码管理可以带来许多直接的好处:

  • 自动为所有分支和拉取请求创建管道构建过程。
  • 管道上的代码审查/迭代(以及剩余的源代码)。
  • 管道的审计跟踪。
  • 可由项目的多个成员查看和编辑。

二、声明式与脚本式管道语法

Jenkinsfile可以使用两种类型的语法编写——Declarative(声明式)和Scripted(脚本式)。
 
声明式管道和脚本式管道的构造有根本不同。声明式管道是Jenkins管道的最新功能,它:

  • 提供了比脚本化管道语法更丰富的语法功能,并且
  • 旨在使编写和读取管道代码变得更容易。

然而,写入Jenkinsfile的许多单独的语法组件(或“步骤”)对于Declarative和Scripted Pipeline都是通用的。

三、特性

从根本上说,Jenkins是一个支持多种自动化模式的自动化引擎。Pipeline为Jenkins添加了一组强大的自动化工具,支持从简单的连续集成到全面的CD管道的用例。通过对一系列相关任务进行建模,用户可以利用Pipeline的许多功能:

  • 代码:管道在代码中实现,通常检查到源代码管理中,使团队能够编辑、审查和迭代其交付管道。
  • 持久化:Jenkins重启后依然存在。
  • 可暂停:管道可以选择停止并等待人工输入或批准,然后再继续运行管道。
  • 通用性:管道支持复杂的现实CD需求,包括分叉/连接、循环和并行执行工作的能力。
  • 可扩展:Pipeline插件支持对其DSL[1]的自定义扩展,并支持与其他插件集成的多种选项。

四、概念

管道

管道是CD管道的用户定义模型。Pipeline的代码定义了整个构建过程,通常包括构建应用程序、测试应用程序和交付应用程序的阶段。

节点

节点是一台机器,它是Jenkins环境的一部分,能够执行管道。

阶段

阶段块定义了通过整个管道执行的任务的概念上不同的子集(例如“构建”、“测试”和“部署”阶段),许多插件都使用它来可视化或呈现Jenkins管道的状态/进度。

Step

一项任务。基本上,步骤告诉Jenkins在特定时间点(或过程中的“步骤”)要做什么。例如,要执行shell命令,请使用sh步骤:sh“make”。当一个插件扩展了Pipeline DSL时,通常意味着该插件实现了一个新步骤。

五、示例

声明式
 pipeline {
    agent any 
    stages {
        stage('Build') { 
            steps {
                // 
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
 }

agent any 表示在任何可用的代理上执行此管道或其任何阶段。stage('Build')定义一个Build阶段。steps定义步骤。

脚本式
node {  
    stage('Build') { 
        // 
    }
    stage('Test') { 
        // 
    }
    stage('Deploy') { 
        // 
    }
}

node和上面的agent any 相同。

六、简单流水线


 

 

 
这是个简单的流水线,只是在控制台输出Hello world!