IronSean
IronSean

Reputation: 1578

Pass configuration into a Jenkins Pipeline

I'm trying to find a way to pass a configuration for a Multibranch pipeline job into the jenkinsfile when it's executing.

My goal is to configure something like the following:

Branch : Server
"master" : "prodServer"
"develop" : "devServer"
"release/*", "hotfix/*" : "stagingServer"
"feature/Thing-I-Want-To-Change-Regularly" : "testingServer"

where I can then write a Jenkinsfile like this:

pipeline {
    agent any
    stages {
        stage('Example Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Example Deploy') {
            when {
                //branch is in config branches
            }
            steps {
                //deploy to server
            }
        }
    }
}

I'm having trouble finding a way to achieve this. EnvInject Plugin seems to be the solution for non-Pipeline projects, but it's currently got security issues and only partial Pipeline support.

Upvotes: 0

Views: 1295

Answers (2)

IronSean
IronSean

Reputation: 1578

Going to post my current best approach to a global config value and hope something better comes along.


In Manage Jenkins -> Configure System -> Global Properties you can define global Environment Variables which can be accessed from Jenkins jobs. Defining an MY_BRANCH variable there could be accessed from a pipeline.

when { branch: MY_BRANCH }

Or even a RegEx and used like this

when { expression { BRANCH_NAME ==~ MY_BRANCH } }

However, this has the disadvantage that the Environment Variables are shared between every Jenkins job, not just across all branches of a single job. So careful naming will be necessary.

Upvotes: 0

bp2010
bp2010

Reputation: 2472

If you want to deploy to different servers depending on the branch, in Multibranch Pipelines you can use:

when { branch 'master' } (decalrative)

or

${env.BRANCH_NAME} (scripted)

to access which branch you are on and then add logic to deploy to corresponding servers based on this.

Upvotes: 1

Related Questions