jenkins – skill DevOps & Hạ tầng cho agent AI
Tạo và quản lý pipeline CI/CD trên Jenkins, cấu hình agent, quản lý plugin và tự động hóa build.
Cài skill jenkins bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/jenkins-fecd7.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /jenkins – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/jenkins-fecd7.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $jenkins – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/jenkins-fecd7.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /jenkins – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/jenkins-fecd7.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /jenkins – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
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
Controller, agent and secret scope
Verify the current Jenkins release's supported Java version and plugin compatibility; Java 11 is not a universal current requirement. Isolate untrusted PR builds from controller/admin credentials and production-capable agents. The privileged docker:dind example is an exceptional host-risk configuration, not a secure default; prefer a reviewed isolated builder. Branch conditions alone are not deploy authorization or proof the source is trusted. Scope credentials to the smallest trusted stage, never interpolate secrets into URLs/arguments or shared logs, and obtain applicable deployment/notification authority. Pin reviewed agent images and shared-library revisions.
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:
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
pipeline {
agent {
docker {
image 'node:20'
args '-v /tmp:/tmp'
}
}
stages {
stage('Build') {
steps {
sh 'npm ci && npm run build'
}
}
}
}Kubernetes Agent
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
pipeline {
agent { label 'linux && docker' }
stages {
stage('Build') {
steps {
sh 'make build'
}
}
}
}Parameters
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
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'
)
]) {
// Use the reviewed Jenkins SCM credential binding for an approved push.
// Never put the token into a remote URL or process arguments.
}
}
}
}
}Parallel Stages
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.yamlDefine Shared Step
// 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
@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
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
// 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
# 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
// 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:
… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- terraform-patterns – Skill và plugin agent cho Terraform (infrastructure-as-code) dùng với Claude Code…
- k8s-manifest-generator – Hướng dẫn từng bước tạo manifest Kubernetes sẵn sàng cho production, gồm Deployment…
- kubernetes-architect – Kiến trúc sư Kubernetes chuyên sâu, chuyên về hạ tầng cloud-native, quy trình GitOps…
- kubernetes-deployment – Quy trình triển khai Kubernetes để điều phối container, Helm chart, service mesh và cấu…
- kubernetes-hardening – Triển khai security context, Pod Security Standards và network policy cho Kubernetes.
- kubernetes-ops – Triển khai, mở rộng và quản lý khối lượng công việc Kubernetes.
- kustomize – Tùy chỉnh manifest Kubernetes mà không cần templating bằng Kustomize.
- langfuse – Chuyên gia về Langfuse - nền tảng observability LLM mã nguồn mở. Bao gồm tracing, quản…