Trigger promotions from another job

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Trigger promotions from another job

Varal
Hey everyone,

For the past 2 days I've been struggling with the following issue:
I have a few jobs whose builds are promoted to "Latest" when certain requirements are met. Once a night I would like to run a "Promote_to_nightly" job which runs regression, coverity and other tests against these promoted to "Latest" builds across different jobs. If everything ends well the "Promote_to_nightly" job should trigger a promotion called "Nightly" on the "Latest" build. At the end of it all I should have jobs A B C D with builds that are promoted both to "Latest" and "Nightly". 

The promotion is done by defining a "Nightly" promotion in each job configuration with the "Only when manually approved" option ticked and running the approve() method which can be found in hudson.plugins.promoted_builds.conditions.ManualCondition.java

I managed to write a groovy script that does the promotion but it has a side effect. The builds get promoted and an "Unknown Task" is displayed in the build queue and Jenkins error log shows the following message:

java.lang.IllegalStateException: no parent set on hudson.plugins.promoted_builds.PromotionProcess[Nightly]
 at hudson
.model.AbstractItem.getParent(AbstractItem.java:179)
 at hudson
.plugins.promoted_builds.PromotionProcess.getParent(PromotionProcess.java:140)
 at hudson
.plugins.promoted_builds.PromotionProcess.getOwner(PromotionProcess.java:148)
 at hudson
.plugins.promoted_builds.PromotionProcess.getAssignedLabel(PromotionProcess.java:195)
 at hudson
.model.Queue$Item.getAssignedLabel(Queue.java:1415)
 at hudson
.model.Node.canTake(Node.java:330)
 at hudson
.model.Queue$JobOffer.canTake(Queue.java:277)
 at hudson
.model.Queue.maintain(Queue.java:1049)
 at hudson
.model.Queue$MaintainTask.doRun(Queue.java:2048)
 at hudson
.triggers.SafeTimerTask.run(SafeTimerTask.java:54)
 at java
.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
 at java
.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
 at java
.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
 at java
.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at java
.lang.Thread.run(Thread.java:745)

The code I'm using (only the needed part from my testing) is as follows:

import hudson.model.*
import hudson.model.ItemGroup
import hudson.scm.*
import java.util.*
import hudson.plugins.promoted_builds.*
import hudson.plugins.promoted_builds.conditions.*

println "RUNNING NIGHTLY PROMOTION GROOVY SCRIPT"
  
//These are the jobs that are under the "Nightly" promotion process
def jobsToPromote = [Hudson.instance.getJob("Test_job")]

//Object for the nightly promotion
PromotionProcess nightlyPromotion = new PromotionProcess(jobsToPromote[0].getParent(), "Nightly")

//Object for the manual approval of the nightly promotion
ManualCondition manualPromotion = new ManualCondition()

//Array for storing builds promoted to "Latest"
def jobBuildsToPromote = []

//Get builds of Jobs promoted to "Latest" and store them in jobBuildsToPromote array
jobsToPromote.each { job -> (job.getBuilds()).find
  {
               build -> (build.getActions(PromotedBuildAction)).find
    {
      action -> if(action.contains("Latest"))
      {
        jobBuildsToPromote.add(build)
        return true
      }
    }
  }
}

manualPromotion.approve(jobBuildsToPromote[0], nightlyPromotion)


//Function for reading environment variables
def getBuildVariable(String key)
{
def config = new HashMap()
def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")

config.putAll(envVarsMap)
return config.get(key)
}

return


Does anyone have an idea how to solve this issue?
Many thanks in advance for all your suggestions :)

--
You received this message because you are subscribed to the Google Groups "Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/a18ca29f-b63f-4335-a4e8-043432533f03%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: Trigger promotions from another job

Sumit Agrawal
Hi,

Have you got the solution? I am looking for similar feasibility.




On Wednesday, April 15, 2015 at 7:24:46 PM UTC+5:30, Varal wrote:
Hey everyone,

For the past 2 days I've been struggling with the following issue:
I have a few jobs whose builds are promoted to "Latest" when certain requirements are met. Once a night I would like to run a "Promote_to_nightly" job which runs regression, coverity and other tests against these promoted to "Latest" builds across different jobs. If everything ends well the "Promote_to_nightly" job should trigger a promotion called "Nightly" on the "Latest" build. At the end of it all I should have jobs A B C D with builds that are promoted both to "Latest" and "Nightly". 

The promotion is done by defining a "Nightly" promotion in each job configuration with the "Only when manually approved" option ticked and running the approve() method which can be found in hudson.plugins.promoted_builds.conditions.ManualCondition.java

I managed to write a groovy script that does the promotion but it has a side effect. The builds get promoted and an "Unknown Task" is displayed in the build queue and Jenkins error log shows the following message:

java.lang.IllegalStateException: no parent set on hudson.plugins.promoted_builds.PromotionProcess[Nightly]
 at hudson
.model.AbstractItem.getParent(AbstractItem.java:179)
 at hudson
.plugins.promoted_builds.PromotionProcess.getParent(PromotionProcess.java:140)
 at hudson
.plugins.promoted_builds.PromotionProcess.getOwner(PromotionProcess.java:148)
 at hudson
.plugins.promoted_builds.PromotionProcess.getAssignedLabel(PromotionProcess.java:195)
 at hudson
.model.Queue$Item.getAssignedLabel(Queue.java:1415)
 at hudson
.model.Node.canTake(Node.java:330)
 at hudson
.model.Queue$JobOffer.canTake(Queue.java:277)
 at hudson
.model.Queue.maintain(Queue.java:1049)
 at hudson
.model.Queue$MaintainTask.doRun(Queue.java:2048)
 at hudson
.triggers.SafeTimerTask.run(SafeTimerTask.java:54)
 at java
.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
 at java
.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
 at java
.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
 at java
.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
 at java
.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java
.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at java
.lang.Thread.run(Thread.java:745)

The code I'm using (only the needed part from my testing) is as follows:

import hudson.model.*
import hudson.model.ItemGroup
import hudson.scm.*
import java.util.*
import hudson.plugins.promoted_builds.*
import hudson.plugins.promoted_builds.conditions.*

println "RUNNING NIGHTLY PROMOTION GROOVY SCRIPT"
  
//These are the jobs that are under the "Nightly" promotion process
def jobsToPromote = [Hudson.instance.getJob("Test_job")]

//Object for the nightly promotion
PromotionProcess nightlyPromotion = new PromotionProcess(jobsToPromote[0].getParent(), "Nightly")

//Object for the manual approval of the nightly promotion
ManualCondition manualPromotion = new ManualCondition()

//Array for storing builds promoted to "Latest"
def jobBuildsToPromote = []

//Get builds of Jobs promoted to "Latest" and store them in jobBuildsToPromote array
jobsToPromote.each { job -> (job.getBuilds()).find
  {
               build -> (build.getActions(PromotedBuildAction)).find
    {
      action -> if(action.contains("Latest"))
      {
        jobBuildsToPromote.add(build)
        return true
      }
    }
  }
}

manualPromotion.approve(jobBuildsToPromote[0], nightlyPromotion)


//Function for reading environment variables
def getBuildVariable(String key)
{
def config = new HashMap()
def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")

config.putAll(envVarsMap)
return config.get(key)
}

return


Does anyone have an idea how to solve this issue?
Many thanks in advance for all your suggestions :)

--
You received this message because you are subscribed to the Google Groups "Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/c2c5a69d-5439-42d8-b6dd-401974db4922%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.