利用春节长假,研究了搭建Jekins+GitLab+IDEA自动部署环境。基本工作流程如下:
目前还只是完成了测试环境的持续集成。因为生产环境的上线要通过测试和验收等环节,不能完全自动部署。
整个搭建过程一波三折,遇到好多问题,逐一解决,最后也遗留了一些待进一步研究和思考的问题。简单记录一下整个过程,以备日后使用时查阅。
首先需要申请GitLab账户,URL如下:
https://gitlab.com/users/sign_up
1.1
首先输入个人基本信息,需要注意的是,开始用的是sina邮箱,结果提示
The email address provided is not from an allowed domain
换用hotmail邮箱就可以了。密码用的是多年以前在摩托罗拉时使用的密码。
单击Register按钮,打开Create your group页面,这里创建了一个Morningstar的组,单击Create Group按钮,完成建组。打开创建第一个项目页面。这里创建了一个Hello World(图中有误)项目,项目的URL如下,后面会用到:
https://gitlab.com/johney2008/HelloWorld
这里选择IDEA作为开发工具,Spring Boot作为开发框架。首先记录安装IDEA得到过程,访问如下URL可以选择下载各种版本的IDEA,
https://www.jetbrains.com/idea/download/other.html
这里选择下载IntelliJ IDEA Ultimate 2020.3.2 for Windows,得到ideaIU-2020.3.2.exe。
安装的过程略去。安装完成后,运行IDEA。会弹出激活IDEA的对话框。选择Evaluate for
free,然后单击下面的Evaluate按钮,打开插件中心。
运行IDEA,如果打开默认项目,则从菜单File/Close Project将其关闭。
单击New Project按钮,打开新建项目对话框。
在左侧导航栏中选择 Spring Initilizer,然后单击Next按钮。打开输入项目属性窗口。
选择Spring Web,然后单击Next按钮。打开输入项目名称的窗口。
项目名称使用HelloWorld,项目位置使用默认即可。单击Finish按钮结束创建示例项目。
待项目所需的资源都拉取成功后,在左侧窗格中选择Package。然后右击com.example.demo,在弹出菜单中依次选择New ->Package,打开选择目标目录对话框,选择src\main\java\com\example\demo。
单击OK按钮,打开New Package对话框。输入com.example.demo.controllers,然后回车。在左侧窗格中com.example.demo下面会出现一个controllers目录。
右击controllers,在弹出菜单中选择New -> Java Class,打开New Java Class对话框。
创建HelloController类,代码如下:
package com.example.demo.controllers;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/")
public String index(){
return "Hello world";
}
}
以此demo程序作为搭建Jekins自动部署环境的Demo。
运行项目,然后打开浏览器,访问如下URL:
http://localhost:8080/hello/
接下来在IDEA中配置如何对接GitLab,首先配置Maven。在IDEA中选择File->Settings,打开Settings窗口,搜索Maven,如果需要配置 User settings file。
C:\Users\Administrator.m2\settings.xml里面已经配置好了阿里云仓库,代码如下:
C:\Users\Administrator\.m2\repository
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
repo1
central
Human Readable Name for this Mirror.
http://repo1.maven.org/maven2/
repo2
central
Human Readable Name for this Mirror.
http://repo2.maven.org/maven2/
nexus-aliyun
*
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
docker-aliyun-my
13691237015
lxl991101
[email protected]
然后在菜单中依次选择VCS->Create Git Repository,打开Create Git Repository窗口。选择前面创建的项目路径,默认为当前打开的项目。
单击OK按钮。此时项目中未提交的类和目录会变成红色,同时菜单中多出一个Git菜单项。
选择Git->Commit,打开Commit to master窗格
选中待提交的文件,在文本框中填写以下测试内容:
第一次提交
单击Commit按钮,弹出指定Git User Name的对话框。
填写Name和Email后单击Set and Commit按钮。
选择Git->Push,打开登录gitlab.com对话框。
输入用户名和密码,然后单击Log In按钮,打开Push Commit窗口。
可以看到之前提交的文件,单击Push按钮,推送提交的文件。
访问GitLab仓库,可以看到推送的文件
在/usr/local/目录下下载Maven安装包:
cd /usr/local
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar xf apache-maven-3.3.9-bin.tar.gz
编辑/etc/profile,将maven的路径添加到全局变量PATH中。然后编译/etc/profile
source /etc/profile
执行下面命令查看Maven的版本。
mvn -v
结果如下:
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_275, vendor: Red Hat, Inc.
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.11.1.el7.x86_64", arch: "amd64", family: "unix"
这是一次失败的经历,主要为了以后避免遇到同样的问题。
首先确认已经安装JDK,。如果没有,可以执行如下命令安装:
yum install -y java
从官网下载jenkins的rmp包,然后安装:
wget http://pkg.jenkins-ci.org/redhat-stable/ jenkins-2.176.2-1.1.noarch.rpm
不过命令下载太慢,于是改用迅雷下载上面的链接,下载好后,在CentOS创建/usr/local/jekins目录,将jenkins-2.176.2-1.1.noarch.rpm上传至该目录。
在CentOS中执行:
mkdir /var/cache/jenkins
mkdir /var/log/jenkins
mkdir /var/lib/jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.176.2-1.1.noarch.rpm
配置jenkis的端口
vi /etc/sysconfig/jenkins
这里保持8080.
启动jenkins
service jenkins start/stop/restart
安装成功后Jenkins将作为一个守护进程随系统启动
系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者
启动的时候将从/etc/sysconfig/jenkins获取配置参数
默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置
Jenkins的RPM仓库配置被加到/etc/yum.repos.d/jenkins.repo
执行netstat -ntlp命令确认8080已经开放。
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pvaG5leWxlZTIwMDg=,size_16,color_FFFFFF,t_70#pic_center)
在浏览器中访问 如下URL:
http://192.168.1.101:8080/
首次进入会要求输入初始密码。初始密码在:/var/lib/jenkins/secrets/initialAdminPassword
查看后粘贴到密码框里。然后单击“继续”按钮,打开自定义Jenkins页面。
选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。
但是很多组件没有安装成功。还是手动安装吧。
安装失败后,单击继续按钮(忘记截图了)。打开创建第一个管理员用户窗口,
创建的第一个管理员就用admin了,密码123456。单击使用admin账户继续。打开实例配置窗口。
保持默认配置,单击保存并完成按钮。打开Jenkins已经就绪窗口。
第2天再次访问Jenkins网页,发现用admin/123456居然不能登录了。于是尝试使用admin+初始密码,登录成功。奇怪
进入Jenkins主页。
在左侧导航栏中选择Manage Jenkins,打开管理Jenkins页面。
其中列出了很多依赖错误。
总结一下,就是升级Jenkins。综合比较后,决定升级到最新版本。百度后,确定升级到2.273-1.1版本,下载链接如下:
http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm
下载后将jenkins-2.7.3-1.1.noarch.rpm上传至CentOs的/usr/local/jekins目录。
然后登录CentOS,卸载旧版本,进行安装。
yum remove jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.7.3-1.1.noarch.rpm
systemctl restart jenkins.service
百度到的解决方案是删除所有Jenkins插件。
cd /var/lib/jenkins/plugins
rm -Rf *
/var/lib/jenkins 是JENKINS_HOME的值。 可以在/etc/sysconfig/jenkins中查看。
再次刷新页面,报错
Unable to read /var/lib/jenkins/config.xml
直接删除/var/lib/jenkins/config.xml即可。可以进入Jenkins主页了。报错都消失了。
选择“可选插件”,在“过滤”文本框中输入“Maven Integration plugin”,居然没有找到,于是又停滞了下来。
百度到的解决方案是自己下载插件,在高级安装中上传安装。
访问如下URL可以选择下载maven插件
http://updates.jenkins-ci.org/download/plugins/maven-plugin/
经测试,3.7版本可以用。单击2.14超链接,下载Maven插件,得到maven-plugin.hpi。
最开始下载了3.9版本的Maven插件,后面出不来maven项目,折腾了半天。
返回插件管理页面,选择“高级”选项卡
选择刚刚下载的Maven插件,然后单击“上传按钮”,开始安装Maven插件。
安装完成后,选择页面下面的“安装完成后重启Jenkins(空闲时)”复选框,重启Jenkins。
重启Jenkins后,再次进入“插件管理”页面,选择“已安装”选项卡,可以看到Maven Integration plugin。
接下来安装GitHub插件,一样需要手动下载。
http://updates.jenkins-ci.org/download/plugins/github/
先选择1.14.0下载吧。不高不低。先试试再说。
登录Jenkins管理页面,选择“系统管理”->Gobal Tool Configuration,打开Gobal Tool Configuration页面,对JDK和mvn进行配置。取消选择“自动安装”,分别填写JAVA_HOME和MAVEN_HOME
6.19
在CentOS中定位JAVA_HOME的方法如下:
找到java
whereis java
结果如下:
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
查看第一个位置:
ll /usr/bin/java
结果如下:
lrwxrwxrwx. 1 root root 22 2月 11 09:10 /usr/bin/java -> /etc/alternatives/java
发现/usr/bin/java是一个链接
继续查看/etc/alternatives/java
ll /etc/alternatives/java
结果如下:
[root@centos1 ~]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 2月 11 09:10 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64就是JAVA_HOME
在CentOS中定位MAVEN_HOME的方法如下:
找到mvn
whereis mvn
结果如下:
mvn: /usr/local/apache-maven-3.3.9/bin/mvn.cmd /usr/local/apache-maven-3.3.9/bin/mvn
/usr/local/apache-maven-3.3.9就是MAVEN_HOME
·首先需要创建一个新项目。返回Jenkins主页,在左侧导航条中单击“新建”菜单,打开新建Jenkins任务的页面:
输入item name暂定为Hello World,选择“构建一个maven项目”,然后单击OK按钮。打开任务详情页面,结果F12报错,各种查阅找不到原因。猜测是Maven Integration Plugin的版本不匹配。果断降级,之后果然不报错了。现在Maven Integration Plugin的版本是2.14,不再升级了。
选中“源码管理”,结果发现没有git
折腾了一天安装GitHub插件,结果不管怎么安装都有问题,创建项目报错。
偶然发现2.263.4是没有问题的,于是决定从头再来…好几天白费了。就得出一个结论:用Jenkins2.263.4是可以的。
经过一次失败的经历,卸载Jenkins,从头再来。
rpm -e jenkins
删除遗留文件:
find / -iname jenkins | xargs -n 1000 rm -rf
首先确认已经安装JDK,。如果没有,可以执行如下命令安装:
yum install -y java
(1)首先尝试按照官网的步骤操作。各种无法连接。于是还是采用rpm方式安装。
从官网下载jenkins的rmp包,然后安装:
mkdir /usr/local/jenkins
cd /usr/local/jenkins
wget http://ftp-chi.osuosl.org/pub/jenkins/redhat-stable/jenkins-2.263.4-1.1.noarch.rpm
mkdir /var/cache/jenkins
mkdir /var/log/jenkins
mkdir /var/lib/jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.263.4-1.1.noarch.rpm
配置jenkis的端口
vi /etc/sysconfig/jenkins
这里保持8080.
启动jenkins
service jenkins start/stop/restart
安装成功后Jenkins将作为一个守护进程随系统启动
系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者
启动的时候将从/etc/sysconfig/jenkins获取配置参数
默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置
Jenkins的RPM仓库配置被加到/etc/yum.repos.d/jenkins.repo
执行netstat -ntlp命令确认8080已经开放。
在浏览器中访问 如下URL:
http://192.168.1.101:8080/
打开解锁Jekins页面,
首次进入会要求输入初始密码。初始密码在:/var/lib/jenkins/secrets/initialAdminPassword
查看后粘贴到密码框里。然后单击“继续”按钮,打开自定义Jenkins页面。
选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。
创建的第一个管理员就用johney了,密码123456。单击保存并“完成”。打开实例配置窗口。
保持默认配置,单击“保存并完成”按钮。打开Jenkins已经就绪窗口。
在左侧导航栏中选择Manage Jenkins,打开管理Jenkins页面。
单击“Manage Plugins”超链接,打开“插件管理”页面。
选择“已安装”搜索GitHub,找到已经安装了GitHub创建。
但是没有找到Maven Integration plugin。需要手动安装。
选择“可选插件”,在“过滤”文本框中输入“Maven Integration plugin”,回车后选中Maven Integration,单击“直接安装”按钮。
安装完成后,选择页面下面的“安装完成后重启Jenkins(空闲时)”复选框,重启Jenkins。
重启Jenkins后,再次进入“插件管理”页面,选择“已安装”选项卡,可以看到
Maven Integration plugin。
登录Jenkins管理页面,选择“系统管理”->Gobal Tool Configuration,打开Gobal Tool Configuration页面,对JDK和mvn进行配置。取消选择“自动安装”,分别填写JAVA_HOME和MAVEN_HOME
在CentOS中定位JAVA_HOME的方法如下:
找到java
whereis java
结果如下:
java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz
查看第一个位置:
ll /usr/bin/java
结果如下:
lrwxrwxrwx. 1 root root 22 2月 11 09:10 /usr/bin/java -> /etc/alternatives/java
发现/usr/bin/java是一个链接
继续查看/etc/alternatives/java
ll /etc/alternatives/java
结果如下:
[root@centos1 ~]# ll /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 2月 11 09:10 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64就是JAVA_HOME
在CentOS中定位MAVEN_HOME的方法如下:
找到mvn
whereis mvn
结果如下:
mvn: /usr/local/apache-maven-3.3.9/bin/mvn.cmd /usr/local/apache-maven-3.3.9/bin/mvn
/usr/local/apache-maven-3.3.9就是MAVEN_HOME
进入正题,配置Jenkins的自动化部署。也就是自动从源码库拉取代码,编译并发布。
·首先需要创建一个新项目。返回Jenkins主页,在左侧导航条中单击“新建”菜单,打开新建Jenkins任务的页面:
输入item name暂定为Hello World,选择“构建一个maven项目”,然后单击“确定”按钮。打开任务详情页面。
选中“源码管理”,选择Git,将《四、IDEA提交代码至GitLab》中提交项目的GitLab URL添加到Repository URL文本框中,具体如下:
https://gitlab.com/johney2008/HelloWorld.git
获取Repository URL的方法如下:
(1)访问GitLab的项目页面,
https://gitlab.com/johney2008/HelloWorld
(2)单击Clone按钮,然后单击Clone with HTTPS后面的 按钮,可以将Repository URL复制出来。
在“源码管理”页面中,,单击Credentials后面的添加按钮,选择Jenkins。打开“添加凭据”对话框。添加GitLab的用户名和密码然后单击“添加”按钮。然后在Credentials下拉框中选择刚刚的配置。
保存项目,然后单击页面左上角的项目名Hello World 超链接,打开项目Hello World的详情页。单击左侧导航栏中的Build Now,可以开始构建项目。
每次构建都会生成一个编号,#1/#2或者#3……
单击编号可以查看构建的详情。
单击左侧导航条中的“控制台输出”菜单项,可以实时查看构建的过程。
由于默认是从中央仓库获取依赖包的,很慢,只有几K/s。
于是查阅资料配置Jenkins的Maven从阿里云(或私服)下载。方法如下:
(1)准备好Maven配置文件settings.xml,代码如下:
/var/lib/jenkins/.m2/repository
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
XaNexus
XaNexus
http://maven.aliyun.com/nexus/content/groups/public
true
daily
warn
true
fail
XaNexus
http://maven.aliyun.com/nexus/content/groups/public
true
warn
true
fail
jdk1.8
true
1.8
1.8
1.8
1.8
XaNexus
注意,节点定义本地保存依赖包的目录,这里使用默认的Maven仓库目录 /var/lib/jenkins/.m2/repository。中定义了名为alimaven的阿里云镜像,如果使用私服可以在此处配置。
将次settrings.xml上传至CentOS的/var/lib/jenkins/.m2目录,重启Jenkins服务。
回到Jenkins管理后台,重新构建项目,这次很快就成功了。
前面构建项目时手动操作的。但是如果每次都手动构建,就失去了用Jenkins的意义。
可以配置构建触发器,指定定时发起构建。
在配置项目的页面中选择“构建触发器”选项卡,切换到构建触发器区域。
共有6个配置构建触发器的选项。记录一下这些选项的含义。
(1)Build whenever a SNAPSHOT dependency is built
只要项目所依赖的快照项目被构建了,就启动构建。通常用于底层项目构建时自动构建上层应用。选中此选项后,Jenkins会自动解析每个项目的pom.xml,分析项目之间的依赖关系。
(2)Schedule build when some upstream has no successful builds
如果选中此选项,即使上游项目没有成功构建,JKenkins也会启动构建项目;
如果没有选中此选项,则上游项目没有成功构建时,JKenkins不会启动构建项目;
这可以保证项目有序地构建。
(3)触发远程构建 (例如,使用脚本)
如果需要远程触发构建,可以勾选此选项。然后在后面填写一个Token,随便什么字符串都可以,例如123456。
这样就可以通过下面的URL触发项目的构建:
JENKINS_URL/job/项目名/build?token=TOKEN_NAME
这样就可以让程序员提交后自己触发项目的构建了。很有用
(4)Build after other projects are built
其他指定的项目构建后构建。选中需要输入依赖的项目名。
(5)Build periodically
定期构建。选中后需要输入日程表。可以使用一个字符串定义日程表,语法如下:
第一个表示分钟,取值0~59
第二个表示小时,取值0~24
第三个表示一个月的第几天,取值1~31
第四个表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
例如,找了一些例子:
H 6-18/2 * 上午6点到下午六点期间的每隔2个小时 构建一次
H H/2 *每隔2小时构建一次
12 15 * 每天下午15点12分触发构建
20 16 15 每个月的15号下午16点20分构建一次
10-15 每个月的10号到15号某个时间都会被构建一次
H/3 12 H(1-6) * 1到6月里随机的某个月的12号每隔3小时构建一次
每隔5分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午12点定时构建一次
0 12 * * *
每天下午6点下班前定时构建一次
0 18 * * *
工作日(周一到周五)早上9点定时构建一次
0 9 * * 1-5
测试了一个每5分钟构建一次的。成功了。
(6)GitHub hook trigger for GITScm polling
当GitHub有变化是自动构建。
(7)Poll SCM
定时检查源码变更。如果有更新就checkout最新code下来,然后执行构建动作
前面已经实现了自动构建,生成的jar包就在Jenins服务器的/var/lib/jenkins/workspace/Hello World/target目录下,Hello World是Jenkins项目名。
最后一步就是将jar包推送到远程服务器。要实现此功能,需要安装远程发布插件:“Publish Over SSH”,方法如下:
进入Jenkins插件管理页面,在可选插件中搜索Publish Over SSH,然后安装。
重启Jenkins后,可以在已安装列表中找到Publish Over SSH插件。
在左侧导航栏中单击Manage Jenkins,然后在右侧单击System Configuration。
打开系统配置页面。在页面底部找到Publish over SSH栏目。单击SSH Servers后面的新增按钮,添加一个SSH服务器。单击“高级”按钮输入密码
填写完毕后,单击TestConfiguration按钮测试连接。
打开Jenkins项目Hello World,单击“构建环境”,里滚动页面到Build栏目,早Goal and options文本框中填写:
clean package -U -DskipTests=true -P xlTest
单击“构建后操作”选项卡,在Add post-build step下拉框中选择Send files or execute commands over SSH。
为了验证推送的功能,在项目Hello World的主页中单击 Build Now菜单,会在左侧下面出现一个新的构建记录,点进去看控制台,可以看到传送文件的记录。
登录推送的服务器,发现在/root下创建了配置推送的目录,本以为指定推送到/root目录,结果在/root下又建了一个root目录。
可以通过命令将次文件复制到指定的位置,然后在重启对应的服务。这里只做了一次简单的测试,在Exec Command文本框中填写如下命令:
cp /root/root/demo-0.0.1-SNAPSHOT.jar /usr/local/jenkins
构建完成后,可以在远程服务器的/usr/local/jenkins目录下找到发布的jar包
这次先到这里吧。
本次研究历经数天,遇到很多问题,最终都一一解决,一度推翻重来,几经反复终于搭建了用于测试环境的Jenkins自动部署环境。但是还有一些工作没有逐一去做。记录一下:
(1)没有在测试环境下为应用创建服务,也就是没有验证完整的流程,虽然这个过程应该没有问题;
(2)没有研究从测试环境到生产环境的发布流程。此流程应该需要人为触发,不能自动构建。日后可以参照这篇文章继续研究。
https://www.cnblogs.com/kevingrace/p/6022447.html
https://www.jianshu.com/p/a1451a4d672d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
https://my.oschina.net/u/1791512/blog/1552790
估计Jenkins自动部署流程,即使节后上线,也是从测试环境开始,一步一步的推进。
(3)自动部署流程与项目的版本控制有着密切的关联,需要进一步了解Git版本控制规范。
https://www.cnblogs.com/wssdx/p/12061384.html
https://jingyan.baidu.com/article/e52e36155d9ee040c60c51e0.html
https://blog.csdn.net/yuruixin_china/article/details/79061999
说到Git,记录一个小插曲。早上起来看构建历史记录,发现失败了,看日志报如下错误:
git fatal: index file smaller than expected
只有在Jenkins的项目目录下删除.git目录,然后重置git.。登录Jenkins服务器,执行如下命令。
cd /var/lib/jenkins/workspace/Hello\ World
rm -Rf .git
git reset
再执行构建,就成功了
(4)如果在生产环境部署,还需要考虑一个问题,就是一旦发布的版本有问题,就需要回滚。参考
https://www.cnblogs.com/EasonJim/p/5945266.html
(5)实际工作环境上线时需要考虑Maven私服。
https://www.cnblogs.com/ligh-test/p/7839463.html
路漫漫其修远兮,吾将上下而求索…