天天看点

CI&CD落地实践6-Jenkins接入maven构建后端springboot项目

作者:大刚测试开发实战

前言

在前面一篇《CI&CD落地实践5-Jenkins分布式环境搭建及多节点运行》中,我们介绍了如何在Windows及Linux系统上部署Jenkins从节点,本章节介绍如何在Jenkins创建maven项目,利用Jenkins从节点来构建后端springboot项目。

一、环境准备

1.Jenkins执行机搭建maven环境

1)配置maven环境变量

当前执行机为Windows系统,需要做以下工作:

① 将apache-maven-3.6.3-bin.zip解压缩;

② 在环境变量path中添加maven的bin目录:E:\apache-maven-3.6.3\bin

CI&CD落地实践6-Jenkins接入maven构建后端springboot项目

2)修改maven配置文件

配置setting.xml文件:

① mirror 镜像仓库配置

本地镜像仓库地址为:http://192.168.1.140:8081

<mirrors>
  <mirror>
      <id>wucheng-maven</id>
      <name>wucheng maven</name>
      <url>http://192.168.1.140:8081/repository/maven-public/</url>
      <mirrorOf>*</mirrorOf>        
    </mirror>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
  </mirrors>           

② 配置双maven仓库

一个是本地仓库,一个阿里云仓库

<profiles>
    <profile>
            <!-- id必须唯一 -->
            <id>ali-maven</id>
            <repositories>
                <repository>
                    <!-- id必须唯一 -->
                    <id>alimaven</id>
                    <!-- 仓库的url地址 -->
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
        <profile>
            <!-- id必须唯一 -->
            <id>wucheng-maven</id>
            <repositories>
                <repository>
                    <!-- id必须唯一 -->
                    <id>nexus</id>
                    <!-- 仓库的url地址 -->
                    <url>http://192.168.2.140:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
  </profiles>
  <activeProfiles>
        <activeProfile>ali-maven</activeProfile>
        <activeProfile>wucheng-maven</activeProfile>
    </activeProfiles>           

2.安装相关插件

1)maven插件

用于创建maven项目,进行maven构建

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

2)SVN插件

后台项目代码是通过SVN管理,所以需要先安装subversion插件,直接搜索subversion安装即可。

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

3)企业微信提醒插件

搜索Qy Wechat Notification Plugin安装,用于构建后的企业微信提醒

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

二、Jenkins接入maven项目

1.新建maven项目

只有安装maven插件后,在新建项目的时候才能看到Maven project,否则不显示:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

① 指定运行节点

在General中勾选“限制项目的运行节点”,标签表达式填写前面创建从节点时所填写的标签。

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

注意:需要在配置该从节点时,指定JDK、Maven等工具的位置:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

② 配置源码管理-Source Code Management

在 Source Code Management 中选择SVN(注意:SVN也要先提前安装Subversion插件才能看到)

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

③ 配置构建触发器-Build Triggers

保持默认

④ 配置构建-build

  • Root POM:项目的pom.xml文件路径,如果是在根目录,则只需要填pom.xml;
  • Goals and options:目标和选项,“clean package -Dmaven.test.skip=true”的作用是打包前清理项目、跳过测试;
CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

⑤ 配置构建后的步骤-Post-build Actions

需要先安装插件,前面提到过,否则不会出现以下选项

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

Post-build Actions 中选择“企业微信通知”,当然也可以选邮件通知等等:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

注意:这一步需要先在企微要通知的群中添加一个群机器人,将群机器人的webhook地址复制到上述的Webhook地址栏中

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

3.执行构建

点击立即构建,即可执行构建操作。但事情往往不会那么顺利,我第一次构建就报错了:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

通过控制台日志可以看出,SVN拉取代码都没问题,已经将SVN代码拉到了Jenkins项目的工作目录中:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

但是在解析pom.xml文件、安装依赖包时报错了。报错信息中提到的“com.wucheng.app:event-service:1.1-SNAPSHOT”是本地工程编译后生成的包,不是第三方依赖包。由于对这个项目结构、依赖关系我也不清楚(目前能解释清楚的人所剩无几),所以具体怎么解决说实话我也不知道。

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

三、曲线救国方案实现

我决定换一种思路来解决,我给它取名曲线救国方案,如下:

  1. 先在我本地电脑上下载代码,在IDEA中打开,然后安装好依赖,并测试能不能编译通过;
  2. 若能编译通过并打包成功,再将依赖库上传至Jenkins执行机的maven本地仓库目录(这也是为什么选择Windows环境上部署Jenkins作为从节点的原因之一);

③ 在Jenkins执行机的maven设置文件settings中指定maven本地仓库目录;

这样Jenkins在执行构建的时候就不用再安装一堆依赖了。但这样做有个明显的弊端,就是如果涉及到的项目比较多,需要手动去识别每个项目所用到的依赖,然后分别上传,否则统一将本地依赖库打包上传覆盖Jenkins机器的maven本地依赖仓库,可能会造成其他项目的依赖库丢失。

需要注意以下几点:

① 尽可能保证本地电脑的JDK版本与Jenkins执行机的版本一致;

② 尽可能保证本地电脑的maven版本与Jenkins执行机的版本一致;

1.IDEA安装

2.maven安装与配置

我的办公电脑也是Windows系统,所以与前面Jenkins执行机配置maven的过程一致。

3.SVN拉取代码

① SVN检出到本地

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

② 填写认证信息

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

拉取后的项目:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

4.IDEA中项目配置

打开项目

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

IDEA中配置JDK

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

IDEA中配置maven

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

5.安装依赖库

从IDEA打开的项目目录可以看出,这个项目是由多个工程组合而成,根目录下并无pom.xml文件,我们需要将最外层、也就是统一管理所有工程依赖的pom.xml文件添加到maven中,然后依次为各个工程安装依赖库:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目
CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

注意:安装过程中由于依赖顺序和库的类型不同(有的工程依赖外部包、有的工程依赖内部工程打的包),可能会出现各种依赖安装报错,根据报错提示注释掉相应文件中的相应依赖配置、再次安装即可。

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

安装成功如下:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

所有依赖包安装成功后,都存放在IDEA中maven配置指定的目录下:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

6.编译项目

这个项目工程庞大,依赖库极多,后来还是在这个项目的开发人员的帮助下,才装完所有的依赖,最终编译通过。不得不说,整个依赖库的安装过程还是花费了不少精力。所以,要么是个人对项目非常了解,要么是能找到相关研发、并且愿意帮助,否则想要搞定这种庞大项目的环境问题,还是非常困难。

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

四、Jenkins执行机maven配置

1.maven配置本地仓库目录

settings.xml配置文件中添加如下配置,用于指定本地maven仓库目录:

<localRepository>E:\maven-repository</localRepository>           
CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

2.上传maven依赖库至Jenkins执行机

将本地安装好的项目依赖库统一打包上传至Jenkins执行机设置的maven本地仓库中并解压。这样Jenkins执行机就得到了和我本地电脑一模一样的编译环境:

  • JDK一致;
  • Maven版本一致;
  • Maven依赖仓库一致;
CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

3.Jenkins构建

在主节点点击立即构建,首次构建的时间可能会有点长,因为要先执行拉取代码、生成本地工作目录等操作。构建成功:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

确实是通过从节点“win188”执行:

CI&amp;CD落地实践6-Jenkins接入maven构建后端springboot项目

小结

以上就是在Windows从节点上安装配置maven、Jenkins安装maven插件以及如何在Jenkins中创建maven项目构建后端项目的全部过程。理论上说无论是在Windows环境、Linux环境,只要环境确保正确、依赖能够正常安装,都能进行正常的构建操作。我是因为环境过于复杂,所以才出此“整体拷贝依赖仓库”这种下策。

当然此项目后续的流程还不算完,还可以将生成的jar包远程替换到开发、测试环境,以及重启服务等等操作,后面会再具体介绍。

继续阅读