Maven 和 CI/CD 集成:自动化构建与部署

server/2025/2/11 7:30:56/

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 CICircleCI

3. Maven 与 Jenkins 集成

3.1 在 Jenkins 配置 Maven

步骤 1:安装 Jenkins
docker run -d -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

或者从 Jenkins 官网 下载并安装。

步骤 2:安装 Maven 插件
  1. 进入 Jenkins 管理页面http://localhost:8080
  2. 依次点击 Manage JenkinsManage Plugins
  3. Available Plugins 搜索 Maven Integration Plugin 并安装。
步骤 3:配置 Maven
  1. 进入 Manage JenkinsGlobal Tool Configuration
  2. 找到 Maven,点击 Add Maven
  3. 填写 Maven 名称,如 Maven 3.8.6
  4. 选择 Install automatically(可选)

3.2 创建 Maven 构建任务

步骤 1:创建新任务
  1. 进入 Jenkins Dashboard
  2. 点击 New Item
  3. 选择 Freestyle Project,输入项目名称,点击 OK
步骤 2:配置源码管理

Source Code Management 选择 Git

  • Repository URL:填写 Git 仓库地址(如 https://github.com/example/maven-project.git
  • Credentials(如有需要,添加 Git 凭据)
  • Branch:通常填写 maindevelop
步骤 3:配置构建步骤

BuildAdd 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

BuildGoals 填写:

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- deployvariables:MAVEN_CLI_OPTS: "-B -Dmaven.test.skip=true"MAVEN_IMAGE: "maven:3.8.6-jdk11"build:stage: buildimage: $MAVEN_IMAGEscript:- mvn clean package $MAVEN_CLI_OPTSartifacts:paths:- target/*.jartest:stage: testimage: $MAVEN_IMAGEscript:- mvn testdeploy:stage: deployimage: $MAVEN_IMAGEscript:- 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 Mavenon:push:branches: [ "main" ]pull_request:branches: [ "main" ]jobs:build:runs-on: ubuntu-lateststeps:- name: Checkout Repositoryuses: actions/checkout@v3- name: Setup JDKuses: actions/setup-java@v3with:java-version: '11'distribution: 'adopt'cache: maven- name: Build with Mavenrun: mvn clean package -DskipTests- name: Run Testsrun: 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: deployscript:- 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 installmvn 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 工作流!🚀


http://www.ppmy.cn/server/166693.html

相关文章

MYSQL学习笔记(七):新年第一篇之子查询

前言&#xff1a; 祝大家新年快乐 &#x1f386;​&#x1f386;​&#x1f386;​&#x1f386;​&#x1f386;​&#x1f386;​学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门…

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…

DVWA靶场

Brute Force(暴力破解) Low 使用BP抓包进行暴力破解&#xff0c;使用集群炸弹&#xff0c;导入字典&#xff0c;对用户名和密码进行破解。如下图。攻击后查看长度判断正确性&#xff0c;找到账号和密码。 源代码解析&#xff1a;点击此按钮即可查看后端源代码。 ​ <?php…

C++20新特性

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 C20 是 C 标准中的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;包括模块&#xff08;Modules&#xff09;、协程…

unity视频在场景中的使用

&#xff08;一&#xff09;软件操作在平面上显示视频播放 1.创建渲染器纹理 2.创建平面 3.在平面上添加Video player 4.视频拖拽到Video player 5.渲染模式选择渲染器纹理 6.把纹理拖到目标纹理上 7.把纹理拖到平面上就可以了 然后运行项目 8.结果 &#xff08;二&#…

Axios 的原理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Vue】3.0利用远程仓库自定义项目脚手架

目录 介绍正文目标依赖实现运行 介绍 项目脚手架&#xff08;Project Scaffolding&#xff09;是一种用于快速生成项目基础结构的工具或模板&#xff0c;类似于建筑中的“脚手架”——为项目搭建一个标准化的初始框架&#xff0c;帮助开发者省去重复性配置工作&#xff0c;专注…

基于Ubuntu Ollama 部署 DeepSeek-R132B 聊天大模型(附带流式接口调用示例)

最近 DeepSeek出来了&#xff0c;很火&#xff0c;说是能跟ChatGpt o1 媲美&#xff0c;结果&#xff0c;用了DeepSeek的官方服务&#xff0c;提示“服务器繁忙 请稍后再试。”&#xff0c;我就想&#xff0c;算了&#xff0c;自己部署个吧。 我这个是基于docker部署的&#x…