groovy Jenkins每日报告-电子邮件中的作业构建历史报告

qij5mzcb  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(227)

我的要求是创建一个运行日常EOD的Jenkins作业,其中
1.我声明了一个作业名称列表,该作业应该遍历每个作业,并打印当天发生的所有成功构建历史
1.打印的消息应打印当前迭代作业名称,然后打印每个构建编号、构建状态、构建完成时间戳、git提交ID、提交消息、提交作者
此打印消息应通过电子邮件发送给声明的收件人。
请分享一些有用的代码或参考资料。我是Jenkins和groovy的新手。这些代码块对很多人也有帮助。只使用默认插件的解决方案将不胜感激。

cmssoen2

cmssoen21#

您的问题太抽象,包含多个问题。我通常不喜欢回答此类问题,但这里是您的起点。以下脚本将为您获取在过去24小时内运行的所有作业和生成。

Jenkins.instance.getAllItems(Job.class).each { jobitem ->
      def jobName = jobitem.getFullName()
      def jobInfo = Jenkins.instance.getItemByFullName(jobName)

      // Current time in Miliseconds
      def now = new Date().getTime()
      def before24Hours = now - (24 * 60 * 60 * 1000)
      println("Now: " + now + " Before24H: " + before24Hours)

      jobInfo.getBuilds().byTimestamp(before24Hours, now).each { build ->           
        if(build.getResult().toString().equals('SUCCESS')) {
          println("Job : " + jobName + " || BuildNumber: " + build.getNumber() + " || Timestamp: " + build.getTime())
        }
      }
}

请记住,每个Build可以有多个提交,因此可以有多个用户。您可以使用此方法获取提交详细信息。
从上面开始建立你的渠道,并为你在做的过程中遇到的问题创建SO问题。不要把多个问题组合成一个问题。
更新:完整管道以包括提交详细信息。

pipeline {
    agent any
    stages {
        stage('Report') {
            steps {
                script {
                    def jobsToInclude = ['Job1', 'Job2']
                    generateReport(jobsToInclude)
                }
            }
        }
    }
}

def generateReport(def jobs) {
      Jenkins.instance.getAllItems(Job.class).each { jobitem ->
          def jobName = jobitem.getFullName()
          if(jobs.contains(jobName)) {

              def jobInfo = Jenkins.instance.getItemByFullName(jobName)
              // Current time in Miliseconds
              def now = new Date().getTime()
              def before24Hours = now - (24 * 60 * 60 * 1000)

              jobInfo.getBuilds().byTimestamp(before24Hours, now).each { build ->  

                if(build.getResult().toString().equals('SUCCESS')) {
                  println("Job : " + jobName + " || BuildNumber: " + build.getNumber() + " || Timestamp: " + build.getTime())
                  // Get the commits
                  build.getChangeSets().each{change -> 
                    change.getItems().each { item ->
                      println("---" + "COMMITID: " + item.getCommitId() +  " || Message: " + item.getMsg() + " || Author: " + item.getAuthorName())
                    }
                  }   
                }
            }  
         }
    }  
}

相关问题