詳解Groovy 變量在jenkins pipeline中的正確使用姿勢


一個例子引發(fā)的思考

最近在做jenkins pipeline腳本的開發(fā),因此開始使用groovy語言,在對變量的各種調(diào)用過程中,發(fā)現(xiàn)了一個奇怪的問題,代碼如下:

實例1

def str1="hello1"

str2="hello2"

def fun1(){

println(str1)

}

def fun2(){

println(str2)

}

fun2()

fun1()

運行結(jié)果如下:

hello2

Caught: groovy.lang.MissingPropertyException: No such property: str1 for class: Demo4

可以看到fun2() 正常運行;而fun1()則拋出了異常,異常提示是找不到str1,根據(jù)經(jīng)驗我判斷是變量作用域的問題,于是我先詳細的了解了一下關(guān)于groovy中變量的定義!

Groovy中的變量

Groovy中的變量可以通過兩種方式定義 -數(shù)據(jù)類型(包括byte、short、int、long、float、double、char、Boolean和String ),或者使用def關(guān)鍵字。注意:Groovy 中一切皆對象,這意味著 Groovy 中不存在基本類型,我們可以通過println value.class 查看變量類型。定義int x ,寫明了x是一個int 類型,這種的聲明后期不能更改成其他類型;而對于def y,定義后可被修改為其他類型 ,例如下面代碼:

實例2:

def b =1

b="hello"

println b

int a=1

a="hi"

println a

輸出:

hello

Caught: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'hi' with class 'java.lang.String' to class 'int'

org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'hi' with class 'java.lang.String' to class 'int'

可以看到println b 正常輸出;而println a 則提示類型錯誤

Goovy中的變量作用域

了解了groovy關(guān)于變量的定義,我們回到實例1,groovy的作用域總結(jié)如下:

Groovy類

Groovy類作用域同Java

Groovy腳本

1.綁定域:腳本內(nèi)的全局作用域,相當于該腳本對象的成員變量。如果沒有定義過變量(可以直接使用或僅僅初始化但未聲明),其作用域即是綁定域。

2.本地域:腳本內(nèi)的代碼塊。如果是定義過的變量,其作用域就是本地域,腳本中聲明的方法訪問不了本地域

所以實例1代碼解釋如下:

def str1="hello1"? //作用域是本地域

str2="hello2" //作用域是綁定域

如果給變量限定類型,則:

String str3="hello3" //作用域是本地域

進一步思考,那么如果我需要把String str3 定義為綁定域該怎么辦呢?

Groovy提供了關(guān)鍵字@Field ,使用他需要引入import groovy.transform.Field

執(zhí)行下面代碼

import groovy.transform.Field

@Field String str3="hello3"

def func1(){

println(

str3)

}

func1()

輸出hello3

變量作用域在jenkins pipline腳本中的應(yīng)用

編寫一個簡單的pipline腳本,如下圖:

運行該腳本會發(fā)現(xiàn)如下問題:

我們可以看到my log2 正常輸出;而輸出變量log1則報錯,原因就是我們文章中講解的變量作用域問題!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容