Jenkins 基础教程
下面是一份 超全、结构清晰、可直接收藏的 Jenkins 全套知识体系,包括概念、安装、Pipeline、流水线最佳实践、运维、集群、故障排查等,让你一次性吃透 Jenkins。
Jenkins 是最常用的 CI/CD 持续集成与持续交付平台
特点:
- 免费、开源
- 插件生态超丰富
- 支持 Pipeline as Code(Jenkinsfile)
- 支持分布式构建(Master + Agent)
| 概念 | 说明 |
|---|---|
| Master(Controller) | 负责 UI、管理任务、调度构建 |
| Agent(Worker) | 实际执行构建 |
| Job / Project | 构建任务,Freestyle/ Pipeline |
| Pipeline | 用 Groovy DSL 写的流水线 |
| Stage | 流水线的大步骤 |
| Step | 每一步执行的命令 |
| Node | 指定构建在哪个 agent 上跑 |
| Label | 给 agent 打标签,让 pipeline 选择 |
docker run -d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
jenkins/jenkins:lts
apt update
apt install openjdk-17-jdk -y
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb http://pkg.jenkins.io/debian binary/ > /etc/apt/sources.list.d/jenkins.list
apt update
apt install jenkins
systemctl enable --now jenkins
使用 Helm:
helm repo add jenkins https://charts.jenkins.io
helm install my-jenkins jenkins/jenkins
| 插件 | 用途 |
|---|---|
| Pipeline | Jenkinsfile 流水线基础 |
| Git / GitHub | Git SCM 支持 |
| Credentials Binding | 凭证绑定 |
| Blue Ocean | 更直观的 UI |
| Docker Pipeline | 使用 Docker |
| Kubernetes Plugin | 动态 Agent |
| Email-ext | 邮件通知 |
| AnsiColor | 控制台彩色输出 |
pipeline {
agent any
stages {
stage('Build') {
steps {
echo "Building..."
}
}
stage('Test') {
steps {
echo "Testing..."
}
}
stage('Deploy') {
steps {
echo "Deploying..."
}
}
}
}
agent { label 'linux' }
stage('Test on different OS') {
matrix {
axes {
axis { name 'OS'; values 'linux', 'windows' }
}
agent { label "${OS}" }
stages {
stage('Run Tests') {
steps {
echo "Run test on ${OS}"
}
}
}
}
}
environment {
VERSION = "1.0.0"
}
withCredentials([string(credentialsId: 'github-token', variable: 'TOKEN')]) {
sh "git clone https://token:${TOKEN}@github.com/xxx/xxx.git"
}
pipeline {
agent any
stages {
stage('Docker Build') {
steps {
script {
docker.build("myapp:${BUILD_NUMBER}")
}
}
}
}
}
pipeline {
agent any
stages {
stage('Checkout') {
steps { checkout scm }
}
stage('Build') {
steps {
sh "python3 -m build"
}
}
stage('Unit Test') {
steps {
sh "pytest tests/"
}
}
stage('Docker Build & Push') {
steps {
script {
docker.withRegistry("https://registry.xxx.com", "harbor-cred") {
def image = docker.build("myapp:${env.BUILD_NUMBER}")
image.push()
}
}
}
}
stage('Deploy to K8s') {
steps {
sh """
kubectl set image deployment/myapp myapp=myapp:${BUILD_NUMBER}
kubectl rollout status deployment/myapp
"""
}
}
}
}
性能优化建议:
- Jenkins Home 放 SSD
- 定期清理构建历史
- 插件数量控制在 < 40
- 使用专门的 agent 执行重任务(如 Docker)
- JVM 参数调整(如 heap 2-4G)
示例 /etc/default/jenkins:
JAVA_ARGS="-Xms1g -Xmx4g -XX:+UseG1GC"
Agent 连接方式:
- SSH
- JNLP
- Docker Agent
- Kubernetes 动态 Agent(企业最推荐)
K8s 动态 Agent 示例:
spec:
containers:
- name: jnlp
image: jenkins/inbound-agent
args: ['$(JENKINS_SECRET)', '$(JENKINS_NAME)']
原因:
- Agent 离线
- 网络问题
- Workspace 被锁死
解决:
Manage Jenkins -> Nodes -> 重连 Agent
原因:
- 凭证错误
- Token 过期
- Git 服务器网络问题
解决:
- 检查 Credentials
- 重新绑定 Token
解决:
- 查看 /var/jenkins_home/logs/all*
- 禁用冲突插件
- 升级 Jenkins 核心版本
- 所有 Job 用 Pipeline,不用 Freestyle
- Docker 里执行构建,保持环境一致
- 将 Jenkinsfile 放入 Git
- 使用 Kubernetes 动态 Agent(成本最低)
- 凭证统一放 Credentials,不写死
- Job 分阶段,可观察性强
- 通知钉钉 / 企业微信 / Slack