Pipeline是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。它通过Domain Specific Language(DSL)syntax定义Pipeline As Code并且实现持续交付的目的。

Pipeline是Jenkins2.X的最核心的特性,帮助Jenkins实现从CI到CD与DevOps的转变、

注:Jenkins 1.0 只能通过UI界面手动操作来“描述”流水线; Jenkins 2.0 开始支持pipeline as code.

为什么要使用pipeline

1.代码: pipeline 以代码的形式实现,通过被捡入源代码控制,使团队能够编译,审查和迭代其CD流程

2.可连续性: jenkins 重启或者中断后都不会影响pipeline job

3.停顿: pipeline 可以选择停止并等待人工输入或者批准,然后在继续pipeline运行

4.多功能:  pipeline 支持现实世界的复杂CD要求, 包括fork、join子进程,循环和并行执行工作的能力

5.可扩展: pipeline 插件支持其DSL的自动扩展以及其插件集成的多个选项。

Pipeline结构快速解析

Jenlins Pipeline的脚本语法是由Groovy语言实现,学习成本较低,简单易学。 目前Jenlins Pipeline支持两种语法:

  • Declarative 声明式(在Pipeline plugin 2.5中引入)

  • Scripted Pipeline 脚本式

image.png

声明式pipeline 基本语法和表达式遵循 groovy语法,但是有以下例外:

  • 声明式pipeline 必须包含在固定格式的pipeline{} 块内

  • 每个声明语句必须独立一行, 行尾无需使用分号

  • 块(Blocks{}) 只能包含章节(Sections),指令(Directives),步骤(Steps),或者赋值语句

  • 属性引用语句被视为无参数方法调用。 如input()

  • 块(Blocks{})

由大括号括起来的语句: 如 Pipeline{}, Sections{}, parameters{}, script{}

  • 章节(Sections)

通常包括一个或者多个指令或步骤 如 agent,post,stages,steps

  • 指令(Directives)

environment, options, parameters, triggers, stage, tools, when

  • 步骤(steps)

执行脚本式pipeline, 如script{}

Jenkins pipeline包含两类元素:stages和steps。如下图:

image.png

Stage:阶段,一个Pipeline可以划分成若干个Stage,每个Stage代表一组操作,例如:“Build”,“Test”,“Deploy”。 注意,Stage是一个逻辑分组的概念,可以跨多个Node

Step:步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenklins Plugin提供,例如:sh ‘make’ Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。

pipeline{
    agent any
    stages {
        stage('Build') {
            steps{
                echo 'This is a build step' 
            }
        }
        stage('Test') {
            steps{
                echo 'This is a test step'  
            }
        }
        stage('Deploy') {
            steps{
                echo 'This is a deploy step'    
            }
        }
    }
}

Pipeline编写的辅助工具

Snipper Generator(代码片段生成器,语法检查器)

image.png

Replay Pipeline

重放pipeline,可以修改script,修改后的不存入config.xml

DSL Reference 语法参考手册

  • 全局变量引用

image.png

Jenkinsfile本地校验

Jenkins Pipeline Linter Connector  (vscode 插件)

image.png

如下图所示,插件按照后需要配置如下参数:

  • jenkins.pipeline.linter.connector.url 是 Jenkins 期望的 POST 请求地址,包含你要校验的 Jenkinsfile 文件。通常为 http://<your_jenkins_server:port>/pipeline-model-converter/validate。

  • jenkins.pipeline.linter.connector.user 允许指定你的 Jenkins 用户名。

  • jenkins.pipeline.linter.connector.pass 允许指定你的 Jenkins 密码。

  • jenkins.pipeline.linter.connector.crumbUrl 当你的 Jenkins 启用了 CRSF 时必须指定。通常为 http://<your_jenkins_server:port>/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)。

Ctrl+Shift+P执行如下命令,对编写的Jenkinsfile进行校验

Jenkins Declarative Parser

❯ jdp check data/valid/complex-deployment/Jenkinsfile
Checking: data/valid/complex-deployment/Jenkinsfile
Looks valid! Great work!

新手真的别再用过时的jenkins freestyle了,10分钟教你搞定快速编写jenksinfile,快速离线调试的更多相关文章

  1. 10分钟搞定让你困惑的 Jenkins 环境变量

    前言 Jenkins, DevOps 技术栈的核心之一,CI/CD 离不开编写 Pipeline 脚本,上手 Jenkins ,简单查一下文档,你就应该不会被 agent,stages,step 这类 ...

  2. Python分支结构你真的搞定了吗?

    分支结构 分支结构能够让计算机像人一样进行思考,应对不同的场景做出不同的回应. Python中不支持switch语法,目前仅支持if/else形式,但是在Python3.10的测试版本中,貌似支持了s ...

  3. MySQL的Limit 性能差?真的不能再用了?

    首先说明一下MySQL的版本: mysql> select version();+-----------+| version() |+-----------+| 5.7.17 |+------- ...

  4. 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码

    程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...

  5. centos下安装Jenkins轻松搞定

    jenkins安装步骤如下: 命令:yum -y list java* yum -y install java-1.7.0-openjdk.x86_64                         ...

  6. 22.一个球从100m高度自由下落,每次落地后返跳回原高度的一半,再反弹。求它在第10次落地时,共经过多少米,第10次反弹多高。

    #include <stdio.h> #include <stdlib.h> int main() { ,hn=sn/; int i; ;i<=;i++) //注意i是从 ...

  7. Jenkins FreeStyle or Pipeline Job

    FreeStyle Job: 1. 需要在页面添加模块配置项与参数完成配置 2. 每个Job仅能实现一个开发功能 3. 无法将配置代码化,不利于Job配置迁移与版本控制 4. 逻辑相对简单,无额外学习 ...

  8. 教你搞懂Jenkins安装部署!

    前言:请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用 ...

  9. jenkins freestyle deploy web

    gitlab connection 选择定义好的gitlab仓库 参数化构建过程 git参数 名称 branch 描述 自定义 参数类型 分支 默认值 $branch 选项参数 名称 Status 选 ...

  10. 公司内网静态IP,外网无线动态IP 同时上网,不必再切换网卡啦 route 命令给你搞定。

    一: 公司内网:192.168.55.101   255.255.255.0    192.168.55.1  网关 外网:192.168.20.101  255.255.255.0   192.16 ...

随机推荐

  1. SpringMvc原理概述

    目录 MVC整体架构和流程 SpringMVC 框架组件概述 SpringMVC 配置详解 springmvc.xml MVC整体架构和流程 用户发送请求至前端控制器 DispatcherServle ...

  2. BIGO 的数据管理与应用实践

    本文首发于 Nebula Graph Community 公众号 本文整理自 BIGO 在 nMeetp 上的主题分享,主要介绍 BIGO 过去一年在数据管理建设方面的理解和探索.而 BIGO 数据管 ...

  3. Nebula Graph 源码解读系列 | Vol.02 详解 Validator

    整体架构 Nebula Graph Query Engine 主要分为四个模块,分别是 Parser.Validator.Optimizer 和 Executor. Parser 完成对语句的词法语法 ...

  4. Java abstract 关键字使用

    1 package com.bytezreo.abstractTest; 2 3 /** 4 * 5 * @Description Abstract 关键字使用 6 * @author Bytezer ...

  5. vue 打包 可以加 --watch 持续打包 - 开发本地应用程序 - 套壳模式开发

    vue 打包 可以加 --watch 持续打包 - 开发本地应用程序 - 套壳模式开发 "watch": "vue-cli-service build --watch - ...

  6. 50HZ陷波器的原理和实物开发设计

    原理     陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果的滤波器.陷波滤波器属于带阻滤波器的一种,只是它的阻带非常狭窄,起阶数必须是二阶(含二阶)以上. ...

  7. Android 发布aar远程依赖出现扩展方法无法找到问题

    原文: Android 发布aar远程依赖出现扩展方法无法找到问题-Stars-One的杂货小窝 起因 最近在整合自己的工具类库,偶然发现之前写的扩展方法使用远程依赖却是提示找不到 但我有个aar库却 ...

  8. api-ms-win-crt-***.dll, api-ms-win-core-***.dll,win7以后kernel.dll,msvc*.dll的改变。api-ms-win-crt-***.dll 有问题就是 c++ redist 版本过低。

    api-ms-win-crt-***-|1-1-0.dll是redistributable c++的一部分.以往只会因为msvc*NNN.dll才要去找对应的redistributable c++版本 ...

  9. Spring Boot学习日记12

    学习了Thymeleaf模板引擎前端交给我们的页面,是html页面.如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据 ...

  10. 重新启动mysql

    liu@liu-virtual-machine:~$ ps aux|grep mysqld mysql 5252 0.2 4.5 1496516 181200 ? Sl 11:01 0:01 /usr ...