Jenkins Pipeline - How to run Automation on Different Environment (Dev/Stage/Prod), with Credentials

October 07, 2022

Introduction

I have an automation script, that I want to run on different environments, with a cron schedule. I’m using a web-service, and the endpoints are different for each environment.

Also, I would need credentials for calling that web-service apis.

Recommended read on How to Run job on Cron-schedule

Jenkinsfile for Run Automation on Different Environments

pipeline {
    agent {
        node {
            label "MyNode"
        }
    }
    triggers {
        //every 24 hours at 12 AM
        cron('0 0 * * *')
    }
    stages {
        stage('Install requirements') {
            when {
                not { changeset pattern: ".*", comparator: "REGEXP" }
            }
            steps {
                withCredentials([[
                    $class: 'UsernamePasswordMultiBinding',
                    credentialsId: 'my_api_key',
                    usernameVariable: 'ARTIFACTORY_USERNAME',
                    passwordVariable: 'ARTIFACTORY_PASSWORD']
                ]) {
                    sh """
                    python3.8 -m pip install virtualenv
                    python3.8 -m venv python_env
                    source python_env/bin/activate
                    python3.8 -m pip install --upgrade pip
                    python3.8 -m pip install -r requirements.txt -i https://${ARTIFACTORY_USERNAME}:${ARTIFACTORY_PASSWORD}@artifactory.myorg.com/artifactory/api/pypi/pypi-myorg-release/simple

                    deactivate
                    """
                }
            } 
        }
        stage('Run Workflow Scheduler') {
            parallel {
                stage('Run Scheduler for Dev') {
                    steps {
                        withCredentials([[
                            $class: 'UsernamePasswordMultiBinding',
                            credentialsId: 'mygen',
                            usernameVariable: 'API_USER',
                            passwordVariable: 'API_PASSWORD']
                        ]) {
                            sh """
                            echo "Running for Dev env"

                            export WEB_SERVICE_BASE_URL="https://my-dev.myorg.com/api/"

                            python3.8 -m venv python_env
                            source python_env/bin/activate
                    
                            python3.8 app.py
                            deactivate
                            """
                        }
                    }
                }
                stage('Run Scheduler for Stage') {
                    steps {
                        withCredentials([[
                            $class: 'UsernamePasswordMultiBinding',
                            credentialsId: 'mygen',
                            usernameVariable: 'API_USER',
                            passwordVariable: 'API_PASSWORD']
                        ]) {
                            sh """
                            echo "Running for Stage env"

                            export WEB_SERVICE_BASE_URL="https://my-stg.myorg.com/api/"

                            python3.8 -m venv python_env
                            source python_env/bin/activate
                    
                            python3.8 app.py
                            deactivate
                            """
                        }
                    }
                }
                stage('Run Scheduler for Prod') {
                    steps {
                        withCredentials([[
                            $class: 'UsernamePasswordMultiBinding',
                            credentialsId: 'mygen',
                            usernameVariable: 'API_USER',
                            passwordVariable: 'API_PASSWORD']
                        ]) {
                            sh """
                            echo "Running for Prod env"

                            export WEB_SERVICE_BASE_URL="https://my-prod.myorg.com/api/"

                            python3.8 -m venv python_env
                            source python_env/bin/activate
                    
                            python3.8 app.py
                            deactivate
                            """
                        }
                    }
                }
            }
        }
    }
}

Description

I’m doing following in above file:

  • Schedule job every 24 hours: cron('0 0 * * *')
  • Not to run on code commit
  • Taking credentials from Jenkins using UsernamePasswordMultiBinding, and exposing in environment variables
  • Installing python requirements
  • Run automation via shell script
  • Then running automation run step in parallel, for each environment (dev/stage/prod)
  • Setting web service URL in environment variable

Similar Posts

Latest Posts