Jenkinsfile 使用说明(1)

本文深入介绍了Jenkins这款开源持续集成工具,特别是重点讲解了2.0版本引入的Pipeline特性。Pipeline允许将构建流程以代码形式管理,分为脚本式和声明式两种。声明式流水线更易于理解和维护,减少了对Groovy的依赖。文中详细阐述了声明式流水线的基本语法,包括pipeline、agent、stages、stage、steps、environment、parameters、post等关键元素,并给出了实际的代码示例。此外,还讨论了使用Pipeline的优势,如代码化管理、持续性、灵活性等。最后,文章提到了一些实用的工具和关键字,如input、when、options等。

1. Jenkins 是什么

Jenkins 是一款由 Java 编写的开源的持续集成工具。

注:目前一些自动化编译,自动化测试都允许在 Jenkins 上运行。

2. 流水线

2.1 流水线是什么

Jenkins 2.0 的到来, Pipeline(流水线)进入了视野, jenkins 2.0 的核心特性,也是最适合持续交付的 feature。

注:简单的来说,就是把 Jenkins 1.0 版本中,Project 中的相关配置信息,如 SVN/Git 的配置,Parameter 的配置等都变成 Code,即 Pipeline as Code。

Pipeline(流水线)是用户定义的 CD 流水线模型。流水线的代码定义了整个的构建过程,它通常包括构建,测试和交付应用程序的阶段。

Jenkins 允许你将配置文件和执行步骤以代码的形式保持,这样就可以做到像管理源码一样管理 Jenkins 任务。

注:Jenkins Pipeline (流水线)是一套插件,将持续交付的实现和实施集成到 Jenkins 中。其提供了一套可扩展的工具,用于将「简单到复杂」的交付流程实现为「持续交付即代码」。

​ Jenkins Pipeline (流水线) 的定义通常被写入到一个文本文件——Jenkinsfile 中,该文件可以被放入项目的源代码控制库中。

2.2 流水线的分类

Jenkins 流水线分为脚本式的和声明式的

  • 脚本式流水线比较灵活,可以嵌入一些 Groovy 语言编程,功能比较强大,但是对于新手而言上手较难。
  • 声明式流水线更具有结构化,减少对 Groovy 语言的依赖,对新用户比较友好。

2.2 为什么使用流水线

本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。流水线向 Jenkins 中添加了一组强大的工具,支持用例简单的持续集成到全面的 CD 流水线。用户可以利用很多流水线的特性:

  • 代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑、审查和迭代其 CD 流程
  • 可持续性:Jenkins 重启或者中断后都不会影响 Pipeline Job
  • 停顿:Pipeline 可以选择停止并等待人工输入或批准,然后在继续 Pipeline 运行
  • 多功能:Pipeline 支持现实世界的复杂 CD 要求,包括 fork/join 子进程,循环和并行执行工作的能力
  • 可扩展:Pipeline 插件支持其 DSL 的自定义扩展以及其他插件集成的多个选项

简而言之,就是使用 jenkins 的流水线比研发自己手动执行

  • 编译
  • 制作镜像
  • 推送镜像到 hub

的流程有很多优势。

3. 声明式流水线——jenkinsfile 的语法

3.1 声明式流水线基础语法

  • pipeline:声明其内容为一个声明式的 Pipeline 脚本
  • agent:执行节点(job 运行的 slave 或者 master 节点)
  • stages:阶段集合,包括所有的阶段(例如:打包、部署等各个阶段)
  • stage:阶段,被 stages 包括,一个 stages 可以有多个 stage
  • steps: 步骤,为每个阶段的最小执行单位,被 stage 包括
  • post:执行构建后的操作,根据构建结果来执行对应的操作

3.2 典型的声明式流水线例子

在声明式流水线语法中,pipeline 块定义了整个流水线中完成的所有工作。

Jenkinsfile (Declarative Pipeline)
pipeline {
   
   
    agent any /*1*/
    stages {
   
   
        stage('Build') {
   
    /*2*/
            steps {
   
   
                // /*3*/
            }
        }
        stage('Test') {
   
    /*4*/
            steps {
   
   
                // /*5*/
            }
        }
        stage('Deploy') {
   
    /*6*/
            steps {
   
   
                // /*7*/
            }
        }
    }
}

上述定义的 1-7 的解释如下:

  • 1 -> 在任何可以用的代理上,执行流水线或它的任何阶段。
  • 2 -> 定义「Build」阶段
  • 3 -> 定义与 「Build」阶段相关的步骤
  • 4 -> 定义 「Test」阶段
  • 5 -> 定义与 「Test」阶段相关的步骤
  • 6 -> 定义 「Deploy」阶段
  • 7 -> 定义与 「Deploy」阶段相关
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值