pipeline 语法练习
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 语法练习相关推荐
- Jenkins Pipeline 语法
目录 声明性pipeline Sections agent pipeline与stage中的不同 参数 常用选项 发布 post stages steps Directives environment ...
- Jenkins高级篇之Pipeline语法篇-2-第一个Pipeline脚本练习
前面一篇,介绍了什么是Pipeline,和Pipeline的基本概念,和几个关键字的基本含义的介绍,真正的涉及到Pipeline的语法还没有开始介绍.这篇先来介绍第一个Pipeline代码,分别用两种 ...
- Linux开发者的CI/CD(3)jenkins pipeline语法学习
备注:由于我不是专职的devops工程师,所以学习jenkins本着够用的原则即可.但作为一个高级软件工程师,学会写pipeline是必须的. pipeline翻译成流水线,在Unix/Linux系统 ...
- Jenkins高级篇之Pipeline语法篇-7-Declarative Pipeline指令:triggers/stage/tool
本篇继续学习Declarative Pipeline的相关指令,本篇学习三个指令,分别是触发器(triggers),stage和tool.触发器主要是方便周期控制自动化提交,stage是在stages ...
- pipeline 语法 Groovy
当Jenkins Pipeline首次创建时,Groovy被选为基础.Jenkins长期运用嵌入式Groovy引擎,为管理员和用户提供高级脚本功能.此外,Jenkins Pipeline的实施者发现G ...
- 自动化集成:Pipeline流水语法详解
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译.打包.镜像构建.部署等操作:本篇文章主要描述Pipeline流水线用法. 一.Webhook原理 ...
- Pipeline 使用语法详解
Pipeline 使用语法详解 概述 Declarative Pipeline Sections(章节) Directives (指令) Parallel(并行) Steps(步骤) Scripted ...
- Jenkins Pipeline构建流水线发布
Jenkins Pipeline构建流水线发布 1. Jenkins Pipeline 核心概念 Jenkins Pipeline是一套插件,支持在Jenkins中实现持续集成.交付管道; Pipel ...
- Jenkins之Pipeline流水线构建项目
1.Pipeline简介 1)概念 Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视 ...
最新文章
- centos查看python版本_CentOS系统python默认版本由python2改为python3
- 树莓派.系统.官方下载中NOOBS和Raspbian的区别
- matlab求最短路径代码_【高等数学】复数,通往真理的最短路径
- 【Oracle】DBA_AUDIT_TRAIL表SES_ACTIONS字段对应的操作列表
- 区域医疗移动医疗影像解决方案1-基于HTML5的PACS
- java语言中实现键盘输入_Java程序设计中的键盘输入数据的方法分析
- Linux下update和upgrade的区别
- Acrel-2000Z智能电力监控系统解决方案
- Latex 温度单位命令
- QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用
- Android Service(一) Service初识
- 自动化测试工程师面试简历参考
- Egret 使用Texture Merger制作美术字体
- Python 2D游戏项目开发日记——像素世界(一)
- hanlp中文语言处理--词典加载源码过程分析及自定义用户词汇添加
- MIND——Modality independent neighbourhood descriptor 模态无关邻域描述符
- selenium中拖动鼠标通过滑动验证码(geetest)验证
- IntelliJ IDEA MyEclipse EditPlus注册码破解
- 计算机专业优秀计划,2020年计算机专业学习计划优秀范文2篇.doc
- VB.NET小报表(收据)打印
热门文章
- JcJc人工智能错别字校对系统API(网站错别字检查)
- VideoView实现安卓视频播放
- C#中的字符串, String类和StringBuilder类
- html 超文本编辑器,超级文本编辑器——EditPlus
- 集合篇10.华为机试(涮题记录2)
- 如何让歌曲顺序播放html中,怎样让你内存卡里歌曲按照自己顺序播放.doc
- 断点续训 Pytorch 和 Tensorflow 框架 VGG16 模型 猫狗大战 鸢尾花分类
- 目标检测评价指标AP50,AP60
- 掌柜大作战(10):人脸识别和图像识别,Java程序员的宿命
- 解决win10家庭版更新后VM与 Device/Credential Guard 不兼容!解决bcdedit : 无法将“bcdedit”项识别为 cmdlet、函数、脚本文件或可运行程序的名称错误。