Jenkins安装部署-260118

我爱海鲸 2026-01-18 19:02:57 暂无标签

简介ci、cd

从零开始搭建 Jenkins CI/CD 流水线:从安装到自动部署

 
在现代软件开发中,我们经常需要重复执行 “代码提交 -> 编译打包 -> 部署测试” 这一系列流程。如果每次都手动操作,不仅效率低下,还容易出错。为了解决这个问题,我们引入了 CI/CD(持续集成 / 持续交付)的理念。
 
Jenkins 是目前最流行的开源 CI/CD 自动化服务器。本文将带你从零开始,学习如何安装 Jenkins,配置环境,创建任务,并最终实现一个从 GitHub 拉取代码、自动构建 Spring Boot 项目并部署到远程服务器的完整流水线。
 

 

一、 Jenkins 简介与安装

 

1. 核心概念

 
Jenkins 是一个独立的 Java 程序,包含内置的 Jetty 服务器。它通过丰富的插件生态系统,支持各种构建工具(如 Maven, Gradle)和版本控制系统(如 Git, SVN)。
 

2. 环境准备

 
  • Java (JDK): Jenkins 对 Java 版本有严格要求。
    • Jenkins 2.357+ / 2.361+: 需要 Java 11 或 Java 17。
    • 旧版本(如 2.303.x): 支持 Java 8。
     
  • 操作系统: Windows, Mac, Linux 均可。
 

3. 安装方式

 
Jenkins 提供了多种安装方式,这里推荐两种最常用的:
 

方式 A:使用 WAR 包(跨平台通用)

 
这是最灵活的方式,适用于任何有 Java 环境的机器。
 
  1. 下载 jenkins.war 文件。
  2. 在命令行执行:
    bash
     
    运行
     
     
     
     
    java -jar jenkins.war --httpPort=8080
    
     
     
  3. 访问 http://localhost:8080,根据提示输入初始密码(通常在 ~/.jenkins/secrets/initialAdminPassword)。
 

方式 B:使用 Docker(推荐学习 / 测试)

 
使用 Docker 可以避免环境依赖问题,且数据持久化方便。
 
  1. 拉取镜像:
    bash
     
    运行
     
     
     
     
    docker pull jenkins/jenkins:lts
    
     
     
  2. 创建网络(方便与其他容器通信):
    bash
     
    运行
     
     
     
     
    docker network create jenkins-net
    
     
     
  3. 运行容器:
    bash
     
    运行
     
     
     
     
    docker run -d --name jenkins \
      --network jenkins-net \
      -p 8080:8080 -p 50000:50000 \
      -v jenkins_home:/var/jenkins_home \
      jenkins/jenkins:lts
    
     
     
 

 

二、 初识 Jenkins 界面与任务创建

 

1. 插件安装

 
首次登录后,建议安装 “推荐的插件”。如果遇到网络问题导致安装失败,可以后续在 “系统管理 -> 插件管理” 中手动搜索安装,或者配置国内镜像源。
 

2. 创建第一个 Freestyle 任务

 
Freestyle(自由风格)项目适合简单的任务。
 
  1. 点击 “新建任务”,输入名称(建议不要有空格),选择 “自由风格软件项目”。
  2. 构建步骤: 选择 “执行 Shell”(Linux/Mac)或 “执行 Windows 批处理命令”。
    • 示例命令:
      bash
       
      运行
       
       
       
       
      echo "Hello Jenkins"
      echo "Build Success" > result.txt
      
       
       
     
  3. 点击 “立即构建”,在 “控制台输出” 中查看结果。
 

3. 目录结构简介

 
Jenkins 的所有数据(配置、工作空间、插件)都存储在 JENKINS_HOME 目录下:
 
  • jobs/: 存放所有任务的配置。
  • workspace/: 任务的工作目录,代码会拉取到这里。
  • plugins/: 存放已安装的插件(.jpi 文件)。
 

 

三、 构建触发器 (Triggers)

 
触发器决定了 Jenkins 何时开始构建。
 
  1. 定时构建 (Build periodically):
    • 类似 Linux 的 Cron 表达式。
    • 语法: 分 时 日 月 周
    • 示例: H/3 * * * * (每 3 分钟构建一次)。
     
  2. 轮询 SCM (Poll SCM):
    • 定时检查代码仓库是否有更新。如果有新提交,才触发构建。
    • 示例: H/5 * * * * (每 5 分钟检查一次)。
     
  3. Webhook (远程触发):
    • 代码提交时,由 GitHub/GitLab 主动发送请求通知 Jenkins 构建。最实时、高效。
     
 

 

四、 进阶:Pipeline (流水线)

 
Pipeline 是 Jenkins 的核心功能,它允许你用代码(Groovy 语言)来定义整个构建流程。
 

1. Pipeline 语法

 
有两种语法风格:
 
  • 声明式 (Declarative): 推荐,结构清晰,易于阅读。
  • 脚本式 (Scripted): 灵活性高,类似传统编程。
 
声明式示例:
 
groovy
 
 
 
 
 
pipeline {
    agent any // 在任何可用节点上运行
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                // sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}
 
 

2. Blue Ocean 插件

 
安装 Blue Ocean 插件可以获得现代化的 UI 界面,可视化展示流水线的执行进度。
 

 

五、 实战:自动化构建与部署 Spring Boot 项目

 
下面我们将演示一个完整的 CI/CD 流程:
 
  1. 从 GitHub 拉取 Spring Boot 代码。
  2. 使用 Maven 构建项目。
  3. 通过 SSH 将 Jar 包部署到远程服务器。
 

步骤 1:准备代码与仓库

 
在 GitHub 上创建一个仓库,并推送你的 Spring Boot 项目代码。
 

步骤 2:配置 Jenkins 凭证

 
Jenkins 需要权限拉取代码和登录服务器。
 
  1. 配置 GitHub 凭证:
    • SSH 密钥: 在 Jenkins 服务器(或容器)上生成 SSH Key (ssh-keygen), 将公钥添加到 GitHub 的 Settings -> SSH and GPG keys
    • 或者 Personal Access Token (PAT): 在 GitHub 设置中生成 Token,在 Jenkins 中添加 “用户名 / 密码” 凭证,密码填 Token。
     
  2. 配置服务器 SSH 免密登录:
    • 在 Jenkins 容器内执行 ssh-copy-id user@remote-server-ip,将 Jenkins 的公钥复制到目标服务器,实现免密登录。
     
 

步骤 3:配置全局工具

 
进入 系统管理 -> 全局工具配置:
 
  • JDK: 自动安装或指定路径。
  • Maven: 自动安装或指定路径。
 

步骤 4:编写 Jenkinsfile

 
在项目根目录创建 Jenkinsfile,这是流水线即代码的关键。
 
groovy
 
 
 
 
 
pipeline {
    agent any
    tools {
        maven "Maven 3.9.5" // 名称需与全局配置一致
        jdk "JDK 17"
    }
    stages {
        stage('Checkout') {
            steps {
                git url: 'git@github.com:your-username/your-repo.git', branch: 'main'
                echo '代码拉取成功'
            }
        }
        stage('Build') {
            steps {
                sh 'mvn clean package -DskipTests'
                echo '项目构建成功'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
                echo '测试完成'
            }
        }
        stage('Deploy') {
            steps {
                echo '开始部署...'
                // 1. 停止远程服务器旧应用 (假设使用脚本 stop.sh)
                sh 'ssh user@192.168.1.100 "~/scripts/stop.sh"'
                
                // 2. 上传新 Jar 包
                sh 'scp target/*.jar user@192.168.1.100:/opt/app/'
                
                // 3. 启动新应用
                sh 'ssh user@192.168.1.100 "~/scripts/start.sh"'
                
                echo '部署成功!'
            }
        }
    }
}
 
 

步骤 5:创建 Pipeline 任务

 
  1. 新建任务,选择 “流水线”
  2. 在 “流水线” 部分,选择 “Pipeline script from SCM”
  3. SCM 选择 Git,填写仓库地址,并选择之前配置的凭证。
  4. 脚本路径填写 Jenkinsfile
  5. 保存并点击 “立即构建”。
 

步骤 6:验证结果

 
构建成功后,访问远程服务器的端口(例如 http://server-ip:8081),你应该能看到最新的应用界面。
 

 

六、 扩展:节点与分布式构建 (Agents)

 
当项目增多,单台 Jenkins 服务器(Master)可能会不堪重负。此时可以使用 Agent (从节点) 来分担工作。
 
  1. Master: 负责调度和管理。
  2. Agent: 负责实际执行构建任务。
 
配置 Docker Agent (动态节点):
 
  1. 安装 DockerDocker Pipeline 插件。
  2. 系统管理 -> 节点和云管理 -> 配置云 中添加 Docker 云。
  3. 指定 Docker Host URL(如 tcp://docker:2375)。
  4. 配置 Agent 模板,使用官方镜像 jenkins/inbound-agent
  5. 在 Pipeline 中指定标签:
    groovy
     
     
     
     
     
    agent {
        label 'docker-agent'
    }
    
     
     
 
这样,每次构建时,Jenkins 会自动启动一个 Docker 容器作为 Agent,构建完成后自动销毁。
 

 

总结

 
通过本文的学习,你应该已经掌握了 Jenkins 的核心用法:
 
  • 如何安装和初始化 Jenkins。
  • 如何使用 Freestyle 项目进行简单的任务自动化。
  • 如何使用 Pipeline 定义复杂的构建流程。
  • 如何结合 GitHub 和 SSH 实现自动部署。
 
Jenkins 的生态非常庞大,建议大家在实际项目中根据需求探索更多插件(如 SonarQube 代码质量检查、Docker 镜像构建等),打造属于自己的 DevOps 平台。

你好:我的2025