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













