lock beforeAgent of main pipeline agent

8 views
Skip to first unread message

Arnaud bourree

unread,
Oct 27, 2020, 6:18:09 AM10/27/20
to jenkins...@googlegroups.com
Hello,

My Jenkins is running in a kubernetes cluster and all pipelines run in pod.
I'd like to limit the number of pipelines running in parallel: I'd like an executor limitation like we have when we were running all pipelines in master.

I'm using lockable resources plugin.
My expecting implementation was something like:
pipeline {
    agent {
        kubernetes {
            label 'test-lock'
            yaml libraryResource('my-pod.yaml')
        }
    }
    options {
        lock(label: 'forge-executor', quantity: 1, variable: 'forgeExecutor')
    }
    stages {
        stage('echo') {
            steps {
                echo "OK"
                script {
                    def outcome = input message: 'Please select', parameters: [
                        [name: 'myChoice', description: 'My choice', choices: 'Choice 1\nChoice 2\nChoice 3', $class: 'ChoiceParameterDefinition']
                    ]
                }
            }
        }
    }
}

OK, the pipeline doesn't execute any stages if it cannot lock, but Kubernetes resources are used.

I try to add when block with beforeAgent option in, but when block is only allowed at stage level.
So I found a workaround: don't set any main agent and have one top stage with when condition:
pipeline {
    agent none
    stages {
        stage('lock') {
            agent {
                kubernetes {
                    label 'test-lock'
                    yaml libraryResource('my-pod.yaml')
                }
            }
            when {
                beforeAgent true
                equals(expected: true, actual:true)
            }
            options {
                lock(label: 'forge-executor', quantity: 1, variable: 'forgeExecutor')
            }
            stages {
                stage('echo') {
                    steps {
                        echo "OK"
                        script {
                            def outcome = input message: 'Please select', parameters: [
                                [name: 'myChoice', description: 'My choice', choices: 'Choice 1\nChoice 2\nChoice 3', $class: 'ChoiceParameterDefinition']
                            ]
                        }
                    }
                }
            }
        }
    }
}

Where will I submit the issue? In lock plugin? in kubernets plugin? or in a core project?

Regards,

Arnaud

Arnaud bourree

unread,
Oct 27, 2020, 10:24:25 AM10/27/20
to jenkins...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages