Jenkins踩坑之旅:使用Date物件產生RejectedAccessException
最近在寫pipeline時踩到一小坑,記錄如下。
程式碼需求比較簡單:記錄一個測試執行的時間,原型如下。
pipeline {
agent none
stages {
stage('Example') {
steps {
script {
def startTime = new Date()
sleep 1
def endTime = new Date()
println (endTime.getTime() - startTime.getTime()) / 1000 as Integer
}
}
}
}
}
一般加入一個新的方法時,Jenkins會提示scriptApproval,然後需要人工批准這個方法。但是有的時候這個提示不會出現,而且pipeline是可以正常執行的,只是偶爾會丟擲RejectedAccessException異常。
網上搜尋也有人遇到了類似的問題,並且暫時沒有解決方法。
https://stackoverflow.com/questions/50819298/jenkins-pipeline-exception-when-using-date-object
而對於具體問題,則可以繞開這個問題,解決方法是用其他方法獲取時間。
pipeline {
agent none
stages {
stage('Example') {
steps {
script {
def startTime = currentBuild.duration
sleep 1
def endTime = currentBuild.duration
println (endTime - startTime) / 1000 as Integer
}
}
}
}
}
參考: https://opensource.triology.de/jenkins/pipeline-syntax/globals
結論:Jenkins pipeline雖然用的是Groovy的語法,但畢竟被Jenkins封裝過,有著種種限制。所以儘量使用pipeline syntax及Jenkins自己的變數,而不是使用Groovy及Java的方法。
相關文章
- Jenkins踩坑之旅:nohup後臺執行shell命令Jenkins
- jenkins 遷移踩坑Jenkins
- Vue踩坑之旅——methodsVue
- Vue踩坑之旅——VuexVue
- vue系列之踩坑之旅Vue
- FLUTTER混合工程踩坑之旅Flutter
- laradock-的踩坑之旅
- mpvue小程式踩坑之旅Vue
- 使用 Jenkins 配置 iOS 持續整合踩坑實錄JenkinsiOS
- Jenkins郵箱配置踩坑錄Jenkins
- Flutter接入現有Android工程踩坑之旅FlutterAndroid
- MQTT使用踩坑MQQT
- URLEncoder使用踩坑
- 小程式踩坑之旅--動態設定tabBartabBar
- 小程式踩坑之旅–動態設定tabBartabBar
- H5音訊處理——踩坑之旅H5音訊
- vue專案中富文字編輯器踩坑之旅Vue
- date 物件物件
- [踩坑] Go Modules 使用Go
- SpringBootAdmin-使用踩坑Spring Boot
- Python踩坑之旅其一殺不死的Shell子程式Python
- Nebula Exchange 工具 Hive 資料匯入的踩坑之旅Hive
- JavaScript Date 物件JavaScript物件
- Date填坑記
- 踩坑篇之WebSocket實現類中無法使用@Autowired注入物件Web物件
- 什麼是Date物件一個內建物件Date:物件
- jenkins 升級踩坑,主要是403 CSRF報錯問題Jenkins
- 又踩坑了!BigDecimal使用的5個坑!Decimal
- vue中使用protobuf踩坑記Vue
- Flutter之Dialog使用和踩坑Flutter
- vue+iframe使用及踩坑Vue
- Jenkins實現自動化郵件傳送踩坑記錄Jenkins
- 福特汽車的JIT生產之旅
- JavaScript內部物件和Date物件JavaScript物件
- fingerprint2生成的使用者指紋重複踩坑
- 使用 Typescript 踩 react-redux 的坑TypeScriptReactRedux
- iOS開發之UIRefreshControl使用踩坑iOSUI
- 使用BeanUtils.copyProperties踩坑經歷Bean