I created this Groovy script, which relies on PARENT_JOB_NAME and 
PARENT_JOB_NUMBER as params, but could be be better expanded to look at 
it's parent directly rather than relying on those.
Progresses up the tree of triggered jobs, collecting change notes, then 
pumps it all into a new param RELEASE_NOTES  which can then be used by 
HockeyApp...


import hudson.model.*

// Function makes it easier with recursion
def getBuildChangeLog(thisBuild) {
  def thisLog = []

  if (!thisBuild.changeSet.isEmptySet()) {
    thisLog.addAll(thisBuild.changeSet.getItems())
  }

  for (cause in thisBuild.causes) {
    if (cause.class.toString().contains("UpstreamCause")) {
      def upProject = hudson.model.Hudson.instance.getItemByFullName(cause.
upstreamProject)
      def upBuild = upProject.getBuildByNumber(cause.upstreamBuild)
      thisLog.addAll(getBuildChangeLog(upBuild))
    }
  }

  return thisLog
}

// =============================================

// Relies on some vars to be passed to find parent.
def buildVars = build.buildVariableResolver

// If "RELEASE_NOTES" has data, just keep it.
if (buildVars.resolve("RELEASE_NOTES")?.trim()) {
  return;
}

def parentJob = hudson.model.Hudson.instance.getItemByFullName(buildVars.
resolve("PARENT_JOB_NAME"))
def parentBuild = parentJob.getBuildByNumber(buildVars.resolve(
"PARENT_JOB_NUMBER").toInteger())
def parentEnv = parentBuild.getEnvironment()

def changeLog = getBuildChangeLog(build)
def releaseNotes = "##Release Notes\n"

if (parentEnv.containsKey("GIT_COMMIT")) {
    def gitCommit = parentEnv["GIT_COMMIT"]
    def shortGitCommit = gitCommit[0..6]
    releaseNotes += "Git Hash: " + shortGitCommit + "\n"
}
else if (parentEnv.containsKey("P4_CHANGELIST")) {
    releaseNotes += "Perforce changelist: " + parentEnv["P4_CHANGELIST"] + 
"\n"
}

if (changeLog.empty) {
  releaseNotes += "###No changes since previous build"
}
else {
  releaseNotes += "###Change Log:\n"
  changeLog.each {
    releaseNotes += "* ${it.msg}\n"
  }
}

println releaseNotes

newParam = new StringParameterValue('RELEASE_NOTES', releaseNotes)

// Note: this assumes that params are already in use
def curParams = build.getAction(ParametersAction.class)
build.replaceAction(curParams.merge(new ParametersAction(newParam)))

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/309bf04a-4d52-420e-98cc-ea561ce3d591%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to