Jenkins CI/CD 完全实战指南:自动化部署一条龙

Jenkins 简介

Jenkins 是最流行的开源 CI/CD 工具,能够自动化构建、测试和部署流程。本文详细介绍 Jenkins 的安装、配置和实战用法。

Jenkins 核心概念

  • Job/Project - 构建任务
  • Build - 一次具体的构建执行
  • Pipeline - 流水线,定义完整的构建流程
  • Stage - 流水线的阶段
  • Step - 具体的构建步骤

Jenkins 安装

方式一:Docker 安装(推荐)

docker run -d -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  --name jenkins \
  jenkins/jenkins:lts

方式二:Ubuntu/Debian 安装

# 添加 Jenkins 仓库
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian binary/ > /etc/apt/sources.list.d/jenkins.list'

# 安装 Jenkins
sudo apt update
sudo apt install jenkins

# 启动 Jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins

Jenkins Pipeline 语法

Pipeline 是 Jenkins 2.0 最重要的功能,使用声明式语法:

pipeline {
    agent any
    
    environment {
        DOCKER_IMAGE = 'myapp'
        DOCKER_REGISTRY = 'registry.example.com'
    }
    
    stages {
        stage('Checkout') {
            steps {
                checkout scm
                sh 'git log -1 --oneline'
            }
        }
        
        stage('Build') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        
        stage('Test') {
            steps {
                sh 'npm test'
            }
            post {
                always {
                    junit 'test-results/*.xml'
                }
            }
        }
        
        stage('Build Docker Image') {
            steps {
                sh '''
                    docker build -t $DOCKER_IMAGE:$BUILD_NUMBER .
                    docker tag $DOCKER_IMAGE:$BUILD_NUMBER $DOCKER_IMAGE:latest
                '''
            }
        }
        
        stage('Deploy to Staging') {
            when {
                branch 'develop'
            }
            steps {
                sh 'kubectl apply -f k8s/staging/'
            }
        }
        
        stage('Deploy to Production') {
            when {
                branch 'main'
            }
            steps {
                input message: 'Deploy to Production?', ok: 'Deploy'
                sh 'kubectl apply -f k8s/production/'
            }
        }
    }
    
    post {
        success {
            echo 'Build Successful!'
            emailext subject: 'Build Success', body: 'Build #${env.BUILD_NUMBER} succeeded'
        }
        failure {
            echo 'Build Failed!'
            emailext subject: 'Build Failed', body: 'Build #${env.BUILD_NUMBER} failed'
        }
    }
}

Jenkinsfile 最佳实践

  • 使用声明式语法 - 更易读和维护
  • 环境变量分离 - 不同环境使用不同配置
  • 缓存依赖 - 加速构建
  • 并行执行 - 减少构建时间
  • 超时设置 - 防止构建挂起

Credentials 管理

在 Jenkins 中安全管理敏感信息:

pipeline {
    environment {
        DOCKER_CREDS = credentials('docker-hub-credentials')
    }
    
    stages {
        stage('Push Image') {
            steps {
                sh '''
                    echo $DOCKER_CREDS_USR
                    echo $DOCKER_CREDS_PSW | docker login -u $DOCKER_CREDS_USR --password-stdin
                    docker push myapp:latest
                '''
            }
        }
    }
}

分布式构建

Jenkins Master-Slave 架构:

# 在 Slave 节点执行
java -jar agent.jar -url http://master:8080/ -secret [secret-token] -name agent1
pipeline {
    agent {
        label 'docker-build'
    }
    stages {
        stage('Build') {
            steps {
                sh 'docker build .'
            }
        }
    }
}

Webhook 集成

配置 GitHub Webhook 触发构建:

# 在 GitHub 仓库设置
# Settings -> Webhooks -> Add webhook
# Payload URL: http://your-jenkins:8080/github-webhook/
# Content type: application/json
# Events: Push events

常用插件推荐

  • Pipeline - 流水线支持
  • Git - Git 版本控制
  • Docker Pipeline - Docker 构建支持
  • Kubernetes - K8s 部署支持
  • Credentials Binding - 凭据管理
  • JUnit - 测试报告
  • Email Extension - 邮件通知

总结

Jenkins 是企业级 CI/CD 的首选工具,掌握 Jenkins Pipeline 语法和最佳实践,能够显著提升开发效率,实现持续集成和持续部署。


参考资源:Jenkins 官方文档

发表回复

后才能评论