jenkins2 -pipeline 常用groovy脚本

jenkins2的核心是pipeline,pipeline的核心是groovy。

那有一些基础的groovy是必须经常使用的,如变量赋值,变量引用,打印变量,输出字符,任务调用,循环判断等。

Groovy变量

  注意:在jenkins里面配置Groovy变量时,注意进行测试,不要同Groovy自带的变量冲突!!!

  既然是脚本语言,Groovy的变量也被设计成为了类似的弱类型,实际上Groovy同时支持强类型变量和“弱”类型变量,强类型变量拥有自己的类型,而“弱”类型变量则全部会被编译为Object类型,从代码的角度上,Groovy的变量无需声明类型了:

// groovy可以使用类型确定的变量或常量  

String s1 = "Hello "
print s1  

final String s2 = "World"
println s2  

// 利用def关键字可以定义可变类型的变量或常量  

def s3 = "Welcome "
print s3  

// 对于可变类型,即随时可以改变其类型,赋予不同的量  

s3 = 123        // 此时str3被赋予了整型量,所以其类型变为Integer类型
println s3  

s3 += 100       // 整型的str3和整型相加,结果是整型223
println s3  

s3 = true       // str3目前是boolean类型
println ("Ok " + s3)  

// 对于局部变量,甚至可以不使用def关键字来定义
s4 = "Good job"
println s4  

// 对于数值类型,有如下规则  

int n1 = 10
n2 = n1 / 3
println n2      // 对于n1为整数时, 10 / 3的结果并不是整数,这说明常量n2并不是整数  

int n3 = n1 / 3     // 明确定义n3为整数后,相除的结果为整数
println n3  

n2 = n1.intdiv(3)
println n2      // intdiv用于进行整除  

n2 = n1.power(2)    // 求平方  groovy方法
println n2  

n2 = n1 ** 2        // 求平方的groovy语法
println n2  

n1 = Math.sqrt(n2)  // 求开方  java方法
println n1

  从上面的代码可以看到,Groovy支持有类型的变量,例如String s;也支持无类型的变量,例如def s,相当于Java中的Object s;对于无类型的变量,甚至可以不写def关键字。

final关键字依然作为常量标识,这一点和Java相同。

最后注意一点,Groovy中没有Java中的值类型简单对象,所有的对象都是引用类型对象,例如定义def n = 10,n的类型应该是Integer类型而不是int类型;即便定义了int n = 100,n的类型依然是Integer类型;如果定义了def n = 12.34,则注意,n的类型是BigDecimal类型而不是Double类型,只有显式定义double n = 12.34,n的类型才明确为Double类型(依旧不是double类型)

对于基本算术运算符,Groovy增加了**运算符,表示求幂,x ** y表示求x的y次方;

分支结构语句

  Groovy的结构化语句仍旧是三种:顺序结构、分支结构和循环结构,其中分支结构和循环结构增加了很多意想不到的功能,先看分支结构:

  

// groovy中if条件分支的新规定  

// groovy中,非0的数值可以表示true
int num = 0
if (num) {
    println "True"
} else {
    println "False"
}  

println (++num ? "True" : "False")  

if (!!num) {        // !!运算符可以将num转化为boolean类型
    println "num=${num}为${!!num}"
}
println ""  

// 引用为null时,表示false
Object o = null
if (o) {
    println "True"
} else {
    println "False"
}
o = new Date()
if (o) {
    println "True"
} else {
    println "False"
}
println ""  

// 字符串为""时,表示false
String s = ""
if (s) {
    println "True"
} else {
    println "False"
}
s += "hello"
if (s) {
    println "True"
} else {
    println "False"
}
println ""  

// 集合为空时,表示False
ArrayList array = new ArrayList()
if (array) {
    println "True"
} else {
    println "False"
}
array.add(100)
if (array) {
    println "True"
} else {
    println "False"
}
println ""  

// groovy中switch选择分支的新规定  

// switch对字符串类型的支持  

print "Please input your words: "
s = new BufferedReader(new InputStreamReader(System.in)).readLine()  

switch (s) {
case "how are you":
    println "fine, thank you"
    break;
case "how do you do":
    println "how do you do too"
    break;
default:
    println "nice to meet you"
}  

// switch对集合和范围的支持
n = new Random().nextInt(101)
print "you got ${n} point, "
switch (n) {
case [98, 99, 100]:     // n为98, 99, 100这三个数字时
    println "very good!!"
    break;
case 90 .. 97:          // n为90-97之间时
    println "nice job!!"
    break;
case 70 .. 89:          // n为70-89之间时
    println "good"
    break;
case 60 .. 79:          // n为60-79之间时
    println "can be better"
    break;
case {it > 0 && it < 60}: // n比0大且比60小时
    println "too bad"
    break;
case 0:                 // n为0时
    println "nothing to say"
    break;
}

  首先,Groovy对boolean类型放宽了限制:

  • 常量true和false分别表示“真”和“假”;
  • null表示false,非null表示true;
  • 空字符串""表示false,非空字符串表示true;
  • 0表示false,非0表示true;
  • 空集合表示false,非空集合表示true;
时间: 2024-11-05 16:37:46

jenkins2 -pipeline 常用groovy脚本的相关文章

jenkins2 pipeline高级

jenkins2 pipeline里groovy的高级用法.翻译自:https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md 文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd 1. 在groovy里使用函数,条件控制,循环,异常捕获等 node('remote') { git url: 'https://github.c

jenkins2 pipeline介绍

文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd 什么是jenkins2的pipeline? jenkins的实现是标准的master/slave模式,用户与master交互,master将job分布到slave上运行. jenkins的基本概念: 1. master, 也就是jenkins的server,是jenkins的核心,主要负责job的定时运行,将job分发到agent运行,和对job运

常用shell脚本

获取IP地址和子网掩码 ifconfig eth0 | grep "inet addr" | awk -F "[ : ]+"  '{print $4 "\\" $8}' 常用shell脚本,布布扣,bubuko.com

【java web】java执行预编译Groovy脚本

在JVM中运行Groovy类有两种方式: 使用Groovy编译所有的*.groovy为java的*.class文件,把这些*.class文件放在java类路径中,通过java类加载器来加载这些类. 通过groovy类加载器在运行时直接加载*.groovy文件并生成对象.在这种方式下,没有生成任何*.class,但是生成了一个java.lang.Class对象的实例. 下面介绍前一种使用Groovy的方法:编译成java字节码并且作为正常java应用程序运行在java虚拟机上,即预编译模式. 1.

ElasticSearch Groovy脚本远程代码执行漏洞

什么是ElasticSearch? 它是一种分布式的.实时性的.由JAVA开发的搜索和分析引擎. 2014年,曾经被曝出过一个远程代码执行漏洞(CVE-2014-3120),漏洞出现在脚本查询模块,由于搜索引擎支持使用脚本代码(MVEL),作为表达式进行数据操作,攻击者可以通过MVEL构造执行任意java代码,后来脚本语言引擎换成了Groovy,并且加入了沙盒进行控制,危险的代码会被拦截,结果这次由于沙盒限制的不严格,导致远程代码执行任意命令..."任意"你懂的,比如:利用nc反弹sh

Java执行groovy脚本

1 Binding binding = new Binding(); 2 binding.setVariable("foo", new Integer(2)); 3 GroovyShell shell = new GroovyShell(binding); 4 5 String script = "import com.myb.to.infrastructure.Md5Util; " 6 + "def a = 12; println 'C# md5:' +

Linux常用Shell脚本

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

Elasticsearch中使用groovy脚本处理boolean字段的一个问题

Elasticsearch中使用groovy脚本获取文档的bool字段值时,得到的值是字符的 'T' 或者 'F' ,而不是bool值 true 和 false . 比如文档中有一个字段是 { "bool_value":true } 然后用这个字段判断时候得写成 if (doc['bool_value'].value == 'T') { //blahblah } else { //blahblah }

ODI 12c中使用Groovy脚本创建工程

本文主要介绍在ODI中使用groovy创建工程,并添加一个表转换的映射.要创建groovy脚本,可以从ODI Studio的菜单:工具->Groovy->新脚本 打开一个编辑窗口.在执行下面的脚本之前,确认在模型中已经有EMP表. USERSRC USERDEST import oracle.odi.domain.project.OdiProject import oracle.odi.domain.project.finder.IOdiProjectFinder import oracle.