jenkins pipeline(脚本式)
1.pipeline 定义变量
Groovy中的变量可以通过两种方式定义 – 使用数据类型(包括byte、short、int、long、float、double、char、Boolean和String )的本地语法,或者使用def关键字
注意:使用数据类型的本地语法后期不能更改成其他类型
Goovy中的变量作用域
- 绑定域:脚本内的全局作用域,相当于该脚本对象的成员变量。如果没有定义过变量(可以直接使用或仅仅初始化但未声明),其作用域即是绑定域。
- 本地域:脚本内的代码块。如果是定义过的变量,其作用域就是本地域,脚本中声明的方法访问不了本地域
def str1="hello1" //作用域是本地域
str2="hello2" //作用域是绑定域
String str3="hello3" //作用域是本地域
String str3 定义为绑定域
import groovy.transform.Field
@Field String str3="hello3"
2.pipeline 自定义环境变量
脚本式:
env.key=value
内置函数式:
withEnv(["key=value"]){}
声明式:
environment{
key = value
}
3.pipeline 切割字符串
语法
String[] split(String regex)
参数
regex – 定界正则表达式。
返回值
它返回通过围绕给定正则表达式的匹配拆分此字符串计算的字符串数组。
例子
def sampleText =server.split(',')
for(String i in sampleText) {
println(i)
}
4.pipeline 超时设置
语法
timeout
例子
timeout(时间设置,默认是分钟为单位) {
// 需要监控的代码执行
}
5.pipeline 测试字符串是否以指定的后缀结尾
语法
Boolean endsWith(String suffix)
参数
- 后缀 – 要搜索的后缀
返回值
如果由参数表示的字符序列是由此对象表示的字符序列的后缀,则此方法返回true; 否则为假。 注意,如果参数是空字符串或等于由equals(Object)方法确定的此String对象,则结果将为true。
例子
class Example {
static void main(String[] args) {
String s = "HelloWorld";
println(s.endsWith("ld"));
println(s.endsWith("lo"));
println("Hello".endsWith("lo"));
}
}
//当我们运行上述程序时,我们将得到以下结果 -
true
false
true
6.pipeline 正则表达式
定义
Groovy中正则表达式定义是通过 ~’正则表达式’ 定义的
def regex = ~’chese’
常用正则表达式
表达式 | 匹配意义 | 示例 |
---|---|---|
^ | 行首 | 匹配的字符必须以指定字符串开头 |
$ | 行尾 | 与字符串的尾部或换行符之前的位置相匹配。不包括换行符本身 |
. | 匹配除换行符以外的任意一个字符 | |
\w | 字母和数字 | [0-9A-Za-z] |
\W | 非字母和数字 | \w以外的单个字符 |
\s | 空字符 | [\t\n\r\f] |
\S | 非空字符 | |
\d | 数字 | [0-9] |
\D | 非数字 | |
[] | 指定字符范围 | 如:[0-9] |
* | 前面元素至少出现0次 | |
+ | 前面元素至少出现1次 | |
? | 前面元素出现0次或1次 | |
{m} | 前面的元素出现m 次 | |
{m,} | 前面的元素至少出现m 次 | |
| | 选择,匹配其中的任何一个 | (a|b)*指a或b出现任意次 |
() | 正则表达式的群组化 | (ab)* 指ab出现任意次 |
运算符
- 匹配操作符 (==~)
用于检查字符串是否匹配 返回true或false
例子:
if( "abc" ==~ /abc/) {
println 'true'
}
else{
println 'flase'
}
- 查找操作符 (=~)
用于在字符串中查找匹配的子字符串
例子:
def string = "id=12345"
def matcher = string =~ /id=/
def id = matcher.replaceAll('')
println id //运行结果为:12345
7.pipeline 列表
语法
def list = []
常用方法
- 添加 add()
def list2 = [1,2,3,4]
list2.add(10)
- 包含contains()
def lst = [11, 12, 13, 14]
println(lst.contains(12))
//输出结果
true
8.pipeline 映射
映射(也称为关联数组,字典,表和散列)是对象引用的无序集合。Map集合中的元素由键值访问。 Map中使用的键可以是任何类。当我们插入到Map集合中时,需要两个值:键和值。
[:] - 空映射
['TopicName':'Lists','TopicName':'Maps'] - 具有TopicName作为键的键值对的集合及其相应的值
9.pipeline 获取shell命令的输出或状态
获取标准输出
- 第一种
result = sh returnStdout: true ,script: "<shell command>"
result = result.trim()
- 第二种
result = sh(script: "<shell command>", returnStdout: true).trim()
- 第三种
sh "<shell command> > commandResult"
result = readFile('commandResult').trim()
获取执行状态
- 第一种
result = sh returnStatus: true ,script: "<shell command>"
result = result.trim()
- 第二种
result = sh(script: "<shell command>", returnStatus: true).trim()
- 第三种
sh '<shell command>; echo $? > status'
def r = readFile('status').trim()
带参数执行
sh String.format('%s,%s',xx,xx)
10.pipeline 条件语句
语法
if(condition) {
statement #1
statement #2
...
} else if(condition) {
statement #3
statement #4
} else {
statement #5
statement #6
}
11.pipeline 判断文件是否存在
语法
fileExists()
例子
if(fileExists(ManifestDir)){
//你的代码
}
if(!fileExists(ManifestDir)){
//你的代码
}
12.pipeline 拼接字符串
-
直接拼接
def string = 'xxx' + 'vvvv'
-
创建格式化连接多个字符串对象
def XX=String.format('%s', xx) //指定字符串参数
13.pipeline的优势
1.可暂停性
2.更灵活的并行任务
3.可扩展性
4.优雅型性
5.构建代码化