[JIRA] (JENKINS-61502) Option to (abort,mark unstable, queue) if resouce(s) are unavailable.

9 views
Skip to first unread message

truesoupfly@yahoo.com (JIRA)

unread,
Mar 18, 2020, 3:04:02 AM3/18/20
to jenkinsc...@googlegroups.com
Luis Tejada created an issue
 
Jenkins / Improvement JENKINS-61502
Option to (abort,mark unstable, queue) if resouce(s) are unavailable.
Issue Type: Improvement Improvement
Assignee: Unassigned
Components: lockable-resources-plugin
Created: 2020-03-18 07:03
Priority: Minor Minor
Reporter: Luis Tejada

 

If job cannot lock resources, provide finer control, instead of just queuing. 


options{
 lock( ifLocked:'abort' ,extra:[[resource:resource1],[resource:resource2]])
}

 

 

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.13.12#713012-sha1:6e07c38)
Atlassian logo

truesoupfly@yahoo.com (JIRA)

unread,
Mar 18, 2020, 3:05:02 AM3/18/20
to jenkinsc...@googlegroups.com
Luis Tejada updated an issue
Change By: Luis Tejada
 

If job cannot lock resources, provide finer control, instead of just queuing. 
{code:java}

options{
lock( ifLocked:'abort' ,extra:[[resource:
' resource1 ' ],[resource: ' resource2 '
]])
}{code}
 

 

truesoupfly@yahoo.com (JIRA)

unread,
Mar 18, 2020, 3:13:03 AM3/18/20
to jenkinsc...@googlegroups.com
Luis Tejada updated an issue
 

If job cannot lock resources, provide finer control, instead of just queuing. 
{code:java}
options{
lock( ifLocked:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}
 

With timeout field   ? JENKINS-41699
{code:java}
options{
  lock( timeout: 4, onTimeout:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}

truesoupfly@yahoo.com (JIRA)

unread,
Mar 18, 2020, 3:42:03 AM3/18/20
to jenkinsc...@googlegroups.com
Luis Tejada updated an issue
If job cannot lock resources, provide finer control, instead of just queuing. 
{code:java}
options{
lock( ifLocked:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}
 

With timeout field  ? JENKINS-41699
{code:java}
options{
  lock( timeout: 4, onTimeout:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}



This pipeline demonstrates the desired effect, but is unusable inside the sandbox.
{code:java}
//envLock = [envResource1, envResource2]
//workspaceLock = [wsResource1, wsResouece2]
 
pipeline{
  options {
     lock(extra: [[label:envLock, quantity: 1], [label:workspaceLock, quantity: 1]])
  }
  stages {
     stage('Resource Availability Check'){
       when { expression  { LockMan.get().getFreeResourceAmount(envLock) == 0 || LockMan.get().getFreeResourceAmount(workspaceLock) == 0 } }
       steps{
         script{
           currentBuild.result = 'ABORTED'
           error('Some other Pipeline is already using the resources, please try again later.')
         }
       }
     }
    stage('Install/Update Tools'){
      steps{
        echo ("./gradlew install")
    }}
}}{code}
 

truesoupfly@yahoo.com (JIRA)

unread,
Mar 18, 2020, 3:54:42 AM3/18/20
to jenkinsc...@googlegroups.com
Luis Tejada updated an issue
If job cannot lock resources, provide finer control, instead of just queuing. 
{code:java}
options{
lock( ifLocked:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}
 

With timeout field  ? JENKINS-41699
{code:java}
options{
  lock( timeout: 4, onTimeout:'abort' ,extra:[[resource:'resource1'],[resource:'resource2']])
}{code}
 

This pipeline demonstrates the desired effect, but is unusable inside the sandbox.
{code:java}
/ *
First build acquires one of two locks. Second build acquires the second lock, but the resource check step aborts the job if all locks are used up. Additional builds will queue and eventually fall into one of the first two scenarios *
/

//
envLock = [envResource1, envResource2]
//workspaceLock = [wsResource1, wsResouece2]

import
  org.jenkins.plugins.lockableresources.LockableResourcesManager as LockMan

def envLock        = 'envLock'  
def workspaceLock  = 'workSpaceLock'

pipeline{
  options {
     lock(extra: [[label:envLock, quantity: 1], [label:workspaceLock, quantity: 1]])
  }
  stages {
     stage('Resource Availability Check'){
       when { expression  { LockMan.get().getFreeResourceAmount(envLock) == 0 || LockMan.get().getFreeResourceAmount(workspaceLock) == 0 } }
       steps{
         script{
           currentBuild.result = 'ABORTED'
           error('Some other Pipeline is already using the resources, please try again later.')
         }
       }
     }
    stage('Install/Update Tools'){
      steps{
        echo ("./gradlew install")
    }}
}}{code}
 
Reply all
Reply to author
Forward
0 new messages