title: jenkins插件Active Choices的使用通過參數動態控制多選參數的選項 tags: - jenkins categories: - 學習語錄
Jenkins Active Choices 插件:通過參數動態控制多選參數選項
一、插件介紹
Active Choices 插件(以前稱為 Uno Choice 插件)是 Jenkins 中一款強大的參數化構建插件,允許你創建動態交互的參數選項。其核心功能是能夠根據一個參數的值,實時動態地改變另一個參數的可選值,特別適合構建具有依賴關系的參數表單。
二、安裝插件
登錄 Jenkins 管理界面
導航至 Manage Jenkins → Plugins
在 "可選插件" 標簽頁搜索 "Active Choices"
勾選插件并點擊 "Install without restart"
等待安裝完成后重啟 Jenkins(如提示)
三、核心概念
Active Choices 插件提供三種主要參數類型:
Active Choices Parameter:動態單選/多選參數
Active Choices Reactive Parameter:響應式參數,可根據其他參數值動態變化
Active Choices Reactive Reference Parameter:用于展示參考信息的響應式參數
本文重點介紹如何使用前兩種參數類型實現"通過參數動態控制多選參數選項"。
四、使用示例:動態控制多選參數選項
假設我們有一個需求:
第一個參數(環境類型):可選值為 "開發環境"、"測試環境"、"生產環境"
第二個參數(部署模塊):根據選擇的環境不同,顯示不同的可選模塊
步驟 1:創建新任務
點擊 Jenkins 首頁的 "新建任務"
輸入任務名稱,選擇 "自由風格的軟件項目",點擊 "確定"
步驟 2:配置參數
在任務配置頁面,勾選 "This project is parameterized"(此項目是參數化的)
點擊 "Add Parameter",選擇 "Active Choices Parameter",配置第一個參數:
Name:
environment
(參數名稱)Description:
請選擇部署環境
(參數描述)Choice Type:
Single Select
(單選)Script:
return ["開發環境", "測試環境", "生產環境"]
其他選項保持默認
再次點擊 "Add Parameter",選擇 "Active Choices Reactive Parameter",配置第二個參數(動態多選參數):
Name:
modules
(參數名稱)Description:
請選擇需要部署的模塊
(參數描述)Choice Type:
Multi Select
(多選)Referenced parameters:
environment
(引用的參數,即第一個參數名稱)Script:
// 根據選擇的環境返回不同的模塊列表 if (environment == "開發環境") {return ["用戶模塊", "訂單模塊", "支付模塊", "測試工具模塊"] } else if (environment == "測試環境") {return ["用戶模塊", "訂單模塊", "支付模塊"] } else if (environment == "生產環境") {return ["用戶模塊", "訂單模塊", "支付模塊", "監控模塊"] } else {return ["請先選擇環境"] }
其他選項保持默認
點擊 "保存" 完成配置
步驟 3:測試動態參數效果
進入剛才創建的任務
點擊 "Build with Parameters"
嘗試選擇不同的環境,觀察 "部署模塊" 的可選值變化:
選擇 "開發環境" 時,會顯示包括"測試工具模塊"在內的4個選項
選擇 "測試環境" 時,會顯示3個核心模塊
選擇 "生產環境" 時,會顯示包括"監控模塊"在內的4個選項
五、高級用法
1. 從外部數據源獲取選項
你可以從文件、數據庫或API獲取選項列表,例如從文件讀取:
// 從文件讀取環境列表 def envFile = new File("/jenkins/config/environments.txt") return envFile.readLines()
2. 級聯多個參數
可以創建多個響應式參數,形成參數鏈,例如:環境 → 服務 → 功能模塊
// 第三個參數:根據前兩個參數動態變化 if (environment == "生產環境" && service == "用戶服務") {return ["登錄功能", "注冊功能", "權限管理"] } else {// 其他組合的選項... }
3. 設置默認值
可以為參數設置默認值:
def options = ["開發環境", "測試環境", "生產環境"] return [defaultValue: "測試環境",value: options ]
4.從api接口返回數據
1.配一個字符串參數,用于提供接口的入參
2.添加Active Choices Reactive Parameter參數
import groovy.json.JsonSlurper import java.net.URL import java.net.HttpURLConnection def orderType = ORDER1 def apiUrl = "http://wx.xxx.com/wx/search?content=${URLEncoder.encode(orderType, 'UTF-8')}" try {// 創建HTTP連接URL url = new URL(apiUrl)HttpURLConnection connection = (HttpURLConnection) url.openConnection()connection.requestMethod = "GET"connection.connectTimeout = 50000 // 10秒連接超時connection.readTimeout = 50000 ? ? // 10秒讀取超時 ?// 獲取響應碼int responseCode = connection.responseCodeif (responseCode == 200) {// 解析JSON響應def jsonSlurper = new JsonSlurper()def responseJson = jsonSlurper.parse(connection.inputStream) ?// 提取"熱門電影"數組(直接根據鍵名獲取,注意中文鍵名需完全匹配)def hotMovies = responseJson."getJuzi" // 中文鍵名需用雙引號包裹并通過.訪問 ?// 驗證數據格式if (hotMovies && hotMovies instanceof List) {// 過濾空值和空字符串,確保選項有效def movieOptions = hotMovies.findAll { it != null && it.toString().trim() != "" }.collect { it.toString() } // 確保所有元素轉為字符串 ?if (movieOptions) {return movieOptions // 返回電影列表作為選項} else {return ["熱門電影列表為空"]}} else {return ["接口返回格式異常,未找到有效的'熱門電影'數組"]}} else {return ["接口請求失敗,狀態碼: ${responseCode}"]} } catch (Exception e) {def errorMsg = e.message ?: "未知錯誤"return ["獲取熱門電影失敗: ${errorMsg.take(50)}"] // 限制錯誤信息長度 } ? ?
3,查看效果
六、常見問題
參數不生效:
檢查參數名稱是否正確,特別是引用參數時
確保腳本沒有語法錯誤
檢查Jenkins日志尋找錯誤信息
選項沒有動態更新:
確保第二個參數類型是"Active Choices Reactive Parameter"
確認"Referenced parameters"已正確設置
腳本權限問題:
如果腳本需要訪問文件系統,確保Jenkins運行用戶有相應權限
對于復雜腳本,考慮使用Jenkins憑證存儲敏感信息
七、總結
Active Choices 插件為 Jenkins 提供了強大的動態參數功能,通過本文介紹的方法,你可以輕松實現根據一個參數的值動態控制另一個多選參數的選項。這在構建復雜的CI/CD流程時特別有用,能夠根據不同場景提供定制化的參數選項,提高構建效率和準確性。