Declarative Syntax: agent scope

48 views
Skip to first unread message

Kenneth Brooks

unread,
Apr 12, 2017, 4:08:39 PM4/12/17
to Jenkins Users
When I specify an agent inside a stage, it then also applies to everything in the 'post' section.

I'm not sure that is alway the behavior I want. 
Is there a way around this?

Specifically, we have the ability to take a checkpoint (similar to the enterprise edition checkpoint feature) but that should run outside the node.

Currently we can do this in script world:

node('java-1.8.0_45') {
  stage ('Master Build') {
    checkout scm
    sh 'do some building'
     }
}
captureSnapshot('BuildComplete')

node('java-1.8.0_45') {
  stage ('Dev Deploy') {
    sh 'do some deploying'
     }
}
captureSnapshot('DeployComplete')

In declarative syntax land, the  post actions

pipeline {
    agent none   
    stages {

        stage ('Build') {
            agent { label "java-1.8.0_45" }
            steps {
                checkout scm
                sh 'do some building'
            }
            post {
                success {
                    captureSnapshot('BuildComplete') // this is still inside the node
                }
            }
        }

        stage ('Dev Deploy') {
            agent { label "java-1.8.0_45" }
            steps {
                checkout scm
                sh 'do some deploying'
            }
            post {
                success {
                    captureSnapshot('DeployComplete') // this is still inside the node
                }
            }
        }
    }
}


Do I have to setup another stage specifically for the captureSnapshot? I really don't want to see that stage visually show up on my pipeline all over the place.

Kenneth Brooks

unread,
Apr 14, 2017, 9:03:15 AM4/14/17
to Jenkins Users
Can we add agent as a child of steps so that we can decide which nodes we want those steps to run on and that way we could then set the agent to none for the overall stage?
And make post also available as a sibling of stage so that it can run after a stage but not require a node?

I'm trying to find a way that post can run w/o being on a node.
I'm also trying to find a way to have multiple steps run inside a stage but on different nodes.

Baptiste Mathus

unread,
Apr 14, 2017, 11:08:23 AM4/14/17
to jenkins...@googlegroups.com
Hello,
IMO, you want to file an argued JIRA for each evolution you'd like.

The things you ask for don't appear crazy, but declarative being about straightforwardness and opinionated, almost by definition nothing will be added without deep thinking basically. Hence why each addition request somehow requires its own discussion space if you want a chance to see it landing.

My 2 cents.

--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/9dead877-9dde-4193-b372-9731b7ddfd6c%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Bert

unread,
Apr 27, 2017, 4:03:29 AM4/27/17
to Jenkins Users
I have a related agent scope request. Today, the agent is defined inside a stage. If multiple stages use the same agent and the agent has just one executor, then concurrent builds alternate stage-by-stage.

To prevent that, I'd like to set an agent for a couple of stages.

Regards,
Bert
Reply all
Reply to author
Forward
0 new messages