您还在通过 SSH 手动部署 Java 应用吗?
\n\n如果您曾经手动配置过生产环境中的 Java 项目——执行 mvn clean install,通过 scp 上传到服务器,终止进程,再重新启动——您一定深有体会:看似一切正常,但每次部署都像在挑战大 Boss。忘记一个标志位,搞错一个 Java 版本,应用就会崩溃,而您会在凌晨 3 点收到“服务器无响应”的消息。
今天,我们将一起探讨如何从零构建一个 Java CI/CD 管道。无论您使用的是 Spring Boot、Micronaut 还是经典的 Java EE,这个管道都能节省您的精力和时间。我们将使用 Jenkins、Maven、Docker 和 GitHub。一切都是实战:包含代码、配置和真实示例。
\n\n\n\n
什么是 CI/CD?为什么 Java 开发者需要它?
\n\nCI/CD(持续集成/持续交付)不仅仅是一个流行词。它是一个流程,能将您的代码从“临时拼凑”转变为“在服务器上稳定运行”,而无需您手动干预。
\n\n- \n
- 持续集成 — 每次提交代码都会自动构建和测试。如果测试失败,您会立即得知,而不是一周后才发现。 \n
- 持续交付 — 构建成功后,代码会自动部署到测试或生产服务器上。 \n
这对 Java 尤为重要:通过 Maven/Gradle 构建、运行单元测试和集成测试、检查代码风格——所有这些都可以而且应该自动化。否则,您将把时间浪费在重复性工作上,而不是编写新功能。
\n\n\n\n
步骤 1:环境准备——我们需要什么
\n\n在编写管道之前,让我们确保拥有所有必要的工具。我们的 Java CI/CD 管道 需要:
\n\n- \n
- GitHub(或 GitLab/Bitbucket)——存放代码的仓库。 \n
- Jenkins——自动化服务器。可以在本地或 VPS 上搭建。 \n
- Maven——Java 项目构建工具。 \n
- Docker——用于应用容器化。 \n
- 服务器(或云平台)——部署目标。 \n
在 Ubuntu 上安装 Jenkins(如果您使用其他操作系统也没关系,原理相同):
\n\nsudo apt update\nsudo apt install openjdk-11-jdk\nwget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -\nsudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'\nsudo apt update\nsudo apt install jenkins\nsudo systemctl start jenkins\n\n\n安装完成后,打开 http://您的服务器:8080 并进行初始配置。别忘了安装插件:Git、Maven Integration、Docker Pipeline、Blue Ocean(用于美观的界面)。
\n\n
步骤 2:编写一个简单的 Java 项目(Spring Boot)
\n\n为了有东西可以练习,我们创建一个最小的 Spring Boot 服务。如果您已有项目,可以跳过此步骤。
\n\n// Main.java\npackage com.example.demo;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@SpringBootApplication\n@RestController\npublic class DemoApplication {\n\n public static void main(String[] args) {\n SpringApplication.run(DemoApplication.class, args);\n }\n\n @GetMapping("/")\n public String hello() {\n return "Hello from CI/CD pipeline!";\n }\n}\n\n\n别忘了包含依赖的 pom.xml 文件。通常使用 Spring Boot starter 和 Maven compiler 插件。这就是我们的测试项目。
\n\n
步骤 3:创建 Jenkinsfile——管道的核心
\n\nJenkinsfile 是一个声明式