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

Stage:阶段,一个Pipeline可以划分成若干个Stage,每个Stage代表一组操作,例如:“Build”,“Test”,“Deploy”。

注意,Stage是一个逻辑分组的概念,可以跨多个Node

Node:节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行环境。

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

Pipeline五大特性

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

声明式Pipeline

声明式Pipeline的基本语法和表达式遵循与Groovy语法相同的规则,但有以下例外:

声明式pipeline必须包含在固定格式pipeline{}快内
每个声明语句必须独立一行,行尾无需使用分号
块(blocks{})只能包含章节(Sections),指令(Directives),步骤(Steps)或赋值语句
属性引用语句被视为无参数方法调用。例:输入被视为 input()
块(blocks{})
由大括号括起来的语句,如pipeline{},Section{},parameters{},script{}
章节(Sections)
通常包含一个或多个指令或步骤。如 agent 、post、stages、steps
指令(Directives)
environment、options、parameters、triggers(触发)、stage、tools、when
步骤(Steps)

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

示例

agent { label 'my-label' }

agent {
    node {
        label 'my-label'
        customWorkspace '/some/other/path'
    }
}

agent {
    docker {
        image 'nginx:1.12.2'
        label 'my-label'
        args '-v /tmp:/tmp'
    }
}

post 不是必须的,用于pipeline的最外层或者stage{}中

pipeline {
    agent any
    stages {
        stage('Example'){
            steps {
            echo 'Hello world'
            }
        }
    }
    post {
        always {
            echo 'say goodbay'
        }
    }
}

stages 必须,包括顺序执行的一个或多个stage命令,在pipeline内仅能使用一次,通常位于agent/options后面,例子如上

steps 必须,steps位于stage指令块内部,包括一个或多个step。仅有一个step的情况下可以忽略关键字step及其{},例子如上

environment 不是必须的,environment定义了一组全局的环境变量键值对,存在于pipeline{}或者stage指令内。执行特殊方法credentials()可以获取jenkins中预定义的凭证明文内容

environment {CC='clang'}
environment {AN_ACCESS_KEY = credentials('my-prefined-secret-text')}
steps {sh 'printenv'}

options 不是必须的 预定义pipeline专有的配置信息,仅可定义一次

pipeline {
    agent any
    options{
    timeout(time:1,unit: 'HOURS')
    }
    ...
}

parameters 不是必须的 定义参数化构建的参数可选参数 booleanParam,choice,file,text,password,run,string

paramenters {
    choice(name:'PerformMavenRelease',choices:'False\nTrue',description:'desc')
    password(name:'CredsToUse',description:'Apassword to build with',defaultValue:'')
}
environment {
    BUILD_USR_CHOICE="${params.PerformMavenRelease}"
    BUILD_USR_CREDS="${params.CredsToUse}"
}

triggers 不是必须的 定义pipeline被自动触发的方式选项 cron、pollSCM、upstream

triggers {cron('H 4/* 0 0 1-5')}
triggers {pollSCM('H 4/* 0 0 1-5')}
triggers {upstream(upstreamProjects:'job1,job2',threshold:hudson.model.Result.SUCCESS)}

pipeline 语法练习相关推荐

  1. Jenkins Pipeline 语法

    目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...

  2. Jenkins高级篇之Pipeline语法篇-2-第一个Pipeline脚本练习

    前面一篇,介绍了什么是Pipeline,和Pipeline的基本概念,和几个关键字的基本含义的介绍,真正的涉及到Pipeline的语法还没有开始介绍.这篇先来介绍第一个Pipeline代码,分别用两种 ...

  3. Linux开发者的CI/CD(3)jenkins pipeline语法学习

    备注:由于我不是专职的devops工程师,所以学习jenkins本着够用的原则即可.但作为一个高级软件工程师,学会写pipeline是必须的. pipeline翻译成流水线,在Unix/Linux系统 ...

  4. Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool

    本篇继续学习Declarative Pipeline的相关指令,本篇学习三个指令,分别是触发器(triggers),stage和tool.触发器主要是方便周期控制自动化提交,stage是在stages ...

  5. pipeline 语法 Groovy

    当Jenkins Pipeline首次创建时,Groovy被选为基础.Jenkins长期运用嵌入式Groovy引擎,为管理员和用户提供高级脚本功能.此外,Jenkins Pipeline的实施者发现G ...

  6. 自动化集成:Pipeline流水语法详解

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Pipeline流水线用法. 一.Webhook原理 ...

  7. Pipeline 使用语法详解

    Pipeline 使用语法详解 概述 Declarative Pipeline Sections(章节) Directives (指令) Parallel(并行) Steps(步骤) Scripted ...

  8. Jenkins Pipeline构建流水线发布

    Jenkins Pipeline构建流水线发布 1. Jenkins Pipeline 核心概念 Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成.交付管道; Pipel ...

  9. Jenkins之Pipeline流水线构建项目

    1.Pipeline简介 1)概念 Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视 ...

最新文章

  1. centos查看python版本_CentOS系统python默认版本由python2改为python3
  2. 树莓派.系统.官方下载中NOOBS和Raspbian的区别
  3. matlab求最短路径代码_【高等数学】复数,通往真理的最短路径
  4. 【Oracle】DBA_AUDIT_TRAIL表SES_ACTIONS字段对应的操作列表
  5. 区域医疗移动医疗影像解决方案1-基于HTML5的PACS
  6. java语言中实现键盘输入_Java程序设计中的键盘输入数据的方法分析
  7. Linux下update和upgrade的区别
  8. Acrel-2000Z智能电力监控系统解决方案
  9. Latex 温度单位命令
  10. QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用
  11. Android Service(一) Service初识
  12. 自动化测试工程师面试简历参考
  13. Egret 使用Texture Merger制作美术字体
  14. Python 2D游戏项目开发日记——像素世界(一)
  15. hanlp中文语言处理--词典加载源码过程分析及自定义用户词汇添加
  16. MIND——Modality independent neighbourhood descriptor 模态无关邻域描述符
  17. selenium中拖动鼠标通过滑动验证码(geetest)验证
  18. IntelliJ IDEA MyEclipse EditPlus注册码破解
  19. 计算机专业优秀计划,2020年计算机专业学习计划优秀范文2篇.doc
  20. VB.NET小报表(收据)打印

热门文章

  1. JcJc人工智能错别字校对系统API(网站错别字检查)
  2. VideoView实现安卓视频播放
  3. C#中的字符串, String类和StringBuilder类
  4. html 超文本编辑器,超级文本编辑器——EditPlus
  5. 集合篇10.华为机试(涮题记录2)
  6. 如何让歌曲顺序播放html中,怎样让你内存卡里歌曲按照自己顺序播放.doc
  7. 断点续训 Pytorch 和 Tensorflow 框架 VGG16 模型 猫狗大战 鸢尾花分类
  8. 目标检测评价指标AP50,AP60
  9. 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
  10. 解决win10家庭版更新后VM与 Device/Credential Guard 不兼容!解决bcdedit : 无法将“bcdedit”项识别为 cmdlet、函数、脚本文件或可运行程序的名称错误。