103 Sudo vs Su and Principle of least privileges

1. Difference Between su and sudo

Basic Definition

  • su (Substitute User or Switch User):
    Allows you to switch to another user account, typically the root user. You’ll be prompted to enter the target user’s password.

  • sudo (Superuser Do):
    Allows you to run a single command with elevated privileges, but you use your own password (not root's). Access is controlled through the /etc/sudoers file.


Key Differences

Feature su sudo
Purpose Switch to another user session Run a command with elevated privileges
Password Needed Target user's password (e.g. root) Your own password
Security Less secure (full shell access) More secure (limited command access)
User Traceability No command logs Commands logged in /var/log/auth.log
Configuration No configuration Highly configurable via /etc/sudoers
Session Scope Creates a new shell Executes a single command

Real-World Usage

  • Use su when:

    • You need to maintain a full root shell session.

    • You're working in an environment where sudo isn’t configured.

  • Use sudo when:

    • You want to minimize risk by limiting access to specific commands.

    • You're working in a multi-user environment and need an audit trail.

    • You want to adhere to best security practices.


Example

# Using su to become root
su -
# (enter root password)
apt update

# Using sudo to run a command as root
sudo apt update
# (enter your password)

2. Principle of Least Privilege (PoLP)

What It Means

The Principle of Least Privilege is a security best practice stating that users and processes should be granted only the minimum level of access needed to perform their tasks — no more, no less.


💡 Why It’s Important

  • Reduces attack surface: Limits what attackers can do if they gain access.

  • Minimizes human error: Prevents accidental deletion or system changes.

  • Improves auditability: Easier to track and understand permission usage.

  • Supports compliance: Many regulations (e.g., HIPAA, GDPR) require it.


How It's Applied in Linux

  1. User Permissions
    Users are placed into groups and given access to only necessary files or directories.

  2. Sudo Configuration
    The /etc/sudoers file is used to allow users to run specific commands as root, without giving full root access.

    Example:

    john ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart apache2
    

    This means john can restart Apache with sudo, but nothing else.

  3. File Ownership and Permissions
    The chmod, chown, and chgrp commands are used to tightly control file access.

  4. Service Accounts
    Processes like web servers or databases run under dedicated users (e.g., www-data) that only have access to their specific directories.


 Interview-Worthy Talking Points

  • “Using sudo instead of su enforces least privilege by giving users temporary access to specific tasks.”

  • “We implement PoLP by reviewing user permissions regularly and removing unnecessary sudo privileges.”

  • “I once audited a system where developers had full root access — we moved them to role-based sudo rules, which enhanced security significantly.”


101 Linux ACL

 Here is the cleaned-up version of the Linux ACL (Access Control List) explanation without any special symbols:


What is ACL (Access Control List) in Linux?

Definition

ACL is a fine-grained permission system in Linux that allows you to grant different permissions to multiple users and groups on a single file or directory — something that traditional Unix permissions can't do.


Why Use ACL?

Traditional Linux file permissions only allow you to define:

  • One owner (user)

  • One group

  • Permissions for others

So you can only have 3 sets of permissions: user, group, others

But what if:

  • You want to give read access to another user

  • Or let a different group have write access

  • Without changing ownership or primary group

That's where ACL comes in.


ACL vs Traditional Permissions

Feature Traditional Permissions ACL
Number of users/groups 1 user, 1 group Multiple users and groups
Granularity Limited (r/w/x) Fine-grained per user/group
Inheritance No Yes (default ACL on directories)

Enabling and Using ACL

Check if filesystem supports ACL

Most modern Linux distros with ext4, xfs, or btrfs support it.

mount | grep acl

If not enabled, mount with:

mount -o remount,acl /mount/point

ACL Commands

1. Check current ACLs

getfacl filename

Example:

getfacl report.txt

Output:

file: report.txt
owner: prakash
group: devs
user::rw-
user:john:r--
group::r--
mask::r--
other::---

2. Add ACL for specific user

setfacl -m u:john:r file.txt

John gets read-only access, even if he is not the owner or in the group.


3. Add ACL for a group

setfacl -m g:designers:rw file.txt

Group 'designers' can read/write file.txt


4. Remove ACL entry

setfacl -x u:john file.txt

5. Set Default ACL on directory (for inheritance)

setfacl -d -m u:john:rw /project/folder

All new files inside /project/folder will automatically give john read/write access.


6. Remove all ACLs

setfacl -b file.txt

Example Scenario

You’re building a CI/CD pipeline and want:

  • Dev team to have read/write on app.conf

  • Ops team to have read-only access

  • Jenkins user to have write-only access

Using ACL:

setfacl -m g:dev:rw app.conf
setfacl -m g:ops:r-- app.conf
setfacl -m u:jenkins:-w- app.conf

Output Explanation (getfacl)

file: file.txt
owner: prakash
group: devs
user::rw-
user:john:r--
group::r--
group:designers:rw-
mask::rw-
other::---

Mask defines the maximum permission limit for all ACL users and groups (excluding the owner).


Interview-Ready Q and A

Q1: Why use ACL when traditional permissions exist?

A: Traditional permissions only allow one user and one group. ACL allows multiple users and groups to have different access levels on the same file or directory — useful in collaborative or enterprise environments.


Q2: What does 'setfacl -m u:john:rw file.txt' do?

A: It gives read/write access to user john on file.txt without changing ownership or default permissions.


Q3: What does 'mask::r--' mean in 'getfacl'?

A: The mask defines the maximum permission limit for all ACL users and groups (excluding the owner). Even if ACL grants rw-, a mask of r-- will reduce it to read-only.


Q4: How do you make ACL changes persistent across reboots?

A: ACLs are stored in extended attributes of files, and are persistent across reboots — provided the filesystem is mounted with acl support.


Q5: What’s the difference between default ACL and access ACL?

Type Applied to Purpose
Access ACL Files/Dirs Overrides standard permissions
Default ACL Directories Inherited by new files/dirs

Summary Cheat Sheet

Command Description
getfacl file.txt View ACLs
setfacl -m u:john:rw file.txt Set ACL for user
setfacl -m g:devs:rw file.txt Set ACL for group
setfacl -x u:john file.txt Remove ACL for user
setfacl -b file.txt Remove all ACL entries
setfacl -d -m u:john:rw dir/ Set default ACL for directory

Let me know if you want a one-page printable PDF or a Notion-ready template with examples and command cheats.

101 Linux Permissions

 Here’s a comprehensive guide to Linux Permissions tailored for FAANG-level interviews—starting from beginner to advanced, along with 10 interview-style questions and answers for practice.


1. Linux Permissions: Beginner to Advanced


1.1 Basics of Linux Permissions

Each file/directory has:

[File Type][Owner][Group][Others]

Example:

-rwxr-xr-- 1 prakash devs 2345 Jun 6 12:00 script.sh

Breakdown:

  • - = File (can be d for directory)

  • rwx = Owner: read, write, execute

  • r-x = Group: read, execute

  • r-- = Others: read only


1.2 Types of Permissions

Symbol Meaning Octal
r Read 4
w Write 2
x Execute 1

To get octal value:

chmod 754 filename
# => Owner: 7 (rwx), Group: 5 (r-x), Others: 4 (r--)

1.3 Managing Permissions

  • View:

    ls -l
    
  • Change using symbolic mode:

    chmod u+x file.sh     # Add execute for owner
    chmod g-w file.sh     # Remove write for group
    chmod o=r file.sh     # Set read-only for others
    
  • Change using numeric mode:

    chmod 755 file.sh
    

1.4 Ownership

  • Change owner:

    chown prakash file.txt
    
  • Change group:

    chgrp devs file.txt
    
  • Change both:

    chown prakash:devs file.txt
    

1.5 Special Permissions (Advanced)

1.5.1 SetUID (s) — Run as file owner

chmod u+s my_script
ls -l => -rwsr-xr-x

Used in programs like passwd.

1.5.2 SetGID (s) — Run with group permissions

chmod g+s my_script
ls -l => -rwxr-sr-x

1.5.3 Sticky Bit (t) — Protect deletion in shared dirs

chmod +t /tmp
ls -ld /tmp => drwxrwxrwt

1.6 Default Permissions – umask

Check umask:

umask        # e.g., 0022

Meaning:

  • File default: 666 – 0022 = 644 (rw-r--r--)

  • Dir default: 777 – 0022 = 755 (rwxr-xr-x)


1.7 Recursive Permission Change

chmod -R 755 /var/www
chown -R prakash:www-data /var/www

2. 10 Linux Permission Questions & Answers


Q1. What does chmod 755 file.sh do?

Answer:
Sets permissions to:

  • Owner: rwx (7)

  • Group: r-x (5)

  • Others: r-x (5)


Q2. What is the use of chmod +x script.sh?

Answer:
Adds execute permission for the owner, allowing the script to be run directly.


Q3. What is the difference between chmod 777 and chmod 755?

Answer:

  • 777: Everyone has full access (read/write/execute).

  • 755: Only owner has write access, others can read/execute but not modify.


Q4. How do you give read & write to owner, read-only to others?

Answer:

chmod 644 file.txt

Q5. What does -rwsr-xr-x mean in ls -l output?

Answer:
SetUID is set:

  • File will run with owner’s privileges, not current user’s.


Q6. What does the Sticky Bit do?

Answer:
Prevents users from deleting others’ files in a shared directory like /tmp.
drwxrwxrwt indicates sticky bit set.


Q7. How do you recursively change ownership of a directory and its contents?

Answer:

chown -R user:group /path/to/dir

Q8. Explain what umask 027 means?

Answer:
Default permissions mask:

  • For files: 666 – 027 = 640 (rw-r-----)

  • For dirs: 777 – 027 = 750 (rwxr-x---)


Q9. What’s the permission number for rw-rw-r--?

Answer:

rw- rw- r-- = 664

Q10. How to give only execute permission to others?

Answer:

chmod o=x file.sh

Bonus Practice Examples

Task Command
Give full permission to owner only chmod 700 file.sh
Remove all permissions for others chmod o= file.sh
Set SetGID on a directory chmod g+s dir
Make a directory with full access for all mkdir -m 777 shared_dir
View special permissions ls -l or stat file

Certainly! Let's break down umask (User Mask or User file creation MASK) in full detail, including concept, default values, calculation logic, and practical examples — especially useful for FAANG-level interviews.


What is umask?

umask defines the default permission bits to subtract from newly created files or directories.

  • It doesn’t grant permissions — it masks/restricts them.

  • When a user creates a file or directory, Linux applies a default permission first, then subtracts the umask.


Default Permission Values

Type Max default permission
File 666 (rw-rw-rw-) – no x by default
Directory 777 (rwxrwxrwx)

How umask Works (Step-by-Step)

Let's say:

  • umask = 022

For files:

Default:   666
UMASK:     022
Result:    644 → rw-r--r--

For directories:

Default:   777
UMASK:     022
Result:    755 → rwxr-xr-x

So:

  • Owner keeps full permissions

  • Group & Others lose w permission


Common umask values & their effects

UMASK File Permission Dir Permission Notes
000 666 → 666 777 → 777 Everyone full access
022 666 → 644 777 → 755 Group/Others: no write
027 666 → 640 777 → 750 Group: read, Others: no access
077 666 → 600 777 → 700 Owner-only full access

Examples in Shell

🔍 View current umask:

umask
# Output: 0022

 Set umask temporarily:

umask 0027
touch file.txt
mkdir dir1

ls -l
# file.txt => -rw-r-----
# dir1     => drwxr-x---

⚙️ Make umask permanent:

For bash shell, add this to:

vi ~/.bashrc
umask 027

Then:

source ~/.bashrc

Important Rules

  1. umask removes bits, not adds them.

  2. Files are never given execute (x) by default, even if umask allows it.

  3. Directories do get x so you can cd into them.


Interview-ready Example

Q: If a user has a umask of 0077 and runs touch test.txt and mkdir demo, what are the resulting permissions?

Answer:

  • Default for file: 666

  • umask: 077

  • Final: 600 (rw-------)

  • Default for dir: 777

  • umask: 077

  • Final: 700 (rwx------)

So only the owner can read/write/execute. This is a secure configuration.


Visual Table: umask Logic

Resource Max Default - UMASK = Final Permission
File 666 027 640 (rw-r-----)
Dir 777 027 750 (rwxr-x---)

Absolutely! Let's dive deep into Linux Special Permissions — SetUID, SetGID, and the Sticky Bit — in a clear, detailed, and FAANG-level interview-ready manner with real-world use cases, diagrams (described), and practical examples.


Why Special Permissions Exist

Linux has standard permission bits for:

  • User (Owner)

  • Group

  • Others

But what if you want:

  • A user to run a program as root?

  • Files in a shared directory to always inherit the same group?

  • Prevent users from deleting others’ files in /tmp?

That’s where special permission bits come in.


1. SetUID (Set User ID)

What it Does:

When a binary file has SetUID, any user who executes it temporarily assumes the permissions of the file's owner (usually root).

Real-World Use Case:

  • The passwd command allows any user to update their own password, but it needs to write to /etc/shadow, which is owned by root.

  • So passwd runs as root, even when executed by a regular user.

Example:

ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Jan  1 00:00 /usr/bin/passwd
          ^
          └── 's' here means SetUID is ON for user

How to Set:

chmod u+s my_script

🔍 How to Verify:

ls -l my_script
-rwsr-xr-x 1 prakash devs 2345 Jun 6 12:00 my_script

2. SetGID (Set Group ID)

What it Does:

A) On Files:

  • The process runs with group permissions of the file, not the executing user.

B) On Directories:

  • New files/directories inside the directory will inherit the group ownership of the directory — not the creator's default group.

Real-World Use Case:

  • In collaborative environments (e.g., /shared/projects), you want files created by any team member to have the same group, like devs.

Example on Directory:

mkdir shared
chgrp devs shared
chmod g+s shared
ls -ld shared
drwxr-sr-x 2 prakash devs 4096 Jun 6 12:00 shared
           ^
           └── 's' on group means SetGID is ON

Now, any file inside shared/ will automatically belong to group devs.


How to Set on File:

chmod g+s my_binary

How to Set on Directory:

chmod g+s /some/dir

3. Sticky Bit (t)

What it Does:

Only the owner of a file can delete or rename it, even if others have write access to the directory.

Real-World Use Case:

  • /tmp directory: World-writable directory used by all users. Without sticky bit, users could delete each other’s temporary files.

Example:

ls -ld /tmp
drwxrwxrwt 10 root root 4096 Jun 6 12:00 /tmp
          ^
          └── 't' means Sticky Bit is set

How to Set:

chmod +t mydir

How to Remove:

chmod -t mydir

Summary Table

Permission Symbol Applies to Effect
SetUID s (user) Executable file   Runs as file owner
SetGID s (group) File or directory File: runs as group, Dir: inherits group
Sticky Bit t (others) Directory Only file owner can delete

Interview-Style Example

Q: A file shows -rwsr-xr-x. What does it mean and why is it used?

Answer:

  • The s in user field = SetUID.

  • This means: when the file is executed, it runs with the owner's privileges, not the executor’s.

  • Common use: commands like passwd which need to access /etc/shadow.


FAANG-Level Takeaway Tips

  • Know how SetUID can be a security risk if misused (e.g., privilege escalation).

  • Sticky bit is essential for shared directories to prevent accidental file deletion.

  • SetGID on directories is useful in CI/CD pipelines and group collaboration.


Mock Interview: Parallel Stages in Jenkins

 

Q1. Can you give a real-world scenario where you used parallel stages to optimize a pipeline?

Answer:

Absolutely. In one of our CI/CD pipelines for a microservices-based architecture, we had around 12 independently deployable services. Each service had its own test suite, including unit tests, integration tests, and UI/E2E tests. Initially, these tests were executed sequentially, and the entire pipeline took about 50 minutes to complete, significantly slowing down our feedback loop and developer productivity.

To optimize this, I refactored the Jenkins pipeline using parallel stages in the Jenkinsfile. Here's what I implemented:


✅ Solution: Parallel Test Execution

  • I grouped the test stages by type:

    • Unit Tests

    • Integration Tests

    • UI/E2E Tests

  • Each of these groups was defined as a parallel branch within a parallel {} block.

  • Inside each group, services were further tested in parallel where possible, depending on resource availability.

groovy

stage('Test') { parallel { stage('Unit Tests') { steps { sh './run_unit_tests.sh' } } stage('Integration Tests') { steps { sh './run_integration_tests.sh' } } stage('UI Tests') { steps { sh './run_e2e_tests.sh' } } } }

🚀 Result:

  • The pipeline execution time dropped from ~50 minutes to ~12 minutes.

  • Developers received feedback within minutes, significantly increasing deployment velocity.

⚙️ Infrastructure Considerations:

To support parallelism at this scale:

  • I ensured dynamic agent provisioning using the Jenkins Kubernetes plugin.

  • Jenkins spun up ephemeral agents in our Kubernetes cluster, each with resource limits defined in pod templates.

  • This provided horizontal scalability, ensuring enough agents were available during peak loads without over-provisioning during idle times.

🧠 Lessons Learned:

  • It’s crucial to isolate tests properly; flaky or interdependent tests can break parallel execution.

  • Parallelization also revealed previously unnoticed race conditions in our integration tests, which we later addressed.

This implementation greatly optimized our CI pipeline, enabled faster iterations, and laid the foundation for event-driven pipelines and canary releases later on. 

Jenkins Pipeline

 

Jenkins Pipeline – Detailed Explanation for Interviews

✅ What is Jenkins Pipeline?

Jenkins Pipeline is a suite of plugins that allows users to define and automate the entire CI/CD process as code, stored in source control. The pipeline defines a series of steps, stages, and conditions that make up your build–test–deploy workflow.

It brings:

  • Pipeline as Code via Jenkinsfile

  • Error handling & retries

  • Parallel execution

  • Human approval input

  • Integration with Docker, Kubernetes, Git, etc.


🧱 Two Types of Jenkins Pipelines

1. Declarative Pipeline (Recommended for most users)

Introduced in Jenkins 2.x, it provides a structured and opinionated syntax that’s easier to write and read.

🔹 Key Features

FeatureDescription
pipeline {}Starts the pipeline block
agentWhere to run the pipeline
stagesSequence of build/test/deploy phases
stepsActual commands inside a stage
Built-in checksValidates syntax and structure before execution
Easier to maintainGreat for teams and large organizations




pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        echo 'Building...'
        sh 'mvn clean install'
      }
    }
    stage('Test') {
      steps {
        echo 'Running tests...'
        sh 'mvn test'
      }
    }
    stage('Deploy') {
      steps {
        echo 'Deploying...'
        sh './deploy.sh'
      }
    }
  }
}


2. Scripted Pipeline (More flexible, but complex)

Written in Groovy, this is the original pipeline syntax, offering programmatic control, custom logic, and dynamic behavior.

🔹 Key Features

FeatureDescription
Fully Groovy-basedCan use loops, conditionals, try-catch
High flexibilityGood for advanced users or dynamic jobs
Steeper learning curveLess readable and error-prone



node {
  stage('Build') {
    echo 'Building...'
    sh 'mvn clean install'
  }
  stage('Test') {
    echo 'Testing...'
    sh 'mvn test'
  }
  stage('Deploy') {
    echo 'Deploying...'
    sh './deploy.sh'
  }
}



🔍 Declarative vs Scripted: Comparison Table

FeatureDeclarative PipelineScripted Pipeline
SyntaxSimple, structuredGroovy-based scripting
Learning CurveEasySteep
FlexibilityModerateHigh
Error handlingLimited (post blocks)Full (try-catch-finally)
ReadabilityHigh (team-friendly)Lower (more complex logic)
Community Recommendation✅ Preferred⚠️ Use only for dynamic needs
Linting/Syntax ValidationYes (built-in)No (error appears at runtime)

 Advanced Features for Senior Roles

FeatureUsage
post blocksFor cleanup, success/failure notifications
when conditionsStage execution control based on conditions
inputManual approval during deployment
parallelRun test suites or jobs in parallel
parametersPass dynamic inputs to jobs
toolsAuto-install Maven, JDK, etc.
environmentDefine env variables per stage or globally
Shared LibrariesReuse pipeline logic across multiple jobs



pipeline {
  agent any
  parameters {
    string(name: 'BRANCH_NAME', defaultValue: 'main', description: 'Git branch')
  }
  environment {
    MAVEN_HOME = '/usr/local/maven'
  }
  stages {
    stage('Checkout') {
      steps {
        git branch: "${params.BRANCH_NAME}", url: 'https://github.com/example/repo.git'
      }
    }
    stage('Build') {
      tools {
        maven 'Maven 3.6.3'
      }
      steps {
        sh 'mvn clean package'
      }
    }
    stage('Test') {
      parallel {
        stage('Unit Tests') {
          steps { sh 'mvn test' }
        }
        stage('Integration Tests') {
          steps { sh 'mvn verify -P integration' }
        }
      }
    }
    stage('Deploy') {
      when {
        branch 'main'
      }
      steps {
        input message: "Approve deployment to production?"
        sh './deploy.sh'
      }
    }
  }
  post {
    success {
      echo 'Pipeline succeeded!'
    }
    failure {
      echo 'Pipeline failed.'
    }
  }
}


Interview Pro Tips

  • 💬 Talk about real use-cases: “We used parallel to split long-running tests and reduce pipeline time by 60%.”

  • 🧪 Mention testing: “Used Jenkinsfile linting and pipeline-model-definition plugin to validate before execution.”

  • 🛡 Security & maintainability: “Moved logic into shared libraries to reduce duplication and apply RBAC on credentials.”

 Summary


Jenkins Pipeline Key Points
Supports Pipeline-as-Code via Jenkinsfile
Declarative = easy, structured (preferred)
Scripted = powerful, dynamic (advanced users)
Enables CI/CD best practices: testing, deployment, approvals
Use shared libraries, parameters, and parallelism to scale

Jenkins Master Slave Architecture

 Here's a detailed explanation of Jenkins Master-Slave Architecture tailored for interviews, especially for a Senior CI/CD Engineer role:


Jenkins Master-Slave Architecture (Now "Controller-Agent")

Jenkins follows a distributed architecture to scale and handle multiple build jobs efficiently using:

  • Master (Controller)

  • Slaves (Agents)


🔹 1. Master (Controller)

The Jenkins Master (or controller) is the central orchestrator. It’s responsible for:

Feature Description
UI & CLI Hosts the Jenkins Dashboard and API
Job Scheduling Schedules build jobs and assigns them to agents
Load Distribution Decides which agent runs which job
Plugin Management Manages and runs all installed plugins
SCM Polling Triggers jobs based on Git changes
Running Lightweight Jobs Can also run jobs if no agent is assigned

🧠 Note: Ideally, reserve the master for orchestration only; avoid heavy builds on it.


🔹 2. Slave (Agent)

Agents are worker nodes where Jenkins actually executes build jobs.

Feature Description
Executes Build Steps    Compiles, tests, packages, etc.
Platform-Specific Jobs    Can run on specific OS, JVMs, or toolchains
Labeling    Tagged with labels to match job requirements
Multiple Agents    You can configure many agents for parallelism and scaling

✅ Agent Types:

  • Permanent Agent: Configured manually with fixed specs and labels

  • Cloud Agent (Ephemeral): Spawned on-demand using Kubernetes, AWS EC2, etc.

  • Docker Agent: Spins containers dynamically for isolated build environments


🔄 3. Communication

  • SSH: Most common method (Jenkins → Agent)

  • JNLP (Java Web Start): Used when agent initiates the connection (firewall-friendly)

  • WebSocket: Newer, more secure, used with Kubernetes agents


📘 Example Scenario

You configure:

  • Master: Orchestrator

  • Linux Agent: For Maven, Java builds

  • Windows Agent: For .NET builds

  • Docker Agent: For isolated builds using containers

A job with label linux && docker will be dispatched only to Linux agents with Docker installed.


🧠 Why Use Master-Slave Architecture?

Benefit Explanation
Scalability       Handle 100s of builds in parallel
Isolation       Run jobs in separate environments (avoid tool conflicts)
Efficiency       Avoid overloading the master
Flexibility       Run platform-specific or label-specific builds

🔐 Security Considerations

  • Restrict agent permissions

  • Use node-level security

  • Secure communication using SSH keys or agent certificates

  • Restrict script execution on agents


⚙️ Tools and Integrations

  • Cloud Agents via:

    • Jenkins Kubernetes Plugin

    • Amazon EC2 Plugin

  • Monitoring:

    • Prometheus Plugin

    • Monitoring master/agent CPU, memory, disk


📝 Interview Tips

✅ Real-world Talking Points

  • “We used Kubernetes plugin to dynamically scale Jenkins agents.”

  • “To reduce master load, we offloaded all CPU-intensive builds to agents.”

  • “We used custom Docker images per job with pre-installed tools.”

✅ Key Terms

  • Labels

  • Executors

  • Load balancing

  • Ephemeral agents

  • Declarative pipeline agent { label '...' }


CICD Interview 101

 

CI/CD Senior Engineer Interview Questions (Jenkins, Python, Maven, Jenkinsfile)

Section 1: Jenkins (Core & Advanced)

  1. What is Jenkins and how does it work?

    • Hint: Master-slave architecture

    • Answer: Jenkins is an open-source automation server used for CI/CD. It uses master-slave architecture to distribute build tasks across multiple machines.

  2. Explain Jenkins pipeline.

    • Hint: Declarative vs Scripted

    • Answer: Jenkins Pipeline is a suite of plugins that supports implementing and integrating continuous delivery pipelines. It supports Declarative and Scripted syntaxes.

  3. Difference between Declarative and Scripted Pipeline?

    • Hint: Syntax structure

    • Answer: Declarative pipeline uses a predefined structure, easier for beginners. Scripted pipeline is Groovy-based and offers more control and flexibility.

  4. How do you handle parallel stages in Jenkins?

    • Hint: parallel keyword

    • Answer: Use the parallel directive inside a stage to run tasks concurrently.

  5. What is the purpose of agent in Jenkinsfile?

    • Hint: Execution context

    • Answer: Specifies where the pipeline or a specific stage should run (e.g., any, label, docker).

  6. What is Jenkins shared library?

    • Hint: Reuse code across pipelines

    • Answer: It allows you to store common functions or pipeline code in a central repo and use them in multiple pipelines.

  7. How do you trigger a Jenkins job remotely?

    • Hint: API token, curl

    • Answer: Use Jenkins REST API with a token, e.g., curl -X POST <jenkins-url>/job/<job-name>/build?token=<token>.

  8. What are Jenkins credentials and how do you manage them?

    • Hint: Credentials plugin

    • Answer: Stored securely in Jenkins, managed via Credentials plugin. You can access them in pipelines using credentials() or withCredentials().

  9. Explain the use of post block in Declarative Pipeline.

    • Hint: Success/Failure/Always

    • Answer: Used for post-build actions like cleanup, notifications, only runs under defined conditions.

  10. How to archive artifacts in Jenkins?

    • Hint: archiveArtifacts step

    • Answer: Use archiveArtifacts artifacts: 'target/*.jar' to retain build artifacts.

  11. What are Jenkins agents and how are they configured?

    • Hint: Nodes

    • Answer: Agents are worker nodes configured via UI or script. Can be static or auto-scaled with cloud providers.

  12. What is the use of Blue Ocean in Jenkins?

    • Hint: UI improvement

    • Answer: Blue Ocean provides a modern and user-friendly UI for Jenkins pipelines.

  13. How can you secure Jenkins?

    • Hint: Role-based access, security realm

    • Answer: Use matrix-based security, secure agents, plugins for roles, and enable security realms.

  14. How do you integrate Jenkins with GitHub?

    • Hint: Webhook + Git plugin

    • Answer: Configure GitHub webhook to trigger builds, and use Git plugin in Jenkins.

  15. What are some common Jenkins plugins you’ve used?

    • Hint: Git, Pipeline, Slack

    • Answer: Git plugin, Pipeline, Blue Ocean, Slack Notification, Credentials Binding, Maven Integration.

  16. What is a Jenkinsfile?

    • Hint: Pipeline as Code

    • Answer: It is a text file that contains the definition of a Jenkins pipeline.

  17. How do you pass parameters to a Jenkins pipeline?

    • Hint: parameters block

    • Answer: Define using parameters block and access with ${params.<param>}.

  18. How do you monitor Jenkins performance?

    • Hint: Metrics plugin

    • Answer: Use Monitoring plugin, Metrics, and external tools like Prometheus.

  19. How do you handle failing steps without breaking the pipeline?

    • Hint: catchError, try-catch

    • Answer: Use catchError or try-catch in scripted pipelines.

  20. How do you perform rollback in Jenkins pipelines?

    • Hint: Tagging, artifact version

    • Answer: Use Git tags, versioned artifacts, or redeploy from a stable version.

Section 2: Python (Build & Script Automation)

  1. How do you use Python in a Jenkins pipeline?

  2. What is a virtualenv and how is it used?

  3. How do you manage Python dependencies in a CI pipeline?

  4. Write a Python script to validate a JSON configuration file.

  5. How do you handle exceptions in a CI Python script?

  6. How do you run unit tests in Python using Jenkins?

  7. What is pytest and how is it integrated?

  8. How do you generate test coverage reports in Python?

  9. What are some best practices for writing CI-safe Python scripts?

  10. How do you lint Python code in Jenkins?

Section 3: Maven

  1. What is Maven and why is it used?

  2. What is the structure of a pom.xml file?

  3. Explain Maven lifecycle phases.

  4. How do you create a Maven project?

  5. How do you install dependencies using Maven?

  6. What is the use of Maven profiles?

  7. How do you publish Maven artifacts to Nexus/Artifactory?

  8. How do you use Maven in a Jenkinsfile?

  9. How do you skip tests in Maven builds?

  10. What are common Maven plugins used in CI/CD?

Section 4: Jenkinsfile

  1. What is the syntax of a Jenkinsfile?

  2. How do you define environment variables?

  3. How do you define a matrix build in a Jenkinsfile?

  4. How do you load shared libraries?

  5. How do you use when conditionals?

  6. How do you handle credentials securely in Jenkinsfile?

  7. How do you run shell commands in Jenkinsfile?

  8. How do you run parallel stages in a Jenkinsfile?

  9. What is input step in Jenkinsfile?

  10. How do you retry failed steps?

Section 5: Advanced CI/CD Concepts

  1. Explain CI vs CD.

  2. What are the advantages of CI/CD?

  3. How do you implement Canary deployment?

  4. What is Blue-Green deployment?

  5. How do you version your applications in CI/CD?

  6. What is Infrastructure as Code and how is it used in CI/CD?

  7. How do you manage secrets in CI/CD?

  8. What tools can you use for containerization in pipelines?

  9. How do you test Docker images in CI/CD?

  10. What is pipeline as code and its advantages?

Section 6: Troubleshooting & Optimization

  1. How do you debug a failing Jenkins pipeline?

  2. What are common issues in Jenkins builds?

  3. How do you optimize pipeline execution time?

  4. How do you ensure idempotency in pipelines?

  5. What to do when Jenkins runs out of disk space?

  6. How to prevent long-running builds from hanging Jenkins?

  7. How do you limit concurrent builds?

  8. How do you deal with flaky tests in CI?

  9. How do you schedule jobs in Jenkins?

  10. How do you clean up old jobs/artifacts?

Section 7: Miscellaneous

  1. What are ephemeral agents and their benefit?

  2. How do you implement approval gates in CI/CD?

  3. What is the role of Slack/MS Teams integration?

  4. How do you backup and restore Jenkins configuration?

  5. What is Jenkins X?

  6. Compare Jenkins with GitHub Actions.

  7. How do you handle branching strategies in CI/CD?

  8. What is multi-branch pipeline?

  9. How do you set up cross-platform builds?

  10. What is the role of Webhooks?

Section 8: Real-World Scenarios

  1. CI pipeline for microservices with Python & Docker.

  2. Handling a failing deployment in production.

  3. Designing a zero-downtime deployment pipeline.

  4. Integrating code quality checks (SonarQube).

  5. Creating a rollback strategy.

  6. Handling database migrations in CI/CD.

  7. Monitoring deployments in real-time.

  8. Setting up feature flag-driven deployment.

  9. CI/CD pipeline for multi-language repo.

  10. Automating security scans.

Section 9: Behavioral & Strategy

  1. Describe a major CI/CD challenge you faced.

  2. How do you keep up with CI/CD best practices?

  3. What is your process for onboarding new developers to CI?

  4. How do you handle downtime during pipeline maintenance?

  5. How do you train teams on CI/CD?

  6. How do you ensure pipeline quality and reliability?

  7. What metrics do you track for CI/CD performance?

  8. How do you plan CI/CD for greenfield projects?

  9. Describe a time you automated a complex manual process.

  10. How do you balance speed vs safety in deployments?