Groovy For Devops

START >_

有人说groovy是世界上最麻烦的脚本语言,还要加上一个”没有之一”,但是作为运维,经常避免不了跟jenkins打交道,写jenkins file pipeline的时候就需要用到它,我本人其实不喜欢java,groovy又是从groovy来的,不过工作需要,还是要学一学基础的语法,反正也不是太难.本文记录下来,方便以后要写的时候参考.

安装

官网

运行方式

首先在IDE(vs code) 写个Hello World.

1
2
3
4
5
6
7
8
class Example {
static void main(String[] args) {
// 这是注释
/*这是多行注释*/
println 'Hello World'
println "Hello World";
}
}

运行

1
groovy hello.groovy

输出

1
2
Hello World
Hello World

标识符

def是groovy中用来定义标识符的关键字,标识符被用来定义变量,函数或其他用户定义的变量,标识符以字母,$或_开头,不能以数字开头,例如:

1
2
3
def abc
def $abc
def _student

举个🌰:

1
2
3
4
5
6
7
8
9
class Example {
static void main(String[] args) {
String x = "Hello";
println(x);
def _Name = "你好";
println(_Name);
println "Hello World";
}
}

输出

1
2
3
Hello
你好
Hello World

数据类型

除了用def定义变量,也可以用一个确定的数字类型来声明一个变量,所以下面这样也可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Example {
static void main(String[] args) {
String str = "Hello"; //字符串
int x = 5; //整形
long y = 100L; //长整形
float a = 10.56f; //32位浮点数
double b = 10.5e40; //64位浮点数
char c = 'A'; //字符
Boolean l = true; //布尔,true or false
println(str)
println(x)
println(y)
println(a)
println(b)
println(c)
println(l)
}
}

变量打印

格式化输出

1
2
3
4
5
6
7
8
9
10
11
12
class Example {
static void main(String[] args) {
//初始化两个变量
int x = 5;
int y = 6;

//打印
println("x = " + x + " and X =" + X);
println("x = ${x} and X = ${X}");
println('x = ${x} and X = ${X}'); // 注意:单引号不支持插值,容易搞错
}
}

输出如下:

1
2
3
x = 5 and X = 6
x = 5 and X = 6
x = ${x} and X = ${X}

从这里就看出有点python的影子也有点shell的感觉(个人感觉),所以说groovy是基于java参考python和其他语言开发出来的新语言.

三引号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Example {
static void main(String[] args) {
// 初始化两个变量
int x = 5;
int y = 6;

println """
x = ${x}
y = ${y}
"""
// 同样单三引号也不能插值
println '''
x = ${x}
y = ${y}
'''
}
}

输出如下

1
2
3
4
5
x = 5
y = 6

x = ${x}
y = ${X}

函数

  • groovy可以使用返回类型def定义
  • 可以接收任意数量的参数
  • 定义参数时,不必显式定义类型,可以加修饰符例如:
    • public (默认)
    • private
    • protected
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Example {
static def PrintHello() {
println("hello");
}

static int sum(int a, int b, int c = 10) {
int d = a + b + c;
return d;
}

static void main(String[] args) {
PrintHello();
println(sum(5, 50))
}
}

流程控制

条件

1
2
3
4
5
6
7
8
9
10
11
12
class Example {
static void main(String[] args) {
int a= 2
}
// 与其他语言类似,都是if/else
if (a < 100) {
//
println("The value is less than 100");
} else {
println("The value is greater than 100");
}
}

循环

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
class Example {
static void main(String[] args) {
int count = 0;
println("while 循环:");
while(count < 5) {
println(count);
count++;
}

println("for 循环:");
for(int i=0; i<5; i++) {
println(i);
}

println("for-in 循环");
int[] array = [0,1,2,3];
for(int i in array) {
println(i);
}

println("for-in 范围循环");
for(int i in 1..5) { //这个比较特殊,1..5表示一个包括1到5的数组(我记得go好像也有个挺相似的写法)
println(i);
}

println("for-in 循环map");
def ageMap = ["Peter": 31, "Zoe": 33, "Nancy": 22]; //通过[]定义字典,与python不一样
for(am in ageMap) {
println(am); //留意它的输出
}
}
}

输出如下

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
while 循环:
0
1
2
3
4
for 循环:
0
1
2
3
4
for-in 循环:
0
1
2
3
for-in 范围循环:
1
2
3
4
5
for-in 循环map
Ken=21
John=25
Sally=22

最后

其实这是这篇博客的”复制粘贴”,查重率高达80%,我自己手敲一遍加深下印象,有些地方稍稍以自己的方式写而已.一篇下来总的来说给我感觉groovy就像是套上java外套的python或者shell,当然它也支持面向对象编程等高级功能.但是对于我来说上面这些知识点对写一下jenkins file的脚本应该也够用了.


Groovy For Devops
http://example.com/2023/04/22/groovy-devops/
作者
Peter Pan
发布于
2023年4月22日
许可协议