jenkins|October 07, 2022|2 min read

How to Fetch Multiple Credentials and Expose them in Environment using Jenkinsfile pipeline

TL;DR

Use the environment block with credentials() helper to bind single creds, or nest multiple withCredentials blocks for accessing several credential sets in the same pipeline stage.

How to Fetch Multiple Credentials and Expose them in Environment using Jenkinsfile pipeline

Introduction

In this post, we will see how to fetch multiple credentials and expose them in environment variable.

Jenkinsfile Stage to Fetch Single Credential

There are many types of credentials that can be stored in Jenkins. The most commonly used is the username/password one.

Lets take an example of a stage, where I need to authenticate against an artifactory server.

stages {
  stage('Install requirements') {
      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
              """
          }
      } 
  }
}

In above Jenkinsfile, I’m reading credentials from a stored credential in Jenkin with id MY_API_KEY and exposing the username in variable: ARTIFACTORY_USERNAME, and password in variable: ARTIFACTORY_PASSWORD

Jenkinsfile Stage to Fetch Multiple Credentials

There are many cases, where I need to read more than one credentials,

stage('Run deployer') {
  steps {
      echo 'Deploying Artifacts to k8s Env...'

      withCredentials([
          [$class: 'UsernamePasswordMultiBinding', 
          credentialsId:"AZURE_SERVICE_SECRET",
              usernameVariable: 'AZURE_SERVICE_USERNAME', 
              passwordVariable: 'AZURE_SERVICE_SECRET'],
          [$class: 'UsernamePasswordMultiBinding', credentialsId:"MY_API_KEY",
              usernameVariable: 'ARTIFACTORY_USERNAME', 
              passwordVariable: 'ARTIFACTORY_PASSWORD']
      ]) {
          sh """
              sudo curl -LO "https://dl.k8s.io/release/v1.25.2/bin/linux/amd64/kubectl"
              sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
              kubectl version --client

              echo "deploy to env=${params.DeployEnv}, artifact=${params.ArtifactId}, version=${params.Version}"
              
              echo "Preparing runtime env..."
              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

              echo "Ready to run deployment..."
              python3.8 deploy.py "${params.DeployEnv}" "${params.ArtifactId}" "${params.Version}" "./ethos_deployment"

              deactivate
          """
      }
  }
}

The syntax is the same, it is just that I’ve used multiple credentials id and usage will be the same.

Related Posts

Jenkins Pipeline with Jenkinsfile - How To Schedule Job on Cron and Not on Code Commit

Jenkins Pipeline with Jenkinsfile - How To Schedule Job on Cron and Not on Code Commit

Introduction In this post we will see following: How to schedule a job on cron…

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

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

Introduction I have an automation script, that I want to run on different…

How to Git Clone Another Repository from Jenkin Pipeline in Jenkinsfile

How to Git Clone Another Repository from Jenkin Pipeline in Jenkinsfile

Introduction There are some cases, where I need another git repository while…

Jenkinsfile - How to Create UI Form Text fields, Drop-down and Run for Different Conditions

Jenkinsfile - How to Create UI Form Text fields, Drop-down and Run for Different Conditions

Introduction I had to write a CICD system for one of our project. I had to…

Example Jenkin Groovy Pipeline Script for Building Python Projects with Git Events and Push to Artifactory

Example Jenkin Groovy Pipeline Script for Building Python Projects with Git Events and Push to Artifactory

Introduction In this post, we will see a sample Jenkin Pipeline Groovy script…

Python - How to Maintain Quality Build Process Using Pylint and Unittest Coverage With Minimum Threshold Values

Python - How to Maintain Quality Build Process Using Pylint and Unittest Coverage With Minimum Threshold Values

Introduction It is very important to introduce few process so that your code and…

Latest Posts

Deep Dive on Elasticsearch: A System Design Interview Perspective

Deep Dive on Elasticsearch: A System Design Interview Perspective

“If you’re searching, filtering, or aggregating over large volumes of semi…

Deep Dive on Apache Kafka: A System Design Interview Perspective

Deep Dive on Apache Kafka: A System Design Interview Perspective

“Kafka is not a message queue. It’s a distributed commit log that happens to be…

Deep Dive on Redis: Architecture, Data Structures, and Production Usage

Deep Dive on Redis: Architecture, Data Structures, and Production Usage

“Redis is not just a cache. It’s a data structure server that happens to be…

Deep Dive on API Gateway: A System Design Interview Perspective

Deep Dive on API Gateway: A System Design Interview Perspective

“An API Gateway is the front door to your microservices. Every request walks…

REST API Design: Pagination, Versioning, and Best Practices

REST API Design: Pagination, Versioning, and Best Practices

Every time two systems need to talk, someone has to design the contract between…

Efficient Data Modelling: A Practical Guide for Production Systems

Efficient Data Modelling: A Practical Guide for Production Systems

Most engineers learn data modelling backwards. They draw an ER diagram…