jenkins — Claude Code skill: Jenkins pipelines and agents
A skill for Jenkins work: writes Jenkinsfiles, configures agents, manages plugins and automates builds.
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a claude-codeWhat jenkins does
The skill hands your agent a Jenkins reference: declarative and scripted pipelines, agent setup, build parameters, credentials, parallel stages and shared libraries. It ships Groovy templates you can adapt when writing a Jenkinsfile at the repository root.
Agents come in three flavours — a Docker image, a Kubernetes pod with several containers, and a label selector such as linux && docker. For reuse there is a shared library layout with vars/, src/ and resources/, plus a sample buildApp step that takes a Node version.
You need a Jenkins server on 2.x or later, admin access to it, and Java 11+ on the server machine. Some Groovy familiarity helps too; the scripted examples get rough without it.
What it helps with
- write a Jenkinsfile for build and deploy from scratch
- set up a Docker or Kubernetes agent
- move repeated logic into a shared library
- wire credentials for git push and deploys
- run unit, integration and e2e tests in parallel
Example prompts for the agent
- Write a Jenkinsfile for a Node app: build, test, deploy only from main
- Show me how to configure a Kubernetes agent with node and docker containers
- Create a shared library with a buildApp step and load it via @Library
How to install jenkins
1Skills CLI (Vercel)
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a claude-code2Manually: put the files in place
~/.claude/skills/jenkins/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/jenkins/
1Skills CLI (Vercel)
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a codex2Manually: put the files in place
.agents/skills/jenkins/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a cursor2Manually: put the files in place
.cursor/skills/jenkins/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install BagelHole/DevOps-Security-Agent-Skills jenkins2Manually: put the files in place
.github/skills/jenkins/SKILL.md1Skills CLI (Vercel)
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a gemini-cli2Platform CLI
gemini skills install https://github.com/BagelHole/DevOps-Security-Agent-Skills --path devops/ci-cd/jenkinsManually: put the files in place
.devin/skills/jenkins/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about jenkins
How do I install the jenkins skill in Claude?
Run npx skills add BagelHole/DevOps-Security-Agent-Skills --skill jenkins -a claude-code. The skill lands at ~/.claude/skills/jenkins/SKILL.md.
What does the jenkins skill do?
It helps the agent write and edit Jenkins pipelines, configure agents, manage plugins and automate builds. Declarative and scripted Groovy examples are included.
What do I need to use it?
A Jenkins server running 2.x or later, admin access to it, and Java 11+ on the server. Basic Groovy understanding is expected for pipeline work.
Source text
SKILL.md · MIT
---
name: jenkins
description: Create and manage Jenkins CI/CD pipelines, configure agents, manage plugins, and automate builds. Use when working with Jenkins servers, creating Jenkinsfiles, or setting up build automation for enterprise environments.
license: MIT
metadata:
author: devops-skills
version: "1.0"
---
# Jenkins
Build, test, and deploy applications using Jenkins, the leading open-source automation server.
## When to Use This Skill
Use this skill when:
- Setting up Jenkins pipelines (declarative or scripted)
- Configuring Jenkins agents and executors
- Managing Jenkins plugins and security
- Creating shared libraries for pipeline reuse
- Integrating Jenkins with external tools
## Prerequisites
- Jenkins server (2.x or later)
- Admin access to Jenkins
- Java 11+ on Jenkins server
- Basic Groovy understanding for pipelines
## Declarative Pipeline
Create `Jenkinsfile` in repository root:
```groovy
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'registry.example.com'
APP_NAME = 'myapp'
}
stages {
stage('Build') {
steps {
sh 'npm ci'
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
post {
always {
junit 'test-results/*.xml'
}
}
}
stage('Deploy') {
when {
branch 'main'
}
steps {
sh './deploy.sh'
}
}
}
post {
failure {
mail to: '[email protected]',
subject: "Pipeline Failed: ${env.JOB_NAME}",
body: "Check console output at ${env.BUILD_URL}"
}
}
}
```
## Agent Configuration
### Docker Agent
```groovy
pipeline {
agent {
docker {
image 'node:20'
args '-v /tmp:/tmp'
}
}
stages {
stage('Build') {
steps {
sh 'npm ci && npm run build'
}
}
}
}
```
### Kubernetes Agent
```groovy
pipeline {
agent {
kubernetes {
yaml '''
apiVersion: v1
kind: Pod
spec:
containers:
- name: node
image: node:20
command:
- sleep
args:
- infinity
- name: docker
image: docker:24-dind
securityContext:
privileged: true
'''
}
}
stages {
stage('Build') {
steps {
container('node') {
sh 'npm ci && npm run build'
}
}
}
}
}
```
### Labeled Agents
```groovy
pipeline {
agent { label 'linux && docker' }
stages {
stage('Build') {
steps {
sh 'make build'
}
}
}
}
```
## Parameters
```groovy
pipeline {
agent any
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: 'Branch to build')
choice(name: 'ENVIRONMENT', choices: ['dev', 'staging', 'prod'], description: 'Target environment')
booleanParam(name: 'RUN_TESTS', defaultValue: true, description: 'Run tests?')
}
stages {
stage('Deploy') {
when {
expression { params.ENVIRONMENT == 'prod' }
}
steps {
sh "deploy.sh ${params.ENVIRONMENT}"
}
}
}
}
```
## Credentials
### Using Credentials
```groovy
pipeline {
agent any
environment {
AWS_CREDS = credentials('aws-credentials')
DOCKER_CREDS = credentials('docker-hub')
}
stages {
stage('Deploy') {
steps {
withCredentials([
usernamePassword(
credentialsId: 'github-token',
usernameVariable: 'GH_USER',
passwordVariable: 'GH_TOKEN'
)
]) {
sh 'git push https://${GH_USER}:${GH_TOKEN}@github.com/repo.git'
}
}
}
}
}
```
## Parallel Stages
```groovy
pipeline {
agent any
stages {
stage('Tests') {
parallel {
stage('Unit Tests') {
steps {
sh 'npm run test:unit'
}
}
stage('Integration Tests') {
steps {
sh 'npm run test:integration'
}
}
stage('E2E Tests') {
steps {
sh 'npm run test:e2e'
}
}
}
}
}
}
```
## Shared Libraries
### Library Structure
```
vars/
├── buildApp.groovy
├── deployApp.groovy
└── notifySlack.groovy
src/
└── com/example/
└── Pipeline.groovy
resources/
└── templates/
└── deployment.yaml
```
### Define Shared Step
```groovy
// vars/buildApp.groovy
def call(Map config = [:]) {
def nodeVersion = config.nodeVersion ?: '20'
docker.image("node:${nodeVersion}").inside {
sh 'npm ci'
sh 'npm run build'
}
}
```
### Use Shared Library
```groovy
@Library('my-shared-library') _
pipeline {
agent any
stages {
stage('Build') {
steps {
buildApp(nodeVersion: '20')
}
}
stage('Deploy') {
steps {
deployApp(environment: 'staging')
}
}
}
post {
failure {
notifySlack(channel: '#builds', status: 'FAILED')
}
}
}
```
## Scripted Pipeline
```groovy
node('linux') {
try {
stage('Checkout') {
checkout scm
}
stage('Build') {
docker.image('node:20').inside {
sh 'npm ci'
sh 'npm run build'
}
}
stage('Test') {
sh 'npm test'
}
if (env.BRANCH_NAME == 'main') {
stage('Deploy') {
sh './deploy.sh'
}
}
} catch (e) {
currentBuild.result = 'FAILURE'
throw e
} finally {
cleanWs()
}
}
```
## Plugin Management
### Essential Plugins
```groovy
// Install via Jenkins CLI or init.groovy.d
def plugins = [
'workflow-aggregator', // Pipeline
'git', // Git integration
'docker-workflow', // Docker Pipeline
'kubernetes', // Kubernetes agent
'credentials-binding', // Credentials
'blueocean', // Blue Ocean UI
'job-dsl', // Job DSL
'configuration-as-code' // JCasC
]
```
### Configuration as Code
```yaml
# jenkins.yaml
jenkins:
systemMessage: "Jenkins configured via JCasC"
numExecutors: 2
securityRealm:
local:
users:
- id: admin
password: ${ADMIN_PASSWORD}
authorizationStrategy:
globalMatrix:
permissions:
- "Overall/Administer:admin"
- "Overall/Read:authenticated"
credentials:
system:
domainCredentials:
- credentials:
- usernamePassword:
id: "docker-hub"
username: "user"
password: ${DOCKER_PASSWORD}
```
## Multibranch Pipeline
```groovy
// Automatically discovers branches with Jenkinsfile
// Configure in Jenkins UI: New Item > Multibranch Pipeline
// Branch-specific behavior in Jenkinsfile
pipeline {
agent any
stages {
stage('Deploy') {
when {
anyOf {
branch 'main'
branch 'release/*'
}
}
steps {
sh './deploy.sh'
}
}
}
}
```
## Common Issues
### Issue: Pipeline Syntax Errors
**Problem**: Jenkinsfile fails to parse
**Solution**: Use Pipeline Syntax generator in Jenkins UI, validate with `jenkins-cli`
### Issue: Agent Not Connecting
**Problem**: Build agents disconnect
**Solution**: Check agent logs, verify network connectivity, increase timeout settings
### Issue: Out of Memory
**Problem**: Jenkins crashes or builds fail with OOM
**Solution**: Increase heap size in `JAVA_OPTS`, clean up old builds
## Best Practices
- Use declarative pipelines for most use cases
- Implement shared libraries for reusable code
- Store Jenkinsfile in source control
- Use credentials plugin for secrets management
- Implement proper cleanup in post blocks
- Configure build retention policies
- Use Blue Ocean for modern UI experience
## Related Skills
- [github-actions](../github-actions/) - GitHub native CI/CD
- [kubernetes-ops](../../orchestration/kubernetes-ops/) - K8s deployment target
- [docker-management](../../containers/docker-management/) - Container builds
© devops-skills · MIT · BagelHole/DevOps-Security-Agent-Skills