jenkins pipeline 总体介绍
pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。
pipeline 是jenkins2.X 最核心的特性, 帮助jenkins 实现从CI 到 CD与 DevOps的转变
pipeline 提供一组可扩展的工具, 通过 pipeline domain specific language syntax 可以到达pipeline as code 目的
pipiline as code : jenkinsfile 存储在项目的 源代码库
为什么要使用pipeline
1. 代码: pipeline 以代码的形式实现,通过被捡入源代码控制, 使团队能够编译,审查和迭代其cd流程
2 可连续性: jenkins 重启 或者中断后都不会影响pipeline job
3.停顿: pipeline 可以选择停止并等待人工输入或者批准,然后在继续pipeline运行
4.多功能: pipeline 支持现实世界的复杂CD要求, 包括fork、join子进程,循环和并行执行工作的能力
5.可扩展: pipeline 插件支持其DSL的自动扩展以及其插件集成的多个选项。
jenkins pipeline 入门
pipeline 脚本是有groovy 语言实现的
-无需专门学习 groovy
pipeline 支持两种语法
- Declarative 声明式
- Scripted pipeline 脚本式
如何创建基本的pipeline
- 直接在jenkins web ui 网页界面输入脚本
- 通过常见一个jenkins 可以检入项目的源代码管理库
Declarativ 声明式 pipeline
声明式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{}
agent |
|
需要 | 必须存在,agent必须在pipeline块内的顶层定义,但是stage内是否使用为可选 |
参数 | any/none/label/node/docker/dockerfile |
常用参数 | label/customWorkspace/reuseNode |
展示: | |
agent { label ‘this k8s-api-label‘} | |
agent { node{ label ‘ this is k8sapi-label‘ customWorkspace ‘/some/other/path‘ } } |
agent { docker { image ‘im-web‘ label ‘this is k8sapi-label‘ args ‘-v /tmp:/tmp‘ } } |
# customWorkspace node节点的工作空间
post |
|
需要 | 否,用于pipeline的最外层或者stage{}中 |
参数 | 无 |
常用选项 |
构建后操作的内置判定条件 always,changed,failure,sucess,unstable,aborted |
展示: | |
pipeline { agent any stages { stage(‘Example‘) { steps { echo ‘Hello World‘ } } } post { always { echo ‘I will ........!‘ } } }
|
stages |
|
需要 | 是,包括顺序执行的一个或者多个stage命令 |
参数 | 无 |
常用选项 |
构建后操作的内置判定条件 always,changed,failure,sucess,unstable,aborted |
展示: | |
pipeline {
agent any
stages {
stage(‘Example‘) {
steps {
echo ‘Hello World‘
}
}
}
stage(‘echo‘) {
steps {
echo ‘I will ........!‘
}
}
}
|
steps |
|
需要 | 是,steps位于stage指令块内部,包括一个或者多个step |
参数 | 无 |
说明 |
仅有一个step的情况下可以忽略关键字step及其{} |
展示: | |
pipeline { agent any stages { stage(‘Example‘) { steps { echo ‘Hello World‘ } } } stage(‘echo‘) { steps { echo ‘I will ........!‘ } } }
|
Directives (指令)
environment |
|
需要 | 是,environment 定义了一组全局的环境变量键值对 |
参数 | 无 |
说明 |
存在于pipeline{} 或者stage指令内, 注意特殊方法credentials() ,可以获取jenkins中预定义的凭证明文内容 |
展示: | |
pipeline { agent any stages { stage(‘Example‘) { steps { echo ‘Hello World‘ } } } stage(‘echo‘) { steps { echo ‘I will ........!‘ } } }
|
11111