lock beforeAgent of main pipeline agent

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

lock beforeAgent of main pipeline agent

Arnaud bourree
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

--
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 [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAESUf_CK-jSXU9NfWkPJ8J3OX5zWrsB8XeaLOHM90790AN0Osw%40mail.gmail.com.
Reply | Threaded
Open this post in threaded view
|

Re: lock beforeAgent of main pipeline agent

Arnaud bourree

Le mar. 27 oct. 2020 à 11:17, Arnaud bourree <[hidden email]> a écrit :
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

--
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 [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/CAESUf_D0L%2Bnc%3DSxE5vCyWTjhU7itSkEKada79F0i47PDk0e6cA%40mail.gmail.com.