ToB企服应用市场:ToB评测及商务社交产业平台

标题: Maven 与持续集成(CI)/ 持续部署(CD)(一) [打印本页]

作者: 诗林    时间: 昨天 16:24
标题: Maven 与持续集成(CI)/ 持续部署(CD)(一)
一、弁言

在当今快节奏的数字化期间,软件开发范畴端庄历着前所未有的变革与发展。市场竞争日益猛烈,用户需求也变得更加多样化和个性化。在如许的配景下,软件开发团队面对着巨大的挑战,高效的开发和部署流程成为了决定项目成败的关键因素。
高效的开发流程可以或许显著提拔团队的工作服从,减少开发周期,让产品可以或许更快地推向市场,抢占先机。而可靠的部署流程则是保证软件质量和稳定性的重要保障,可以或许确保软件在各种情况下都能稳定运行,为用户提供良好的使用体验。
Maven 作为一款强盛的项目管理和构建工具,在 Java 开发范畴得到了广泛的应用。它通过简单的设置文件(pom.xml),就能帮助开发者轻松管理项目标依赖、构建和测试等过程,极大地提高了开发服从。而持续集成(CI)/ 持续部署(CD)则是当代软件开发中不可或缺的实践方法,它夸大频繁地将代码集成到共享仓库,并主动进行构建、测试和部署,从而实现快速、可靠的软件交付。
当 Maven 与 CI/CD 相结合时,可以或许发挥出巨大的优势。Maven 负责项目标构建和依赖管理,而 CI/CD 则负责主动化的流程编排和实验,两者相辅相成,共同为高效的软件开发和部署提供了有力的支持。本文将深入探究 Maven 与 CI/CD 的结合应用,帮助开发者更好地明白和把握这一强盛的技能组合,提拔软件开发的服从和质量。
二、Maven 底子

2.1 Maven 简介

Maven 是一个基于项目对象模子(Project Object Model,POM)概念的项目管理和构建主动化工具,重要用于 Java 项目,在 Java 开发范畴占据着举足轻重的地位 。它通过一个名为 pom.xml 的文件来管理项目标构建、依赖和文档等。通过在 pom.xml 中声明项目标依赖,Maven 会主动从中央仓库或其他设置的仓库中下载所需的库文件,极大地简化了依赖管理的过程。同时,Maven 定义了一套尺度的项目布局和构建生命周期,使得不同团队开发的项目具有同等的布局和构建方式,降低了学习成本,提高了团队协作服从。
2.2 焦点概念




2.3 安装与设置

  1. [/code] export MAVEN_HOME=/path/to/apache-maven-3.8.6
  2. export PATH=$MAVEN_HOME/bin:$PATH
  3. 设置完成后,在下令行中输入mvn -v,如果能精确输出版本信息,则说明 Maven 安装和情况变量设置乐成。
  4. 3. [b]本地仓库与镜像源设置[/b]:Maven 默认会将下载的依赖库存储在用户目次下的.m2/repository文件夹中,我们也可以自定义本地仓库的位置。在 Maven 安装目次的conf文件夹下,找到settings.xml文件,打开后找到<localRepository>标签,将其修改为你想要的本地仓库路径,比方:
  5. [code]
复制代码
<localRepository>D:\maven\repository</localRepository>
为了加快依赖库的下载速度,我们可以设置国内的镜像源,如阿里云的镜像源。在settings.xml文件中找到<mirrors>标签,添加以下内容:
  1. [/code] <mirror>
  2. <id>aliyunmaven</id>
  3. <name>阿里云公共仓库</name>
  4. <url>https://maven.aliyun.com/repository/public</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>
  7. [size=3]2.4 构建设置[/size]
  8. 在 Maven 项目中,焦点的构建设置文件是pom.xml。下面是一个简单的pom.xml文件示例,展示了怎样设置项目标基本信息、依赖和插件:
  9. [code]
复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目基本信息 -->
<groupId>com.example</groupId>
<artifactId>my-project</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<!-- 依赖设置 -->
<dependencies>
<!-- 添加JUnit依赖,用于单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 添加Spring Core依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
</dependencies>
<!-- 构建插件设置 -->
<build>
<plugins>
<!-- 设置Maven编译插件,指定编译版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
在上述示例中:



三、CI/CD 底子

3.1 CI/CD 概念



3.2 工具介绍





3.3 流程设置

下面以 GitHub 和 Jenkins 为例,介绍 CI/CD 流程的设置步调:
  1. [/code] git init
  2. git add.
  3. git commit -m "Initial commit"
  4. git remote add origin <你的GitHub仓库地址>
  5. git push -u origin master
  6. [list=1]
  7. [*][b]设置 Jenkins 服务器[/b]:安装 Jenkins,可以通过官方网站下载安装包进行安装。安装完成后,启动 Jenkins 服务,并通过欣赏器访问 Jenkins 的 Web 界面(通常是http://localhost:8080),按照提示完成初始化设置,如创建管理员用户等。
  8. [/list] [list=1]
  9. [*][b]安装插件[/b]:在 Jenkins 的管理界面中,进入 “插件管理” 页面,安装与 GitHub 集成相关的插件,如 “GitHub Plugin”。安装完成后,重启 Jenkins 使插件生效。
  10. [/list] [list=1]
  11. [*][b]设置 GitHub 凭据[/b]:在 Jenkins 的管理界面中,进入 “凭据” -> “系统” -> “全局凭据”,点击 “添加凭据”。选择 “用户名和暗码” 类型,输入你的 GitHub 账号和暗码,添加完成后保存。
  12. [/list] [list=1]
  13. [*][b]创建 Jenkins 使命[/b]:在 Jenkins 的主界面中,点击 “新建 Item”,输入使命名称,选择 “自由风格项目”,点击 “确定”。在使命设置页面中:
  14. [/list]
  15. [list]
  16. [*]
  17. [list]
  18. [*][b]源码管理[/b]:选择 “Git”,在 “Repository URL” 中输入你的 GitHub 仓库地址,在 “Credentials” 中选择刚刚添加的 GitHub 凭据。
  19. [/list]
  20. [/list]
  21. [list]
  22. [*]
  23. [list]
  24. [*][b]构建触发器[/b]:勾选 “Poll SCM”,并设置一个定时查抄代码变更的规则,比方*/5 * * * *表现每 5 分钟查抄一次。也可以选择其他触发方式,如 GitHub 的 Webhook 触发。
  25. [/list]
  26. [/list]
  27. [list]
  28. [*]
  29. [list]
  30. [*][b]构建情况[/b]:根据项目需求进行设置,比方设置 Maven 的情况变量等。
  31. [/list]
  32. [/list]
  33. [list]
  34. [*]
  35. [list]
  36. [*][b]构建步调[/b]:点击 “增加构建步调”,选择 “Execute shell”(在 Windows 系统中选择 “Execute Windows batch command”),输入构建下令,如mvn clean install。如果项目有测试步调,也可以在这里添加测试下令。
  37. [/list]
  38. [/list] [list=1]
  39. [*][b]保存并测试[/b]:完成上述设置后,点击 “保存”。此时,Jenkins 会根据你设置的触发器规则查抄 GitHub 仓库的代码变更,并在有变更时主动触发构建和测试流程。你可以在 Jenkins 的使命页面中查看构建和测试的结果。如果构建或测试失败,Jenkins 会给出详细的错误信息,方便你排查问题。
  40. [/list] [size=4]四、Maven 在 CI/CD 中的脚色[/size]
  41. [size=3]4.1 主动化构建[/size]
  42. 在 CI/CD 流程中,Maven 的主动化构建功能发挥着至关重要的作用。它通过定义的生命周期和插件机制,可以或许主动完成从代码编译、测试到打包的一系列操作,极大地提高了构建的服从和准确性。
  43. 当开发人员将代码提交到版本控制系统(如 Git)后,CI/CD 工具(如 Jenkins、GitLab CI/CD 等)会主动检测到代码变更,并触发 Maven 的构建流程。Maven 会读取项目标 pom.xml 文件,根据其中设置的信息,实验相应的构建使命。比方,实验mvn clean install下令,Maven 会首先实验 clean 阶段,删除之前构建生成的暂时文件和目次,确保构建情况的干净整齐;然后实验 compile 阶段,将 Java 源代码编译成字节码文件;接着实验 test 阶段,运行项目中的单元测试用例,验证代码的精确性;最后实验 install 阶段,将打包后的项目安装到本地 Maven 仓库中,供其他项目依赖使用。
  44. 在一个大型的 Java 项目中,可能包含多个模块,每个模块都有自己的 pom.xml 文件。Maven 可以通过多模块项目标构建方式,主动按照模块之间的依赖关系,依次构建各个模块,确保整个项目标构建过程井井有条地进行。这种主动化构建方式不仅减少了人工操作的繁琐和错误,还可以或许保证每次构建的同等性和可重复性,为后续的测试和部署提供了可靠的底子。
  45. [size=3]4.2 依赖管理[/size]
  46. Maven 的依赖管理功能是其在 CI/CD 中不可或缺的一部分,它可以或许确保项目依赖的同等性和稳定性。在项目开发过程中,通常会依赖大量的第三方库和框架,手动管理这些依赖不仅繁琐,而且容易出现版本辩论等问题。
  47. Maven 通过在 pom.xml 文件中声明依赖项,使用groupId、artifactId和version来唯一标识每个依赖,然后从设置的仓库(如中央仓库、本地仓库或自定义的远程仓库)中主动下载所需的依赖库。比方,当项目依赖 Spring 框架时,只必要在 pom.xml 中添加如下依赖设置:
  48. [code]
复制代码
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
Maven 就会主动下载 Spring 框架的相关 jar 包及其依赖的其他库,并将它们添加到项目标类路径中。
Maven 还支持依赖通报,即如果项目 A 依赖项目 B,而项目 B 又依赖项目 C,那么项目 A 会主动依赖项目 C。Maven 会主动解析和管理这些通报依赖,确保项目所需的所有依赖都能精确下载和使用。
在多模块项目中,Maven 提供了dependencyManagement元素,用于在父项目标 pom.xml 文件中会合管理依赖版本。子项目可以继承父项目标依赖管理设置,只需声明依赖的groupId和artifactId,无需重复指定版本号,如许可以有效避免子项目中依赖版本不同等的问题。比方:
  1. [/code] <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.springframework</groupId>
  5. <artifactId>spring-core</artifactId>
  6. <version>5.3.23</version>
  7. </dependency>
  8. </dependencies>
  9. </dependencyManagement>
  10. 当依赖出现辩论时,Maven 会遵照 “近来优先” 原则来解决辩论,即选择离当前项目近来的依赖版本。也可以通过在 pom.xml 中使用exclusions元向来排除特定的通报性依赖,以解决辩论问题。通过这些依赖管理机制,Maven 确保了项目在 CI/CD 过程中,无论在开发情况、测试情况照旧生产情况,所使用的依赖都是同等且稳定的,避免了因依赖问题导致的构建失败或运行时错误。
  11. [size=3]4.3 版本控制[/size]
  12. Maven 对项目版本的管理在 CI/CD 流程中起着关键作用,它可以或许清晰地标识项目标不同阶段和状态,方便团队协作和项目标发布管理。同时,在 CI/CD 中实现主动更新版本号,有助于实现主动化的版本管理和发布流程。
  13. 在 Maven 项目中,版本号通常在 pom.xml 文件的version元素中指定,比方:
  14. [code]
复制代码
<version>1.0.0</version>
常见的版本号格式遵照语义化版本控制(Semantic Versioning)规范,即MAJOR.MINOR.PATCH格式。其中,MAJOR表现不兼容的 API 更改;MINOR表现向下兼容的功能增加;PATCH表现向下兼容的 bug 修复。在项目开发过程中,还会使用快照版本(SNAPSHOT)来表现开发中的不稳定版本。比方:
  1. [/code] <version>1.0.0-SNAPSHOT</version>
  2. 每次构建快照版本时,Maven 会主动更新版本号,确保获取最新的依赖项,方便团队成员在开发过程中实时获取到最新的代码和依赖。
  3. 为了在 CI/CD 中实现主动更新版本号,可以使用 Maven 的插件来完成。比方,versions-maven-plugin插件可以方便地更新项目版本和依赖项版本。在 CI/CD 脚本中,可以通过实验相应的插件下令来实现版本号的主动更新。比方,使用以下下令将项目版本更新为 1.1.0:
  4. [code]
复制代码
mvn versions:set -DnewVersion=1.1.0
也可以结合 CI/CD 工具的功能,在每次构建或发布时主动触发版本号的更新。在 Jenkins 的 Pipeline 脚本中,可以通过实验 Shell 下令来调用 Maven 插件更新版本号,然后提交更改并推送到版本控制系统。如许,在 CI/CD 的流程中,版本号可以或许随着项目标迭代和发布主动更新,保证了版本管理的准确性和高效性。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4