I have upstream job that polls SVN for changes. If changes are detected, the build is started. After the build, the upstream project calls downstream project to run test.
You can get the change set or the values you need with groovy script:
def jenkins = Jenkins.getInstance()
def job = jenkins.getItem(jobName)
def bld = job.getBuildByNumber(buildNumber)
def changeSet = bld.getChangeSet()
then it dependents on which scm plugin you use, for example with git-plugin you can:
get the revision of each change:
changeSet.each{
println it.getRevision()
}
get message for each change:
changeSet.each{
println it.getMsg()
}
get affected paths:
changeSet.each{
println it.getAffectedPaths()
}
get author name:
changeSet.each{
println it.getAuthorName()
}
and many more actions
I saw a All Changes Plugin which updates the changes page. Don't know if $Changes gets populated with that info as well.
If that doesn't work, have a look at Get access to Build Changelog in Jenkins