Jenkins 详解与实战:从安装到部署,打造你的自动化流水线

一、什么是 Jenkins?

Jenkins 是一个开源的持续集成和持续交付(CI/CD)工具,广泛用于软件开发中的自动化构建、测试和部署流程。它支持数百个插件,几乎可以与所有技术栈无缝集成,是 DevOps 流程中不可或缺的一环。

核心功能:

功能

描述

持续集成(CI)

自动化代码合并后的构建和测试流程

持续交付 / 部署(CD)

自动将代码部署到测试、预发布或生产环境

任务调度

支持定时任务、触发式任务(如 Git 提交后自动构建)

插件生态丰富

支持 Git、Docker、Kubernetes、SonarQube 等主流工具


二、Jenkins 的优势

  • ✅ 开源免费,社区活跃
  • ✅ 跨平台运行(Windows、Linux、macOS)
  • ✅ 可视化界面,操作简单
  • ✅ 支持多种 SCM(如 GitHub、GitLab、SVN)
  • ✅ 易于扩展,插件生态强大
  • ✅ 支持分布式构建(多节点并行)

三、Jenkins 安装指南(以 Ubuntu 为例)

1. 安装 Java 环境(Jenkins 依赖)

sudo apt update
sudo apt install openjdk-17-jdk -y
java -version

Jenkins 推荐使用 Java 11 或更高版本。

2. 添加 Jenkins 仓库并安装

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt update
sudo apt install jenkins -y

3. 启动 Jenkins 服务

sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo systemctl status jenkins

4. 访问 Jenkins Web 界面

打开浏览器访问:

http://<服务器IP>:8080

首次登录时需要查看管理员密码:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

按照提示安装推荐插件,并创建管理员账户。


四、Jenkins 基础配置

1. 安装常用插件(建议)

进入 Jenkins → Manage Jenkins → Plugins → Available plugins

搜索并安装以下插件:

  • Git plugin
  • Docker plugin
  • Pipeline
  • GitHub Integration
  • Credentials Binding
  • Email Extension
  • Blue Ocean(可视化流水线编辑器)

2. 配置全局工具

进入 Manage Jenkins → Global Tool Configuration

  • JDK:添加本地 JDK 或通过 Jenkins 下载
  • Maven:添加 Maven 版本
  • NodeJS:如有前端项目可配置 Node.js 版本
  • Git:确保已安装 Git 并配置路径

五、Jenkins 实战:创建第一个 CI/CD 流水线

场景说明:部署一个 Spring Boot 应用

技术栈:
  • Spring Boot(Java)
  • Maven 构建
  • Git 仓库托管(GitHub)
  • 使用 Jenkins Pipeline 自动化构建和部署
  • 部署方式:Shell 脚本重启应用

1. 准备工作

(1) 将 Spring Boot 项目推送到 GitHub

确保 pom.xml 存在且项目可通过 mvn package 编译打包。

(2) 在服务器上准备好部署目录
mkdir -p /opt/myapp
cd /opt/myapp
touch restart.sh
chmod +x restart.sh
(3) restart.sh 内容示例:
#!/bin/bash
APP_NAME=myapp.jar
PID=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}')

if [ -z "$PID" ]; then
    echo "$APP_NAME is not running."
else
    echo "Stopping $APP_NAME with PID: $PID"
    kill -9 $PID
fi

cp /home/jenkins/workspace/myapp/target/*.jar /opt/myapp/
nohup java -jar /opt/myapp/*.jar > app.log &

2. 创建 Jenkins Pipeline 任务

(1) 新建任务 → 输入名称 → 选择 “Pipeline”
(2) 配置 Git 仓库地址
  • Repository URL:https://github.com/yourname/yourrepo.git
  • Credentials:添加 GitHub 账号凭据(可在 Jenkins 中配置)
(3) Pipeline 脚本内容如下:
pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/yourname/yourrepo.git'
            }
        }

        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }

        stage('Deploy') {
            steps {
                sh '/opt/myapp/restart.sh'
            }
        }
    }

    post {
        success {
            echo 'Build and deploy succeeded!'
        }
        failure {
            echo 'Build or deploy failed.'
        }
    }
}
(4) 保存并点击“立即构建”

六、进阶实战:结合 Docker 部署应用

场景升级:使用 Jenkins 构建镜像并部署到 Docker 容器

修改 Jenkinsfile:
pipeline {
    agent any

    environment {
        IMAGE_NAME = "my-springboot-app"
        CONTAINER_NAME = "app-container"
    }

    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/yourname/yourrepo.git'
            }
        }

        stage('Build JAR') {
            steps {
                sh 'mvn clean package'
            }
        }

        stage('Build Docker Image') {
            steps {
                sh """
                    docker build -t ${IMAGE_NAME} .
                """
            }
        }

        stage('Stop & Remove Old Container') {
            steps {
                sh """
                    docker stop ${CONTAINER_NAME} || true
                    docker rm ${CONTAINER_NAME} || true
                """
            }
        }

        stage('Run New Container') {
            steps {
                sh """
                    docker run -d --name ${CONTAINER_NAME} -p 8080:8080 ${IMAGE_NAME}
                """
            }
        }
    }
}
对应的 Dockerfile 示例:
FROM openjdk:17-jdk-slim
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

七、Jenkins + GitHub Webhook 自动触发构建

步骤:

  1. Jenkins 中安装 GitHub Plugin
  2. 在 GitHub 项目中设置 Webhook:
    • Payload URL: http:///github-webhook/
    • Content type: application/json
    • Events: Just the push event
  1. Jenkins Pipeline 设置为“GitHub hook trigger for GITScm polling”
  2. 每次 Push 到 GitHub 主分支,Jenkins 即可自动触发构建

八、Jenkins 最佳实践建议

类别

建议

权限管理

使用 Role-based Authorization Strategy 插件进行权限控制

多人协作

创建共享用户组、限制敏感操作权限

日志审计

定期备份 Jenkins Home 目录 /var/lib/jenkins

分布式构建

配置 Jenkins Agent(节点),提升并发效率

安全加固

使用 HTTPS、定期更新插件、关闭匿名访问

CI/CD 流水线

使用 Declarative Pipeline 语法统一规范

通知机制

配置邮件通知、Slack、企业微信等通知渠道


九、Jenkins 部署实战案例汇总

项目类型

部署方式

Jenkins Pipeline 示例

Spring Boot

Maven + Shell/Docker

✔️ 已展示

React/Vue 前端

npm + Nginx

✔️ 可通过 Node.js 插件实现

Python Flask 应用

pip + Gunicorn + Docker

✔️ 可自定义 Dockerfile

微服务架构

Jenkins + Kubernetes

✔️ 使用 Kubernetes 插件

移动端 App

Jenkins + Android SDK/iOS 打包工具

✔️ 支持 Gradle/Xcode 构建


十、学习路线图(建议)

阶段

学习内容

目标

第1阶段

Jenkins 安装、基础配置

熟悉 Jenkins UI 和基本操作

第2阶段

创建 Job、Shell 脚本执行

能手动执行构建任务

第3阶段

Pipeline 脚本编写

掌握声明式流水线写法

第4阶段

Git 集成、Webhook 触发

实现自动构建

第5阶段

Docker 集成

构建镜像并部署容器

第6阶段

邮件通知、权限管理

提升安全性和可用性

第7阶段

与 Kubernetes、SonarQube 等集成

进阶云原生 CI/CD


十一、推荐学习资源

官方文档与书籍

  • Jenkins User Documentation
  • 《Jenkins 2.x 实践指南》
  • 《持续交付:使用 Jenkins 2 实现自动化部署》

学习网站

  • Jenkins 中文社区 - Jenkins 中文社区
  • https://github.com/marketplace?type=actions

插件推荐

  • Git
  • Docker
  • Pipeline
  • GitHub Integration
  • Blue Ocean
  • Email Extension
  • Credentials Binding
  • SSH Pipeline Steps

十二、总结

Jenkins 是一款强大的 CI/CD 工具,掌握它可以大幅提升软件开发效率和部署可靠性。从安装配置、流水线编写,到结合 Git、Docker 实现自动化构建与部署,你已经掌握了 Jenkins 的核心技能。

你可能感兴趣的:(jenkins,自动化,运维)