jenkins2 -pipeline 常用groovy指令碼

YatHo發表於2017-04-28

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;

相關文章