Jenkins 如何取得上次編譯成功的時間

之前曾經在 Jenkins 2 將其他 job 名稱變成可選擇的參數 介紹過該如何把其他 job name 當做參數,經過一段時間的發展,job 默默地成長到 70-80 個,已經很難一眼就找到所需 job 的地步,所以同事給了新的需求,將上次成功編譯時間是今天的 job 預設勾選,降低人為漏看的機會

如何取得上次編譯成功的時間

  • groovy 語法如下

    import jenkins.model.Jenkins
    def item = Jenkins.instance.getItem("jobname")//jobname 請換成你實際的 job name
    def  lastSuccess=item.getLastSuccessfulBuild().getTime()
    println "${lastSuccess}"
    
  • 建議可以使用 build step 來進行開發及 debug

  1. 安裝 groovy plugin

    1manageplugin

    2installgroovy

  2. 在 build step 測試語法

    3buildStep

    import jenkins.model.Jenkins
    def item = Jenkins.instance.getItem("A01-TestDev")
    def  lastSuccess=item.getLastSuccessfulBuild().getTime()
    println "${lastSuccess}"
    
  3. 結果

    4getsuccdatetime

預設勾選

這個部份 Extended Choice Parameter plugin 已經為我們設想到了,在原本設定 source value 的下方就提供 source for default value 的設定,設定方式與 source for value 相同,一樣可以使用 groovy

5defaultvalue

  1. Choose Source for Default Value

    這邊使用 inline groovy script (Default Groovy Script)

    import jenkins.model.Jenkins
    def result= []
    def jobs = jenkins.model.Jenkins.instance.getJobNames()
    def matchjobs = jobs .findAll{ name -> name =~  /(A|B|C)\d{2}.*/ }
    matchjobs.each { 
        def today = new Date().format("yyyyMMdd")
        def item = Jenkins.instance.getItem("${it}")
        def  lastSuccess=item.getLastSuccessfulBuild().getTime().format("yyyyMMdd")
        def output=today.equals(lastSuccess)
        if(output)
        {
            result.add("${it}")
        }
    }
    return result
    

    10defaultsetting

  2. 加入 groovy 後,記得要同意執行 groovy script

    • Build with Parameters 會出現需要同意提示

      6needapprove

    • Approve

      7apporve

  3. 前後對照

    • 設定前

      9BEFORE

    • 設定後

      8AFTER

參考資訊

  1. Jenkins - groovy script - get last successful build date in dd-mm-yyyy format
  2. How to compare two Dates without the time portion?