Quick and dirty version of a job lister that takes two parameters "job" 
(multibranch job name) and "old_job" (non-mb job name) and produces output 
that can be used by Active Choices Parameter to present a list of builds to 
select. Value is a | delimited set of values, so you may want to parse it 
something like this:

deploy_info = BuildToDeploy.split('\\|');
deploy = [
    version: deploy_info[0],
    id: deploy_info[1],
    branch: java.net.URLDecoder.decode(deploy_info[2], "UTF-8"),
    time: new Date(Long.valueOf(deploy_info[3])),
    url: deploy_info[4],
    project: deploy_info[5]
]


Here is the script:

import hudson.model.*
import hudson.node_monitors.*
import hudson.slaves.*
import java.util.concurrent.*
import groovy.time.*

now=new Date()

jenkins = Hudson.instance
search_mb=[job]
search_non_mb=[old_job]

full=[:];
builds=[:];

for (item in jenkins.items){
  if (item.name in search_mb){
    for (job in item.getAllJobs()){
      for (build in job.getBuilds()){
          full[build.displayName] = [ 
            name: build.displayName, 
            id: build.id,
            branch: job.name, 
            job_name: item.name, 
            time: build.getTime(), 
            ts: build.getTime().getTime(),
            url: build.getUrl(),
            building: build.building,
            failed: (build.result == hudson.model.Result.FAILURE),
            project: "${item.name}/${job.name}"
            
          ];
        }
  }
    
  }else if (item.name in search_non_mb){
    job = item
    
    for (build in job.getBuilds()){
      def parameters = build?.actions.find{ it instanceof ParametersAction 
}?.parameters
      branch=job.name
      parameters.each{
        if (it.name == "branch"){
          branch = it.value
        }
      }
      
      full[build.displayName] = [ 
        name: build.displayName, 
        id: build.id,
        branch: branch, 
        job_name: item.name, 
        time: build.getTime(), 
        ts: build.getTime().getTime(),
        url: build.getUrl(),
        building: build.building,
        failed: (build.result == hudson.model.Result.FAILURE),
        project: "${item.name}"
        
      ];
    }
  }
}

full = full.sort { -it.value.ts }

for (build in full){
  item = build.value
  branchDecoded=java.net.URLDecoder.decode(item.branch, "UTF-8");
  TimeDuration duration = TimeCategory.minus(now, item.time)
  if (duration.days >= 7) {
    duration=duration.minus(new TimeDuration(duration.hours, 
duration.minutes, duration.seconds, duration.millis))
  } else if (duration.days >= 1) {
    duration=duration.minus(new 
TimeDuration(0,duration.minutes,duration.seconds, duration.millis))
  }else if (duration.hours >= 1) {
    duration=duration.minus(new TimeDuration(0,0,duration.seconds, 
duration.millis))
  } else {
    duration=duration.minus(new TimeDuration(0,0,0, duration.millis))
  }
  timestamp = "${duration} ago"
  
value="${item.name}|${item.id}|${item.branch}|${item.ts}|${item.url}|${item.project}"
  display="${item.name} (${branchDecoded}, ${timestamp})"
  if (item.building){ 
    display += " **BUILDING**" 
  } else if (item.failed){
    display += " **FAILED**" 
  }
  builds[value] = display
}

return builds




On Thursday, October 27, 2016 at 2:02:42 AM UTC-7, Sathyakumar Seshachalam 
wrote:
>
> Thanks,
>
> > And then modify the selection of the job run to select from multiple 
> branches (need to write a Groovy based Parameter selector for that) - and 
> now you can deploy builds from feature branches for testing BEFORE they are 
> merged into develop
>
> If there are any examples / code snippets on how to do this, will greatly 
> help me. 
>
> On Wed, Oct 26, 2016 at 8:56 PM, Michael Lasevich <mlas...@gmail.com 
> <javascript:>> wrote:
>
>> I am not sure the stages you are talking about are same as what Jenkins 
>> Pipelines calls stages.
>>
>> Jenkins, at its core, is a job server. In Pipelines, a stage is a segment 
>> of a job. Stages of a build job would be something like "Build Binaries" or 
>> "Upload Build Artifacts" - something that is part of one logical job. What 
>> you are talking is a deployment process which is really a separate job from 
>> a build job, and not really a "stage" of build. 
>>
>> So, my approach would be (and is, in some cases):
>>
>> * Set up a Pipeline build for the develop branch 
>> * Make sure the build job archives either deployment artifact(s) or 
>> pointer to them - something that can be used for deployment.
>> * Set up a separate deployment job (can also be Pipeline) that takes in 
>> parameters for a build run and target environment (stage, QA, UA, PreProd, 
>> Production, whatever), and grabs artifacts/pointers from the selected run 
>> and performs a deployment
>>
>> Now, if you want to get fancy, you make that first "build" job a 
>> MultiBranch job that builds both develop and some versions of the feature 
>> branches (I've used /feature/build/* pattern) and then modify the selection 
>> of the job run to select from multiple branches (need to write a Groovy 
>> based Parameter selector for that) - and now you can deploy builds from 
>> feature branches for testing BEFORE they are merged into develop
>>
>> HTH,
>>
>> -M
>>
>>
>>
>>
>>
>>
>>
>> On Wednesday, October 26, 2016 at 4:21:23 AM UTC-7, Sathyakumar 
>> Seshachalam wrote:
>>>
>>> New to Jenkins pipeline.
>>>
>>> My process is that developers work off of develop branch (Feature 
>>> branches and merges of-course).
>>> At any point in time, a release branch is branched off of develop  and 
>>> then deployed to a stage environment, Once Accepted/approved, the same 
>>> release branch is deployed into prod. (All immutable deployments).
>>>
>>> So am looking at atleast two stages that are only conditionally and 
>>> manually entered  - stages being deploy to stg, deploy to prod and 
>>> condition being the branch prefix. (Each stage will have build steps like 
>>> deploy binaries, launch, run functional tests etc.,) and an automatic stage 
>>> that is triggered only once per day (nightly) with build steps like deploy 
>>> binaries, lunch, run and tear down).
>>>
>>> Is this kind of a workflow feasible with pipelines. If yes, Are there 
>>> any recommendations/suggestions/pointers. 
>>>
>>> Thanks,
>>> Sathya
>>>
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Jenkins Users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/jenkinsci-users/bLO1Y2ylLq8/unsubscribe
>> .
>> To unsubscribe from this group and all its topics, send an email to 
>> jenkinsci-use...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/jenkinsci-users/8cfea0f2-bd05-4aac-ab89-21ce5cf21cda%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/jenkinsci-users/8cfea0f2-bd05-4aac-ab89-21ce5cf21cda%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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/b38190af-3823-417f-b8f4-4c4ea26bc505%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to