Home DevOps Jenkins Installation and Setup: Zero-to-Production CI/CD in 30 Minutes
Beginner ✅ Tested on Jenkins 2.440+ | Java 17/21 | Ubuntu 22.04/24.04 7 min · June 21, 2026

Jenkins Installation and Setup: Zero-to-Production CI/CD in 30 Minutes

Step-by-step guide to install Jenkins, configure master-agent architecture, automate CI/CD pipelines, and handle production incidents.

N
Naren Founder & Principal Engineer

20+ years shipping production infrastructure and CI/CD at scale. Lessons pulled from things that broke in production.

Follow
Production
production tested
July 15, 2026
last updated
2,406
articles · all by Naren
Before you start⏱ 20 min
  • Basic programming fundamentals
  • A computer with internet access
  • Willingness to follow along with examples
 ● Production Incident 🔎 Debug Guide ⚙ Triage Commands
Quick Answer
  • Install Java 11 or 17: sudo apt install openjdk-11-jdk -y.
  • Add Jenkins repo and install: wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - then sudo apt install jenkins.
  • Start and enable Jenkins: sudo systemctl enable --now jenkins.
  • Access on port 8080, get initial admin password: sudo cat /var/lib/jenkins/secrets/initialAdminPassword.
  • Install suggested plugins and create first admin user.
  • Set up master-agent with SSH: install ssh-slaves plugin, configure credentials, and launch agent via Java Web Start or SSH.
  • Create a freestyle or pipeline job, connect to Git, and trigger build.
  • Monitor logs: sudo journalctl -u jenkins -f for errors.
✦ Definition~90s read
What is Jenkins Installation and Setup?

Jenkins is an open-source automation server written in Java, designed to orchestrate continuous integration and delivery pipelines. It monitors external triggers like Git commits, cron schedules, or manual inputs, then executes a series of steps (build, test, deploy) defined in jobs or pipelines.

Imagine you're a chef in a busy restaurant.

Its plugin ecosystem (over 1,800) extends functionality to integrate with virtually any tool: Git, Docker, Kubernetes, Slack, etc. Jenkins follows a master-agent architecture: the master schedules jobs and serves the UI, while agents (or nodes) execute the actual work.

This allows scaling horizontally by adding more agents. Despite the rise of cloud-native CI/CD tools like GitHub Actions or GitLab CI, Jenkins remains popular for its flexibility, on-premise control, and ability to handle complex, multi-step workflows.

Plain-English First

Imagine you're a chef in a busy restaurant. Every time a customer orders a dish, you need to chop vegetables, cook meat, plate, and serve. Jenkins is like an automated kitchen assistant that does all the prep work for you. You just tell it what to do (like "when a new recipe arrives, start cooking"), and it handles the rest. It can also split work among multiple assistants (agents) to speed things up. If something goes wrong, it logs the issue so you can fix it later. That's Jenkins: an automation server that takes repetitive tasks off your hands.

I remember my first Jenkins setup like it was yesterday. I was a junior DevOps engineer, handed a server with a fresh Ubuntu install and told to 'get CI/CD working'. I spent hours wrestling with Java versions, plugin conflicts, and SSH key permissions. The initial admin password? I must have typed sudo cat /var/lib/jenkins/secrets/initialAdminPassword a dozen times, only to realize I had a typo. After many late nights, I finally had a pipeline deploying a simple 'Hello World' app. That experience taught me the importance of a systematic approach. Now, I can go from zero to production-ready CI/CD in under 30 minutes. This guide distills that journey into a repeatable process, complete with the exact commands and pitfalls to avoid.

1. Prerequisites: What You Need Before Installing Jenkins

Before installing Jenkins, ensure your system meets the requirements. Jenkins requires Java 8, 11, or 17 (Java 11 recommended). Verify with java -version. If not installed, on Ubuntu: sudo apt update && sudo apt install openjdk-11-jdk -y. For other OS, download from Adoptium or Oracle. Memory: at least 256MB RAM for master, but 1GB+ recommended for production. Disk: 50GB+ for builds and logs. Network: Jenkins listens on port 8080 by default; ensure firewall allows inbound. Also, outbound access to plugin update sites (updates.jenkins.io) and Git repositories. For production, consider using a reverse proxy like Nginx with SSL. Install Git: sudo apt install git -y. Docker optional but recommended for containerized builds. User account: Jenkins runs as 'jenkins' user; create it if not exists: sudo useradd -m -s /bin/bash jenkins. Add to sudo group if needed: sudo usermod -aG sudo jenkins. Prepare a database? Not needed; Jenkins uses file-based storage by default. For high availability, configure external database (MySQL/PostgreSQL) later.

📊 Production Insight
In production, always use a dedicated non-root user for Jenkins. Set up monitoring on disk and memory usage. Use a separate volume for JENKINS_HOME to avoid filling root partition.
🎯 Key Takeaway
Java 11 is the sweet spot. Allocate at least 2GB heap for production. Ensure network access to plugin repositories.
jenkins-installation-setup Jenkins CI/CD Architecture Layers From user interface to build execution User Interface Web Dashboard | CLI | REST API Job Management Freestyle Jobs | Pipeline Jobs | Multibranch Pipelines Build Execution Master Node | Agent Nodes | Executors Source Control Git | SVN | Mercurial Plugin Ecosystem SCM Plugins | Build Tools | Notification Plugins THECODEFORGE.IO
thecodeforge.io
Jenkins Installation Setup

2. Installing Jenkins: Step-by-Step on Ubuntu 20.04/22.04 LTS

Add the Jenkins repository and install. First, import the GPG key: wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -. Then add the repo: sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'. Update: sudo apt update. Install Jenkins: sudo apt install jenkins -y. This installs Jenkins as a systemd service. Start and enable: sudo systemctl enable --now jenkins. Check status: sudo systemctl status jenkins. Access Jenkins at http://your-server-ip:8080. You'll see a 'Unlock Jenkins' page. Get the initial admin password: sudo cat /var/lib/jenkins/secrets/initialAdminPassword. Copy and paste. On the next screen, choose 'Install suggested plugins' or select specific ones. The installation may take a few minutes. After plugins are installed, create your first admin user (remember credentials!). Set Jenkins URL (default http://localhost:8080). Save and finish. You're now on the Jenkins dashboard. For Windows, use the installer from jenkins.io. For Docker: docker run -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts. Ensure volume persistence.

📊 Production Insight
Use the LTS version for stability. In production, configure Jenkins behind a reverse proxy (Nginx) with SSL from the start. Set up automated backups of JENKINS_HOME.
🎯 Key Takeaway
Always use the LTS release. Secure Jenkins immediately with SSL and strong admin password.

3. Post-Installation Configuration: Security, Plugins, and System Settings

After first login, secure Jenkins. Go to Manage Jenkins -> Configure Global Security. Enable 'Jenkins’ own user database' and 'Logged-in users can do anything' (or use matrix-based security). For production, integrate with LDAP or Active Directory. Set up Jenkins URL under Manage Jenkins -> Configure System -> Jenkins Location. Install essential plugins: Git, Pipeline, Blue Ocean (optional), Docker, Slack or Email for notifications. Manage Jenkins -> Manage Plugins -> Available tab. Search and install. Configure system tools: Manage Jenkins -> Global Tool Configuration. Add JDK installations (under 'JDK'): provide name and path (e.g., /usr/lib/jvm/java-11-openjdk-amd64). Add Git installation (automatic). Add Maven/Gradle if needed. Configure email notifications: Manage Jenkins -> Configure System -> E-mail Notification. Enter SMTP server details (e.g., smtp.gmail.com, port 587, use SSL). Test configuration. Set up Jenkins to automatically restart after plugin installs: Manage Jenkins -> Configure System -> 'Restart Jenkins' option. For performance, adjust number of executors under Manage Jenkins -> Manage Nodes and Clouds -> Master -> Configure. Set number of executors to match CPU cores (e.g., 2). Save.

📊 Production Insight
Use a dedicated service account for email. For large teams, use matrix-based security to restrict access. Pin plugin versions to avoid unexpected updates.
🎯 Key Takeaway
Configure security, tools, and notifications right after installation. Use global tool configuration to manage JDK, Git, Maven versions centrally.
jenkins-installation-setup Freestyle Jobs vs Pipeline as Code Trade-offs in Jenkins job configuration Freestyle Jobs Pipeline as Code Configuration GUI-based, point-and-click Declarative or scripted in Jenkinsfile Version Control Not stored in SCM Stored in Jenkinsfile in repo Complexity Simple, limited logic Supports loops, conditions, functions Reusability Low, manual duplication High, shared libraries Maintenance Prone to drift, manual updates Automated via SCM changes THECODEFORGE.IO
thecodeforge.io
Jenkins Installation Setup

4. Setting Up Master-Agent Architecture: Scale Your Builds

Jenkins master-agent architecture distributes workload. The master schedules jobs and serves UI; agents execute builds. To add an agent via SSH: install 'SSH Build Agents' plugin (or 'ssh-slaves' plugin). On the agent machine, install Java and create a user (e.g., 'jenkins'). Add the master's SSH public key to agent's ~/.ssh/authorized_keys. On Jenkins master: Manage Jenkins -> Manage Nodes and Clouds -> New Node. Enter node name, select 'Permanent Agent'. Under 'Remote root directory', enter /home/jenkins/agent. Under 'Launch method', select 'Launch agent via SSH'. Enter host, credentials (SSH username with private key). Test connection. Save. The agent should connect automatically. Alternatively, use Java Web Start (JNLP): on the agent, run the command from node page: java -jar agent.jar -jnlpUrl http://jenkins:8080/computer/agent/slave-agent.jnlp -secret <secret>. For Docker agents, use Docker plugin to spin up ephemeral agents. Configure clouds: Manage Jenkins -> Manage Nodes and Clouds -> Configure Clouds -> Add Docker. Set Docker host URI, images, etc. For Kubernetes, use Kubernetes plugin to dynamically provision pods as agents.

📊 Production Insight
Use SSH agents for persistent machines, Docker/Kubernetes for ephemeral. Monitor agent health with 'Node Monitoring' plugin. Set agent labels to route specific jobs (e.g., 'docker' or 'linux').
🎯 Key Takeaway
Master-agent architecture scales builds. SSH launch is simplest for static agents; Docker for dynamic.

5. Creating Your First Pipeline: From Git to Build Artifact

Pipelines define CI/CD as code. Create a new item: click 'New Item', enter name, select 'Pipeline'. In the pipeline definition, choose 'Pipeline script from SCM' to store Jenkinsfile in Git. Example Jenkinsfile: ``groovy pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/your-repo/your-app.git' } } stage('Build') { steps { sh 'mvn clean package' } } stage('Test') { steps { sh 'mvn test' } } stage('Archive') { steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true } } } } ` Save and build. The pipeline will clone, build, test, and archive artifacts. For declarative pipelines, use pipeline block. Scripted pipelines use node { }`. For production, add environment variables, credentials, and post-build actions (e.g., deploy). Use Blue Ocean for a visual pipeline editor.

📊 Production Insight
Always store Jenkinsfile in SCM. Use shared libraries for reusable code. Implement pipeline stages as parallel when possible to speed up builds.
🎯 Key Takeaway
Pipeline as code (Jenkinsfile) is essential for version control and reproducibility. Use declarative syntax for simplicity.

6. Integrating with Git: Webhooks and Branch Triggers

To trigger builds automatically on Git push, set up webhooks. In GitHub: go to repository Settings -> Webhooks -> Add webhook. Payload URL: http://jenkins:8080/github-webhook/. Content type: application/json. Select 'Just the push event'. In Jenkins, install 'GitHub Integration Plugin' (or just 'Git plugin'). In your pipeline job, under 'Build Triggers', check 'GitHub hook trigger for GITScm polling'. Also, for branch filtering, use 'Branch Specifier' (e.g., /main). For GitLab: use 'GitLab Plugin'. Set webhook URL: http://jenkins:8080/project/<job-name>. For Bitbucket: use 'Bitbucket Plugin'. Ensure Jenkins URL is reachable from Git server (firewall, DNS). For polling as fallback: set 'Poll SCM' with cron (e.g., H/5 *). Webhooks are real-time; polling adds delay. Test webhook: push a commit, check Jenkins console output. If webhook fails, check Jenkins log: sudo journalctl -u jenkins -f. Common issue: webhook not reaching due to proxy or firewall.

📊 Production Insight
Use webhooks for instant triggers. Secure webhooks with secret tokens (GitHub secret). Monitor webhook delivery in GitHub settings.
🎯 Key Takeaway
Webhooks enable immediate build triggers. Always test with a sample push.

7. Managing Credentials: Secure Access to External Services

Jenkins stores credentials (passwords, SSH keys, tokens) securely. Manage Jenkins -> Manage Credentials -> Global credentials (unrestricted). Add credentials: 'Username with password' for Git, 'SSH Username with private key' for agent connections, 'Secret text' for API tokens. For Git over SSH, add private key as 'SSH Username with private key'. In pipeline, use withCredentials to bind: ``groovy withCredentials([usernamePassword(credentialsId: 'git-credentials', usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) { sh 'git clone https://$GIT_USER:$GIT_PASS@github.com/org/repo.git' } ` Or use sshagent for SSH keys: `groovy sshagent(['ssh-key-id']) { sh 'git clone git@github.com:org/repo.git' } ` For Docker registry, add 'Username with password' and use in pipeline: `groovy withDockerRegistry([credentialsId: 'docker-hub', url: '']) { sh 'docker push myimage' } `` Never hardcode secrets. Use credential IDs. Rotate periodically. For production, use a secrets manager like HashiCorp Vault with Jenkins plugin.

📊 Production Insight
Use separate credentials per service. Limit scope to specific jobs or folders. Audit credential usage with 'Credentials Binding' plugin.
🎯 Key Takeaway
Credentials are stored encrypted. Use withCredentials or sshagent in pipelines. Never expose secrets in logs.

8. Building and Testing: Automate Quality Gates

A CI pipeline should include build, unit tests, code analysis, and integration tests. For Java/Maven: mvn clean package compiles and runs tests. For Node.js: npm install && npm test. For Python: pip install -r requirements.txt && pytest. Add code quality with SonarQube: install 'SonarQube Scanner' plugin, configure server in Manage Jenkins -> Configure System -> SonarQube servers. In pipeline: ``groovy stage('SonarQube') { steps { withSonarQubeEnv('My SonarQube Server') { sh 'mvn sonar:sonar' } } } ` Add static analysis with Checkstyle or PMD. For security scanning, use OWASP Dependency-Check plugin. Fail build if quality gate fails: sh 'mvn checkstyle:check' or use junit to publish test results. Use archiveArtifacts to store build outputs. For parallel testing, split tests across agents. Use parallel stage: `groovy stage('Parallel Tests') { parallel { stage('Unit') { steps { sh 'mvn test' } } stage('Integration') { steps { sh 'mvn verify' } } } } ``

📊 Production Insight
Set up quality gates as build breakers. Use SonarQube's Quality Gate status check. Integrate with code review tools (e.g., GitHub checks).
🎯 Key Takeaway
Automate code quality checks in pipeline. Fail fast on test failures or code smells.

9. Deploying to Production: Continuous Delivery Pipelines

Continuous delivery automates deployment after successful tests. For a simple web app, use SSH to copy artifacts and restart service. Example pipeline stage: ``groovy stage('Deploy') { steps { sshagent(['deploy-key']) { sh """ scp target/myapp.jar user@prod-server:/opt/myapp/ ssh user@prod-server 'sudo systemctl restart myapp' """ } } } ` For Docker: build image, push to registry, then deploy on server. Use docker build and docker push. For Kubernetes: use kubectl apply -f deployment.yaml. Install 'Kubernetes CLI' plugin. Example: `groovy stage('Deploy to K8s') { steps { withKubeConfig([credentialsId: 'kube-config']) { sh 'kubectl set image deployment/myapp myapp=myregistry/myapp:${BUILD_NUMBER}' } } } `` Add approval gates: use 'Input' step to pause for manual approval before production deploy. Use environment-specific credentials. For blue-green deployment, use separate namespaces. Always include rollback strategy: keep previous artifacts and have a rollback script.

📊 Production Insight
Use deployment strategies like canary or blue-green. Integrate with monitoring (e.g., Prometheus) to verify deployment health. Automatically rollback on failure.
🎯 Key Takeaway
Continuous delivery pipelines automate deployment with safety nets (approvals, rollbacks). Use containerized deployments for consistency.

10. Monitoring and Logging: Keeping Jenkins Healthy

Monitor Jenkins health with built-in monitoring and plugins. Check system info: Manage Jenkins -> System Information. View logs: Manage Jenkins -> System Log. For real-time logs, sudo journalctl -u jenkins -f. Set up email alerts for build failures: in job configuration, 'Post-build Actions' -> 'Editable Email Notification'. For system monitoring, install 'Monitoring' plugin: shows memory, CPU, disk usage. Use 'Jenkins Metrics Plugin' to expose Prometheus metrics. Add to Prometheus config: ``yaml scrape_configs: - job_name: 'jenkins' metrics_path: '/prometheus' static_configs: - targets: ['jenkins:8080'] `` Set up Grafana dashboards. For log aggregation, send Jenkins logs to ELK stack using 'Logstash' plugin. Configure log level: Manage Jenkins -> System Log -> 'Log Levels' to increase verbosity for debugging. Monitor agent disconnects: use 'Node Monitoring' plugin to track uptime. Set up health checks: use 'HTTP Request' plugin to ping Jenkins endpoint and alert if down.

📊 Production Insight
Integrate Jenkins metrics with your existing monitoring stack. Set up alerts on disk space, memory, and agent availability. Regularly rotate logs to prevent disk full.
🎯 Key Takeaway
Monitor Jenkins itself. Use Prometheus/Grafana for metrics, ELK for logs. Set alerts on critical thresholds.

11. Backup and Disaster Recovery: Protecting Your CI/CD

Jenkins stores all configuration in JENKINS_HOME (/var/lib/jenkins). Backup this directory regularly. Simple backup script: ``bash #!/bin/bash BACKUP_DIR=/backup/jenkins TIMESTAMP=$(date +%Y%m%d%H%M%S) mkdir -p $BACKUP_DIR tar -czf $BACKUP_DIR/jenkins-backup-$TIMESTAMP.tar.gz /var/lib/jenkins # Keep last 7 days find $BACKUP_DIR -name ".tar.gz" -mtime +7 -delete ` Schedule via cron: 0 2 /path/to/backup.sh. For disaster recovery, restore from backup: stop Jenkins, extract backup to JENKINS_HOME, start Jenkins. Test restore periodically. For plugin versions, backup plugins` directory. For pipeline jobs, store Jenkinsfile in Git (already backed up). For credentials, use 'Credentials Binding' plugin to export/import. For database-backed configurations (if using external DB), backup DB separately. Use 'ThinBackup' plugin for automated backups. For high availability, consider Jenkins cluster with shared JENKINS_HOME on NFS (not recommended due to locking) or use active-passive with rsync.

📊 Production Insight
Automate backups and test restores quarterly. Keep offsite backups. Document recovery steps. Use version control for pipeline code.
🎯 Key Takeaway
JENKINS_HOME is the single source of truth. Back it up regularly. Test restores.

12. Troubleshooting Common Issues: From Plugin Conflicts to Performance

Common issues and fixes
  • Plugin conflicts: After update, Jenkins fails to start. Fix: remove conflicting plugin from /var/lib/jenkins/plugins/ (e.g., sudo rm -rf /var/lib/jenkins/plugins/plugin-name/) and restart.
  • Out of memory: Increase Java heap in /etc/default/jenkins or /etc/sysconfig/jenkins (RHEL). Set JAVA_ARGS="-Xmx2048m -Xms1024m". Monitor with jstat -gc <pid>.
  • Build hangs: Check if agent is busy. Cancel build, check agent logs. Increase timeout in pipeline: options { timeout(time: 30, unit: 'MINUTES') }.
  • Permission issues: Jenkins user must have read/write to workspace. Check ownership: sudo chown -R jenkins:jenkins /var/lib/jenkins/workspace.
  • Git clone fails: Verify Git installed on agent: which git. Check SSH host keys: ssh-keyscan github.com >> ~/.ssh/known_hosts.
  • Slow performance: Reduce number of executors on master. Move builds to agents. Use lightweight agents. Disable unused plugins.
  • Corrupted Jenkins state: If Jenkins won't start, check logs for java.io.IOException. Restore from backup. Run java -jar jenkins.war --jenkinsHome=/path/to/corrupted --clean (advanced).
  • Agent not connecting: Check firewall (port 50000 for JNLP). Verify agent launch command. Check agent Java version matches master.
📊 Production Insight
Keep a known-good backup. Pin plugin versions. Use a staging Jenkins to test updates before production. Document all custom configurations.
🎯 Key Takeaway
Most issues are plugin or memory related. Use logs, increase resources, and keep a backup.
● Production incidentPOST-MORTEMseverity: high

The Case of the Disappearing Agents: Jenkins Master Crashes Under Load

Symptom
All agents went offline simultaneously. The Jenkins UI showed 'Agent disconnected' for every node. New build requests queued indefinitely.
Assumption
Network issue or agent machine crash. Restarted agents individually, but they reconnected only to disconnect again within minutes.
Root cause
The Jenkins master ran out of heap memory due to a memory leak in an outdated plugin ('Yet Another Build Visualizer'). The master's JVM couldn't handle the agent communication threads, causing them to drop.
Fix
1. Increased Java heap: edit /etc/default/jenkins and set JAVA_ARGS="-Xmx2048m -Xms1024m". 2. Removed the problematic plugin. 3. Restarted Jenkins: sudo systemctl restart jenkins. 4. Monitored memory with jstat -gc <pid> to confirm stability.
Key lesson
  • Always monitor Jenkins JVM heap usage.
  • Set resource limits and keep plugins updated.
  • Use jstat or jvisualvm for profiling.
  • Implement alerts on agent disconnects.
Production debug guideCommon failure modes and fixes for Jenkins in production5 entries
Symptom · 01
Jenkins master is unresponsive or slow
Fix
Check system resources: top, free -m. Look for high CPU/memory usage. Restart Jenkins: sudo systemctl restart jenkins. If persistent, increase heap size in /etc/default/jenkins (JAVA_ARGS="-Xmx4g") and restart.
Symptom · 02
Builds fail with 'Connection refused' to agents
Fix
Verify agent connectivity: ping <agent-ip>, telnet <agent-ip> 22. Check agent logs at /var/log/jenkins/jenkins.log on agent. Ensure agent JAR is running and firewall allows port 50000 (or custom port).
Symptom · 03
Plugins fail to update or install
Fix
Check internet connectivity from Jenkins master: curl https://updates.jenkins.io. If behind proxy, configure proxy in Manage Jenkins > Manage Plugins > Advanced. Clear plugin cache: rm -rf $JENKINS_HOME/plugins/*.bak and restart.
Symptom · 04
Disk space full on Jenkins master
Fix
Run df -h. Clean old builds: curl -X POST http://jenkins-url/job/<job>/doDeleteAll or use Jenkins CLI. Remove old logs: sudo journalctl --vacuum-size=500M. Increase disk or set up log rotation.
Symptom · 05
Credentials not found or authentication errors
Fix
Check credential IDs in job config vs. stored credentials. Verify credential scope (global vs. folder). Regenerate credentials if corrupted: delete and recreate. Check Jenkins logs for CredentialNotFoundException.
★ Jenkins Quick Debug Cheat SheetImmediate actions for the most common Jenkins production issues
Jenkins not starting
Immediate action
Check logs: `sudo journalctl -u jenkins -n 100`
Commands
sudo systemctl status jenkins
Fix now
Fix port conflict: change HTTP_PORT in /etc/default/jenkins or kill process using port: sudo fuser -k 8080/tcp
Build stuck in queue+
Immediate action
Check agent availability: `curl http://jenkins-url/computer/api/json`
Commands
java -jar jenkins-cli.jar -s http://jenkins-url quiet-down
Fix now
Cancel stuck builds: java -jar jenkins-cli.jar -s http://jenkins-url cancel-queue
Plugin error on startup+
Immediate action
Disable problematic plugin: rename `.jpi` to `.jpi.disabled` in `$JENKINS_HOME/plugins`
Commands
ls -la $JENKINS_HOME/plugins/ | grep -i problem
Fix now
Restart Jenkins after disabling plugin
OutOfMemoryError+
Immediate action
Check heap usage: `jmap -heap <pid>`
Commands
ps aux | grep jenkins
Fix now
Increase heap: edit JAVA_ARGS="-Xmx8g" in /etc/default/jenkins and restart
Git clone fails with 'Permission denied'+
Immediate action
Verify SSH key: `ssh -T git@github.com`
Commands
cat $JENKINS_HOME/.ssh/id_rsa.pub
Fix now
Add public key to Git hosting service (GitHub/GitLab) and ensure known_hosts entry: ssh-keyscan github.com >> $JENKINS_HOME/.ssh/known_hosts
Jenkins Installation Setup: Feature Comparison
FeatureJenkins (Self-Hosted)Jenkins (Docker)GitHub ActionsGitLab CI
Installation ComplexityModerate: requires Java, server setup, plugin management.Easy: single command, but volume persistence needed.Very easy: hosted, no infrastructure.Easy: integrated with GitLab, SaaS or self-hosted.
ScalabilityHigh: master-agent with static or dynamic agents.Moderate: Docker agents, but orchestration manual.High: auto-scaling runners (limited on free tier).High: auto-scaling runners (SaaS).
Plugin EcosystemExtensive: 1800+ plugins, but compatibility issues.Same as self-hosted.Growing: marketplace with actions, but less mature.Built-in integrations, fewer plugins.
Pipeline as CodeYes: Jenkinsfile (Groovy), declarative or scripted.Same.Yes: YAML workflows.Yes: YAML .gitlab-ci.yml.
CostFree, but server and maintenance costs.Free, but server costs.Free tier (2000 min/month), then pay per minute.Free for SaaS (limited), self-hosted free.
Security & ComplianceFull control: on-premise, LDAP, RBAC.Same as self-hosted.Managed by GitHub, SOC2, but less control.Managed by GitLab, compliance features.
📦 Downloadable Quick Reference

Print-friendly master reference covering all topics in this track.

⇩ Download PDF

Key takeaways

1
Install Java 11, add Jenkins repo, install LTS version, unlock with initial admin password.
2
Use master-agent architecture to scale; SSH for static agents, Docker/Kubernetes for dynamic.
3
Store pipeline code in Jenkinsfile in Git for version control.
4
Integrate webhooks for instant build triggers on code push.
5
Manage credentials securely with Jenkins credentials store.
6
Automate code quality with SonarQube and fail builds on quality gate failures.
7
Implement deployment pipelines with approval gates and rollback strategies.
8
Monitor Jenkins with Prometheus/Grafana and backup JENKINS_HOME regularly.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
How do you install Jenkins on Ubuntu?
Q02SENIOR
Explain the difference between declarative and scripted pipelines.
Q03SENIOR
How would you set up a master-agent architecture with SSH?
Q04SENIOR
What are common causes of Jenkins agent disconnects and how do you fix t...
Q05SENIOR
How do you integrate SonarQube into a Jenkins pipeline?
Q06SENIOR
Describe how to implement a blue-green deployment using Jenkins and Kube...
Q07SENIOR
What steps would you take to troubleshoot a Jenkins master that is unres...
Q08JUNIOR
How do you manage credentials securely in Jenkins?
Q01 of 08JUNIOR

How do you install Jenkins on Ubuntu?

ANSWER
First, update the package index and install Java, which Jenkins requires. Then, add the official Jenkins repository key and source list, update again, and install Jenkins using apt. Finally, start the Jenkins service with systemctl and access it via your browser on port 8080 to complete the initial setup using the admin password from the log file.
FAQ · 8 QUESTIONS

Frequently Asked Questions

01
What is the default port for Jenkins?
02
How do I change the Jenkins port?
03
Can I run Jenkins on a different Java version?
04
How do I reset the admin password?
05
What is the difference between a freestyle job and a pipeline?
06
How do I add a new agent?
07
Why are my builds failing with 'Host key verification failed'?
08
How do I update Jenkins?
N
Naren Founder & Principal Engineer

20+ years shipping production infrastructure and CI/CD at scale. Lessons pulled from things that broke in production.

Follow
Verified
production tested
July 15, 2026
last updated
2,406
articles · all by Naren
🔥

That's Jenkins. Mark it forged?

7 min read · try the examples if you haven't

Previous
Introduction to Jenkins
2 / 41 · Jenkins
Next
Jenkins Upgrading