1. Maven 在 CI/CD 中的作用
Maven 是 Java 生态中的标准构建工具,在 持续集成(CI) 和 持续部署(CD) 过程中,Maven 负责:
- 自动化构建:编译 Java 代码、运行测试、打包 JAR/WAR。
- 依赖管理:从 Maven 仓库下载、管理依赖,确保版本一致性。
- 测试执行:执行单元测试(JUnit、TestNG)和集成测试。
- 部署发布:将构建产物上传到远程仓库(如 Nexus)或部署到应用服务器。
2. CI/CD 工具概述
CI/CD 工具用于自动化构建、测试和部署,常见工具包括:
- Jenkins(最常见的 CI/CD 服务器)
- GitHub Actions(GitHub 原生 CI/CD)
- GitLab CI/CD(GitLab 内置 CI/CD)
- Travis CI、CircleCI 等
3. Maven 与 Jenkins 集成
3.1 在 Jenkins 配置 Maven
步骤 1:安装 Jenkins
docker run -d -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
或者从 Jenkins 官网 下载并安装。
步骤 2:安装 Maven 插件
- 进入 Jenkins 管理页面:
http://localhost:8080
- 依次点击
Manage Jenkins
→Manage Plugins
- 在
Available Plugins
搜索 Maven Integration Plugin 并安装。
步骤 3:配置 Maven
- 进入
Manage Jenkins
→Global Tool Configuration
- 找到 Maven,点击
Add Maven
- 填写 Maven 名称,如
Maven 3.8.6
- 选择
Install automatically
(可选)
3.2 创建 Maven 构建任务
步骤 1:创建新任务
- 进入
Jenkins Dashboard
- 点击
New Item
- 选择
Freestyle Project
,输入项目名称,点击OK
步骤 2:配置源码管理
在 Source Code Management
选择 Git:
- Repository URL:填写 Git 仓库地址(如
https://github.com/example/maven-project.git
) - Credentials(如有需要,添加 Git 凭据)
- Branch:通常填写
main
或develop
步骤 3:配置构建步骤
在 Build
→ Add build step
选择 Invoke top-level Maven targets
- Maven Version:选择
Maven 3.8.6
- Goals:
clean package
步骤 4:执行构建
点击 Build Now
,Jenkins 会执行 mvn clean package
进行构建。
3.3 在 Jenkins 实现自动部署
可以使用 mvn deploy
将构建产物(JAR/WAR)上传到远程仓库(如 Nexus),或者自动部署到服务器。
示例:上传构建产物到 Nexus
在 Build
→ Goals
填写:
clean deploy -DskipTests
配置 pom.xml
<distributionManagement>
<repository>
<id>nexus</id>
<url>http://nexus.company.com/repository/releases/</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<url>http://nexus.company.com/repository/snapshots/</url>
</snapshotRepository>
</distributionManagement>
在 settings.xml
配置 Nexus 登录信息
<servers>
<server>
<id>nexus</id>
<username>admin</username>
<password>password</password>
</server>
</servers>
构建后,Jenkins 会自动上传 JAR/WAR 文件到 Nexus 服务器。
4. Maven 与 GitLab CI/CD 集成
GitLab 提供 .gitlab-ci.yml
配置文件,实现自动化 CI/CD。
4.1 gitlab-ci.yml
配置
在项目根目录创建 .gitlab-ci.yml
:
stages:
- build
- test
- deploy
variables:
MAVEN_CLI_OPTS: "-B -Dmaven.test.skip=true"
MAVEN_IMAGE: "maven:3.8.6-jdk11"
build:
stage: build
image: $MAVEN_IMAGE
script:
- mvn clean package $MAVEN_CLI_OPTS
artifacts:
paths:
- target/*.jar
test:
stage: test
image: $MAVEN_IMAGE
script:
- mvn test
deploy:
stage: deploy
image: $MAVEN_IMAGE
script:
- mvn deploy -DskipTests
提交代码后,GitLab CI/CD 会执行 构建 → 测试 → 部署 流程。
5. Maven 与 GitHub Actions 集成
GitHub Actions 提供 .github/workflows/maven.yml
进行自动化构建。
5.1 配置 GitHub Actions
在 .github/workflows/maven.yml
编写:
name: Java CI with Maven
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Setup JDK
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn clean package -DskipTests
- name: Run Tests
run: mvn test
提交代码后,GitHub Actions 会自动执行 Maven 构建。
6. Maven 与 Docker 部署
在 CI/CD 流水线中,我们可以使用 Docker 来部署 Maven 构建的 JAR/WAR。
6.1 创建 Dockerfile
FROM openjdk:11
WORKDIR /app
COPY target/my-app.jar my-app.jar
CMD ["java", "-jar", "my-app.jar"]
6.2 在 GitLab CI/CD 或 GitHub Actions 中添加 Docker 部署
deploy:
stage: deploy
script:
- docker build -t my-app:latest .
- docker tag my-app:latest my-docker-registry.com/my-app:latest
- docker push my-docker-registry.com/my-app:latest
7. 总结
7.1 Maven 与 CI/CD 集成方式
工具 | 作用 |
---|---|
Jenkins | 触发 mvn clean package ,执行构建和自动部署 |
GitLab CI/CD | 通过 .gitlab-ci.yml 定义 mvn install 和 mvn deploy |
GitHub Actions | 通过 maven.yml 在 GitHub 上执行 Maven 构建 |
Docker | 将 Maven 构建产物封装成 Docker 镜像,部署到 K8s |
7.2 关键 CI/CD 命令
命令 | 作用 |
---|---|
mvn clean package |
清理、编译、测试、打包 |
mvn install |
安装到本地 Maven 仓库 |
mvn deploy |
部署到远程 Maven 仓库 |
mvn test |
运行单元测试 |
mvn verify |
运行集成测试 |
8. 结论
Maven 是 CI/CD 流水线的重要组成部分,它可以:
✅ 自动化构建
✅ 测试代码质量
✅ 自动化部署
✅ 与 Jenkins、GitLab CI/CD、GitHub Actions 无缝集成
掌握 Maven 与 CI/CD 的集成,可以帮助你实现高效、稳定的 DevOps 工作流!🚀