Chapter 25: Shared Libraries, Credentials and Environments
Chala mitrano, aaj aapan shared library, credentials ids, parameters, ani DEV/TEST/STAGING/PROD approval. Scan optional nahi — library pudhe chapter 32. Ghabru naka.
What you will learn in this chapter
- Shared library folder shape: vars, src, resources
- @Library in the app Jenkinsfile
- withCredentials by id
- Parameters including password warnings
- DEV TEST STAGING PROD with input approval
Concepts in this chapter
- 25.1Why a library
- 25.2The three folders
- 25.3@Library in the app Jenkinsfile
- 25.4Credentials and withCredentials
- 25.5Parameters again, including password
- 25.6DEV, TEST, STAGING, PROD
The chapter recap is at the end of the last concept page.
Practice Tasks
Suppose we are on the DevOps team at Wipro, the IT services company, working from Bengaluru. Anjali Patil leads the team, and we look after the ticket helpdesk. Costs are counted in INR. In the tasks below we do real DevOps jobs on this project using what this lesson teaches. Wipro is a real company, but this project, the people, servers, IP addresses and numbers are made up for practice.
0 / 12
Easy Declarative Jenkinsfile: build and test
Why: Pipeline as code lives in Git with the app, so every change is reviewed.
What to do: Write a declarative Jenkinsfile: agent any; stage Build runs sh 'mvn -B package'; stage Test runs sh 'mvn test'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Medium Pipeline environment variables
Why: Values set once in environment are reused by every stage.
What to do: Declarative pipeline, agent any, environment with IMAGE = 'wipro/ticket' and TAG = '1.5.9', and stage Image running sh 'docker build -t $IMAGE:$TAG .'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Medium Run the build inside a Docker agent
Why: A Docker agent gives a clean, versioned toolchain for every build.
What to do: Declarative pipeline with agent docker { image 'maven:3.9-eclipse-temurin-21' } and stage Build running sh 'mvn -B verify'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Medium Always archive, alert on failure
Why: post blocks run after the stages, whatever the result.
What to do: Declarative pipeline, agent any, one stage Build with sh 'make'. Add post: always → archiveArtifacts artifacts: 'build/**'; failure → echo 'Build failed'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Medium Deploy only from main
Why: Feature branches are built and tested but never deployed.
What to do: Declarative pipeline, agent any, stage Deploy with when { branch 'main' } and steps sh './deploy.sh ap-south-1'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Medium Use a secret as an env variable
Why: Secrets are masked in logs and never stored in the repo.
What to do: Workflow on workflow_dispatch. Job notify on ubuntu-latest with one step named Notify that runs ./notify.sh and has env SLACK_URL set from secrets.SLACK_URL.
- Start from the top-level keys the task names.
- Indent child keys with 2 spaces (no tabs).
- Use "- " for list items and fill each value from the task.
- Check the colons and spacing, then click Check answer.
Medium Create a secret
Why: Passwords belong in a Secret, not in the image.
What to do: Create a generic secret db-cred in wipro-prod with DB_PASSWORD=changeme.
- Read the task and pick the tool it needs (git, docker, kubectl, terraform, ansible...).
- Write the tool name, then the sub-command (the action word).
- Add the flags the task needs, each followed by its value.
- Add names, files or paths at the end, then click Check answer.
Hard Use Jenkins credentials safely
Why: withCredentials masks the password and removes it after the block.
What to do: Inside stage Push steps, use withCredentials with usernamePassword(credentialsId: 'reg-cred', usernameVariable: 'U', passwordVariable: 'P') and run sh 'echo $P | docker login -u $U --password-stdin registry.wipro.example.com'. Wrap it in a full declarative pipeline with agent any.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Hard Manual approval before production
Why: A human sign-off stops an accidental production release.
What to do: Declarative pipeline, agent any, stage Prod with input message 'Deploy to production?' and steps sh './deploy.sh prod'.
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Hard Parallel test stages
Why: Running unit and lint at the same time halves feedback time.
What to do: Declarative pipeline, agent any, stage Checks containing parallel with stage Unit (sh 'npm test') and stage Lint (sh 'npm run lint').
- Start with pipeline { and close it with } at the end.
- Add agent, then stages { } with one stage('Name') { steps { } } per step.
- Put the commands inside steps using sh '...'.
- Count your { and } so every block is closed, then click Check answer.
Hard Encrypt a secrets file
Why: Vault lets you commit secrets safely, encrypted.
What to do: Encrypt the file group_vars/all/secrets.yml with Ansible Vault.
- Read the task and pick the tool it needs (git, docker, kubectl, terraform, ansible...).
- Write the tool name, then the sub-command (the action word).
- Add the flags the task needs, each followed by its value.
- Add names, files or paths at the end, then click Check answer.
Hard Env from ConfigMap and Secret
Why: The pod reads settings and passwords without baking them into the image.
What to do: Write a Pod ticket (container app, image wipro/ticket:1.5.9) that loads all keys from ConfigMap ticket-config and sets env DB_PASSWORD from Secret db-cred key DB_PASSWORD.
- Start from the top-level keys the task names.
- Indent child keys with 2 spaces (no tabs).
- Use "- " for list items and fill each value from the task.
- Check the colons and spacing, then click Check answer.
Ravi Sir's Cards: 15 revision, interview and comparison cards for this chapter · मराठी cards