Jenkins系列之pipeline语法介绍与案例

本文介绍了Jenkins Pipeline的核心概念,包括Pipeline的定义、入门、核心语法和关键字。讲解了如何在Web UI中创建和定义Pipeline,强调了Stages、Nodes和Steps的重要性,并提供了示例代码。还分享了一个案例,展示了如何执行自动化测试并利用飞书发送执行结果。
摘要由CSDN通过智能技术生成

Jenkins Pipeline 的核心概念:

  • Pipeline 是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化

  • PipelineJenkins2.X最核心的特性,帮助Jenkins 实现从CI到CD与DevOps的转变。

  • Pipeline是一组插件,让Jenkins可以实现持续交付管道的落地和实施。

持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完整过程的自动化表现。软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

Pipeline提供了一组可扩展的工具,通过Pipeline Domain Specific Language(DSL)syntax可以达到Pipeline as Code(Jenkinsfile存储在项目的源代码库)的目的。

Pipeline入门:

先决条件
要使用Jenkins Pipeline,您将需要:

  • Jenkins 2.x或更高版本
  • Pipeline插件(请自行在插件管理中安装。)

Pipeline 定义

脚本Pipeline是用Groovy写的 。Groovy相关语法请移步>

Pipeline支持两种语法:

  • Declarative 声明式
  • Scripted pipeline 脚本式
    在这里插入图片描述
如何创建基本Pipeline
  • 直接在Jenkins网页界面中输入脚本。
  • 通过创建一个Jenkinsfile可以检入项目的源代码管理库。

用任一方法定义Pipeline的语法是一样的,但是Jenkins支持直接进入Web UI的Pipeline,通常认为最佳实践是在Jenkinsfile Jenkins中直接从源代码控制中加载Pipeline。

在Web UI中定义Pipeline

要在Jenkins Web UI中创建基本Pipeline

  1. 单击Jenkins主页上的New Item。
    在这里插入图片描述

  2. 输入Pipeline的名称,选择Pipeline,然后单击确定。
    在这里插入图片描述

  3. 在脚本文本区域中,输入Pipeline,然后单击保存。
    在这里插入图片描述

  4. 单击立即生成以运行Pipeline,查看控制台输出。
    在这里插入图片描述

Pipeline几个核心概念:
  • Stages:阶段组/Stage:阶段

    1. 一个 Pipeline 有多个 Stage 组成,每个 Stage 包含一组 Step。
    2. 注意一个 Stage 可以跨多个 Node 执行,即 Stage 实际上是 Step 的逻辑分组。
    3. 一个Jenkinsfile 可以分为大的阶段,如打包、构建、 部署。测试
    4. 构建的流程,可以分为这几步,获取源代码,然后打包,构建,进行编译,替换配置文件,编译完打包,进行部署 这个阶段就是stage
  • Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。

  • Steps:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenklins Plugin提供,例如:sh ‘make’

Pipeline几个核心关键字:
  • 块(blocks{}):
    由大括号括起来的语句,如pipeline{},Section{},parameters{},script{}

  • 章节(Sections):
    通常包含一个或多个指令或步骤。如 agent 、post、stages、steps

  • 指令(Directives):
    environment、options、parameters、triggers(触发)、stage、tools、when

  • 步骤(Steps):
    执行脚本式pipeline:在该语句块内使用script{}

  • agent
    必须存在,agent必须在pipeline块内的顶层定义,但stage内是否使用是可选的
    参数:any/none/label/node/docker/dockerfile
    常用选项 label/cuetomWorkspace/reuseNode

指令名 说明 作用域
agent 定义执行任务的代理 stage 或pipeline
input 暂停pipeline,提示输入内容 stage
environment 设置环境变量 stage或pipeline
tools 自动下载并安装指定的工具,并将其加入到PATH变量中 stage或pipeline
options 配置Jenkins pipeline本身,如options{retry(3}},指pipeline失败时再重试2次 stage 或 pipeline
build 触发其他的job steps
when 定义阶段执行的条件 stage
triggers 定义执行pipeline的触发器 pipeline
parameters 执行pipeline前传入一些参数 pipeline
parallel 并行执行多个step stage

示例:

  • agent:

    agent {
          label 'my-label' }
    
    agent {
         
        node {
         
            label 'my-label'
            customWorkspace '/some/other/path'
        }
    }
    
    agent {
         
        docker {
         
            image 'application_name:verison'
            label 'my-label'
            args '-v /tmp:/tmp'
        }
    }
    
  • stage间通过stash进行文件共享,即使stage不在同一个执行主机上:

    pipeline{
         
        agent none
        stages{
         
            stage('stash'){
         
                agent {
          label "master" }
                steps{
         
                    writeFile file: "a.txt", text: "$BUILD_NUMBER"
                    stash name: "abc", includes: "a.txt"
                }
            }
            stage('unstash'){
         
                agent {
          label "node" }
                steps{
         
                    script{
         
                        unstash("abc")
                        def content = readFile("a.txt")
                        echo "${content}"
                    }
                }
            }
        }
    }
    
  • steps中的一些操作:

    命令名 说明
    error 抛出异常,中断整个pipeline
    timeout timeout闭包内运行的步骤超时时间
    waitUntil 一直循环运行闭包内容,直到return true,经常与timeout同时使用
    retry 闭包内脚本重复执行次数
    sleep 暂停pipeline一段时间,单位为秒
    pipeline{
         
        agent any
        stages{
         
            stage('stash'){
         
                steps{
         
                    timeout(50){
           
                        waitUntil{
           
                            script{
         
                                def r = sh script: 'curl http://xxx', returnStatus: true 
                                return (r == 0)  
                            }
                        }
                    }
                    retry(10){
          
                        script{
         
                            sh script: 'curl http://xxx', returnStatus: true
                        }
                    }
                    sleep(20) 
                }
            }
        }
    }
    
  • triggers:定时构建

    pipeline {
         
      agent any
      triggers {
         
          cron('H 9 * * *')
      	}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值