如何透過 jobname 取得 Jenkins 2 的 SCM Repository URL 及如何取得 BUILD_ID 及 BUILD_NUMBER

公司的 CI 流程需要使用 SCM Repository URL 來進行不同環境間的程式碼切換,原本為每個 job 都加上一個 URL 設定,但這樣一來就需要有人去維護這個設定,經年累月後物換星移後,默默地增加了可能出錯的一個隱形問題,最好的方式就是使用 SCM Repository URL,而為了配合模組化建置的計畫,就需要有個 build template 然後使用參數來進行資料的取得及後續作業

1. 如何取得 SCM Repository URL

  • 讀取 job config

    Jenkins 的 job 設定都是個 xml 檔,只要使用 xml 的處理方式,就可以輕鬆取得 job 上的任何設定了,接著就來看看可以怎麼處理(以下會使用 PowerShell 來示範)

  • config 位置 job 的 config 就位於 “{Jenkins 安裝目錄}\jobs{jobname}\config.xml”

    e.g. C:\Program Files (x86)\Jenkins\jobs\A01\config.xml

  • PowerShell 語法

     #將 config 檔案 parse 成 xml 物件
     [xml]$xmldata = get-content "{Jenkins 安裝目錄}\Jenkins\jobs\{jobname}\config.xml"
     #依階層取值
    

GIT

  • Jenkins 的設定

    1gitsource

  • config 內容

    3gitconfig

  • 使用 powershell 取得 url 設定

    [xml]$xmldata = get-content "{Jenkins 安裝目錄}\Jenkins\jobs\{jobname}\config.xml"
    $xmldata.project.scm.userRemoteConfigs.'hudson.plugins.git.UserRemoteConfig'.url
    

    SVN

  • Jenkins 的設定

    2scmsource

  • config 內容

    4svnconfig

  • 使用 powershell 取得 url 設定

    [xml]$xmldata = get-content "{Jenkins 安裝目錄}\Jenkins\jobs\{jobname}\config.xml"
    $xmldata.project.scm.locations.'hudson.scm.SubversionSCM_-ModuleLocation'.remote
    

    2. 如何取得 BUILD_ID and BUILD_NUMBER

    Environment Variables BUILD_ID and BUILD_NUMBER now return the same value 揭露 BUILD_ID 與 BUILD_NUMBER 目前會是相同的

  • BUILD_ID

    $env:BUILD_ID

  • BUILD_NUMBER

    $env:BUILD_NUMBER

參考資訊

  1. Getting job repository URL in Jenkins build plugin
  2. Environment Variables BUILD_ID and BUILD_NUMBER now return the same value