持續交付之解決Jenkins自動發佈中交互式參數應用

背景

我們在使用 Jenkins 做自動發佈平臺的時候遇到一個需求,即根據不同的版本分支,選擇不同的主機環境,同時還需傳入相應的程序版本號。最終實現 Nexus OSS 倉庫下載對應版本的程序包,自動化實現整個程序的發佈。

Active Choices Plugin

經過查找,發現 Jenkins 的 Active Choices Plugin 是支持實現這個功能的。

簡介

Active Choices 插件提供了其他 Jenkins 參數類型,可以將其呈現爲作業表單中的用戶界面(UI)控件。它支持使用系統環境變量,全局節點屬性,並且在 Groovy 上下文中支持自由作業的 Jenkins 項目。

安裝插件後,將提供三種新的參數類型:

  • 主動選擇參數
  • 主動選擇反應參數
  • Active Choices反應參考參數

Active Choices 參數允許用戶選擇作業參數的值。參數值可以是:

  • 動態生成的(使用Groovy或Scriptler腳本)
  • 根據其他UI參數動態更新
  • 多值(可以有多個值)
  • 使用各種UI控件(包括動態HTML)呈現

主動選擇參數

Active Choices 參數使用 Groovy 腳本或 Scriptler 目錄中的腳本爲生成參數動態生成值選項列表。

示意圖:
在這裏插入圖片描述

  • Active Choices 參數可以呈現爲標準選擇列表,複選框和單選按鈕。
  • 可以選擇顯示一個文本框過濾器,以幫助過濾值選項。

主動選擇反應式和反應式參考參數

參數使用 Groovy 腳本或 Scriptler 腳本動態生成構建參數的值選項,其他作業UI控件的值更改時,可以動態更新(主動選擇)“反應式”和“反應式參考”參數(級聯更新)

示意圖:
在這裏插入圖片描述

  • “Gender”參數更改時,"Professions”參數的值選項得到更新。
  • 此外,當更新“Gender”參數時,也會動態更新顯示爲圖片的反應性參考參數“ Gender_Balance”。

具體設置

安裝插件

在這裏插入圖片描述

參數級聯更新

勾選參數化構建,選擇 Active Choices Parameter

設置代碼分支參數:
在這裏插入圖片描述

  • Name:設置參數 “Brach”
  • Script:設置值腳本
  • Description:設置參數描述信息
  • ChoiceType:設置按鈕形式

設置主機參數:
在這裏插入圖片描述

  • Name:設置參數 “Hosts”
  • Script:設置值腳本
  • Description:設置參數描述信息
  • ChoiceType:設置按鈕形式
  • Referenced parameters:關聯參數,此處設置爲上面的 “Branch”

Groovy Script:

dev = ["Dev_ALL","Dev_AutoTest","Dev_FunctionTest","Dev_Develop"]
release = ["Release_ALL","Release_AutoTest","Release_FunctionTest","Release_Develop"]

if(Branch.equals("dev")){
    return dev
}else if (Branch.equals("release")){
    return release
}else {
    return ["Unknown Hosts"]
}

設置版本參數:

在這裏插入圖片描述

  • Name:設置參數 “Package_Name”
  • Script:設置 Groovy Script 從文件中獲取變量值
  • Description:設置參數描述信息
  • ChoiceType:設置按鈕形式
  • Referenced parameters:關聯參數,此處設置爲上面的 “Branch”

Groovy Script:

if(Branch.equals("dev")){
    lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Dev\\package_history.txt").readLines()
    lineList.sort{it}
    Collections.reverse(lineList)
    lineList.each {
        return it;
    }
}else if (Branch.equals("release")){
    lineList = new File("D:\\Jenkins-workspace\\Jenkins\\workspace\\V3C-WEBAPP-Release\\package_history.txt").readLines()
    lineList.sort{it}
    Collections.reverse(lineList)
    lineList.each {
        return it;
    }
}else {
    return ["Unknown Hosts"]
}

package_history.txt 內容參考:
在這裏插入圖片描述
在集成編譯的時候,通過 Python 腳本把對應程序包名寫入 package_history.txt

# coding=utf-8

# 獲取Jenkins變量
WORKSPACE = os.getenv("WORKSPACE")

def packagehistory(zipname):
    Path = WORKSPACE+"\\package_history.txt"
    f = open(Path,'a',encoding='utf-8')
    f.write(zipname)
    f.write("\n")
    f.close()

實現效果

在這裏插入圖片描述

那麼後續怎麼接受參數呢?可以參考圖中 shell 腳本設置:
在這裏插入圖片描述

#!/usr/bin/env bash
echo '版本類型:'$Branch
echo '環境類型:'$Hosts
echo '文件名稱:'$Package_Name

ansible-playbook /home/ansible/playbooks/v3c-deploy.yaml --extra-vars "package_name=$Package_Name branch=$Branch target=$Hosts"

小結

本文簡要帶着大家快速學習 Jenkins 中一個動態級聯傳參的小技巧,希望對大家有所幫助。

參考資源:
[1]:https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章