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;