在前面的版本中,错误的把构建推送docker
镜像绑定到package
执行动作上面了;这样导致osc-service
父工程在install
操作时会报找不到依赖的错误,和“提前”构建推送镜像等不能接受的问题。为了解决这些问题,这个版本做了一些对应优化。
完整项目地址:https://github.com/intomylife/osc-api
v1.4.4 标签地址:https://github.com/intomylife/osc-api/releases/tag/v1.4.4
v1.4.4 下载地址:zip,tar.gz
注:对于标签的说明「初学者商城」- 写在最前面 #5.1
注:查看更改内容:使用脚本简化部署操作
从package
更改为deploy
原因:
在package
阶段,命令只完成了项目编译、单元测试、打包功能,而没有安装部署到本地仓库和远程仓库;这时的package
动作由于是构建推送docker
镜像的“触发点”,就导致在本地仓库和远程仓库都没有相关依赖而报错的结果。
那是否能绑定在install
阶段?答案是否定的。install
在package
的项目编译、单元测试、打包功能基础上多一个安装部署到本地仓库的步骤,而我们是需要在此操作后才来进行docker
镜像的构建和推送。
所以,最后更改为绑定到deploy
阶段;其中deploy
阶段包括:项目编译、单元测试、打包功能、安装部署到本地仓库、安装部署到远程仓库。
注:之前配置的阿里云镜像仓库地址供我们加速下载依赖,而这时想要安装部署到远程仓库,就需要自己部署一个Maven
的远程私有仓库
Nexus
是一个强大的Maven
仓库管理器,它不仅能维护自己内部的所有依赖,同时还能代理外部的镜像仓库;安装容易上手简单,并且还提供可视化的操作界面。
下面我们一起在Docker
中安装Nexus3
[root@zwc ~]# systemctl start docker.service
[root@zwc ~]# docker pull sonatype/nexus3:3.17.0
[root@zwc ~]# cd /usr/local/
[root@zwc local]# mkdir nexus-data
[root@zwc local]# chmod -R 777 nexus-data/
[root@zwc ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sonatype/nexus3 3.17.0 36b0df681a47 11 months ago 582MB
[root@zwc ~]# docker run -d --name nexus3 --restart always -p 18081:8081 -e TZ='Asia/Shanghai' -v /usr/local/nexus-data/:/nexus-data/ sonatype/nexus3:3.17.0
56153e61cba379ea74be624396285f00c07d563b52ef0414cf253ad6
[root@test ~]#
ip:18081
Nexus
主页后,点击右上角Sign in
按钮admin.password
文件里面记录着[root@zwc ~]# cd /usr/local/nexus-data/
[root@zwc nexus-data]# cat admin.password
admin
密码Next
,输入两次新密码,继续Next
Next
Finish
,完成在 hosted(宿主类型) 的仓库里,又有 Policy(策略) 的概念,主要分为以下两种:
https://repo1.maven.org/maven2/
注:默认的仓库中只有一个Maven
中央仓库的代理,现在需要新建一个代理阿里云镜像的仓库
Repository
,选择Repositories
Create repository
按钮,选择maven2 (proxy)
代理类型的仓库Create repository
按钮maven-public
仓库组Group -> Member repositories:
处aliyun-proxy
aliyun-proxy
它就排在了最底下,上下排名是指访问的优先前后aliyun-proxy
放在maven-central
前面Save
按钮Success
等信息表示操作成功Repositories
页面Health check
项,现在来开启一下aliyun-proxy
仓库的Analyze
按钮Yes, only this repository
,仅仅就操作当前选择的仓库I Agree
,我同意maven-central
仓库同上操作一遍部署策略:
maven-releases
仓库默认是不允许重新部署的,对于自己测试使用很不方便,所以这里更改为允许重新部署maven-releases
仓库Hosted -> Deployment policy:
Allow redeploy
Save
按钮,保存Success
等信息表示操作成功日志报错:
System
,选择Capabilities
Outreach: Management
进入到管理能力详情中Disable
按钮Success
等信息表示操作成功注:由于已经在远程私有仓库中配置了阿里云镜像仓库的地址,所以这里可以把已经配置的内容注释,再添加刚刚部署的远程私有仓库地址
nexus3
*
maven-public
http://ip:18081/repository/maven-public/
注:由于刚刚配置 Nexus 时设置的不允许匿名访问,所以这里还需要配置仓库的认证信息
<server>
<id>nexus3</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>releases</id>
<username>admin</username>
<password>123456</password>
</server>
admin
是上面部署 Nexus 的默认用户,其实是可以根据每个仓库分别可以拥有哪些操作的多个维度来创建角色和用户信息的<!-- 私有仓库 -->
<repositories>
<repository>
<id>nexus3</id>
<url>http://10.211.55.25:18081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
settings -> mirrors
<!-- 部署到远程私有仓库 -->
<distributionManagement>
<!-- 正式版本 -->
<repository>
<id>releases</id>
<name>releases</name>
<url>http://10.211.55.25:18081/repository/maven-releases/</url>
</repository>
<!-- 测试版本 -->
<snapshotRepository>
<id>snapshots</id>
<name>snapshots</name>
<url>http://10.211.55.25:18081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
id
节点的值必须与### 3.3.2 server 用户名密码
中的id
对应#!/bin/bash
## $() - 方法,${} - 变量
## 开始
echo [INFO] ----------------------------- start --------------------------------------
## 获取入参,应用名称
application_name=$1
## 输出看一眼
echo application_name: ${application_name}
## 参数校验
if [ "$application_name" == "registry" ]||[ "$application_name" == "gateway" ]||[ "$application_name" == "turbine" ]||[ "$application_name" == "sleuth" ]||[ "$application_name" == "base" ]||[ "$application_name" == "log" ]||[ "$application_name" == "all" ];
then
## 参数判断
if [ "$application_name" != "all" ];
then
## 入口
echo [INFO] ------------------------ 进入单个服务部署 ---------------------------------
## 1. 安装所有服务
## commons
cd osc-commons/
mvn clean install -Dmaven.test.skip=true
mvn clean deploy -Dmaven.test.skip=true
## service
cd ../osc-service/
mvn clean install -Dmaven.test.skip=true
if [ "$application_name" == "base" ]||[ "$application_name" == "log" ];
then
## 2. 安装部署指定服务
cd osc-$application_name-service/osc-$application_name-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-$application_name-service-core/
mvn clean deploy -Dmaven.test.skip=true
## 3. 返回根目录
cd ../../../
else
## 2. 安装部署指定服务
cd osc-$application_name-service/
mvn clean deploy -Dmaven.test.skip=true
## 3. 返回根目录
cd ../../
fi
## 结束
echo [INFO] ----------------------------- end --------------------------------------
echo [INFO] ------------------------------------------------------------------------
else
## 入口
echo [INFO] ------------------------ 进入整个服务部署 ---------------------------------
## 1. 安装所有服务
## commons
cd osc-commons/
mvn clean install -Dmaven.test.skip=true
mvn clean deploy -Dmaven.test.skip=true
## service
cd ../osc-service/
mvn clean install -Dmaven.test.skip=true
## 2. 挨个安装部署服务
## 注册中心
cd osc-registry-service/
mvn clean deploy -Dmaven.test.skip=true
## 网关
cd ../osc-gateway-service/
mvn clean deploy -Dmaven.test.skip=true
## 断路器聚合监控中心
cd ../osc-turbine-service/
mvn clean deploy -Dmaven.test.skip=true
## 链路跟踪监控中心
cd ../osc-sleuth-service/
mvn clean deploy -Dmaven.test.skip=true
## 基础工程
cd ../osc-base-service/osc-base-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-base-service-core/
mvn clean deploy -Dmaven.test.skip=true
## 日志工程
cd ../../osc-log-service/osc-log-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-log-service-core/
mvn clean deploy -Dmaven.test.skip=true
## 3. 返回根目录
cd ../../../
## 结束
echo [INFO] -------------------------- end -------------------------------------
echo [INFO] ------------------------------------------------------------------------
fi
else
## 入口
echo [INFO] ------------------------ 参数不正确 ---------------------------------
## 结束
echo [INFO] -------------------------- end -------------------------------------
echo [INFO] ------------------------------------------------------------------------
fi
非常简单的一个脚本文件:判断是否入参了应用名称,如果有,就进行安装部署操作
如何使用:
IDEA
底部的Terminal
终端入口MacBook-Pro:osc-api zouwencong$ pwd
/Users/zouwencong/JavaWork/my_osc/osc-api
MacBook-Pro:osc-api zouwencong$ ls -all
total 64
drwxr-xr-x 13 zouwencong staff 416 Jun 5 21:50 .
drwxr-xr-x 7 zouwencong staff 224 Jun 6 16:22 ..
-rw-r--r--@ 1 zouwencong staff 8196 Jun 5 21:50 .DS_Store
drwxr-xr-x 15 zouwencong staff 480 Jun 5 22:21 .git
-rw-r--r--@ 1 zouwencong staff 428 Jun 13 18:47 .gitignore
drwxr-xr-x 7 zouwencong staff 224 Jun 16 08:58 .idea
-rw-r--r--@ 1 zouwencong staff 33 Jun 13 18:47 README.md
-rw-r--r--@ 1 zouwencong staff 5476 Jun 13 18:47 deploy.bat
-rwxr-xr-x@ 1 zouwencong staff 3744 Jun 13 18:47 deploy.sh
-rw-r--r--@ 1 zouwencong staff 1622 Jun 13 18:47 growth-version.bat
-rwxr-xr-x@ 1 zouwencong staff 1649 Jun 13 18:47 growth-version.sh
-rw-r--r--@ 1 zouwencong staff 122 Jun 13 18:47 old-version.bat
drwxr-xr-x@ 4 zouwencong staff 128 Jun 13 18:47 osc-commons
drwxr-xr-x@ 9 zouwencong staff 288 Jun 13 18:47 osc-service
MacBook-Pro:osc-api zouwencong$
./deploy.sh all
:这时会把所有的工程都项目编译、单元测试、打包功能、安装部署到本地仓库、安装部署到远程仓库./deploy.sh registry
:部署注册中心服务工程------------------- 2020.06.13 更新:归类脚本文件 -------------------
MacBook-Pro:osc-api zouwencong$ ls -all
total 40
drwxr-xr-x 11 zouwencong staff 352 Jun 13 22:27 .
drwxr-xr-x 7 zouwencong staff 224 Jun 6 16:22 ..
-rw-r--r--@ 1 zouwencong staff 10244 Jun 13 23:03 .DS_Store
drwxr-xr-x 15 zouwencong staff 480 Jun 13 23:01 .git
-rw-r--r-- 1 zouwencong staff 428 Jun 4 11:47 .gitignore
drwxr-xr-x 11 zouwencong staff 352 Jun 13 23:07 .idea
-rw-r--r--@ 1 zouwencong staff 33 Nov 15 2019 README.md
drwxr-xr-x 4 zouwencong staff 128 Jan 10 11:28 logs
drwxr-xr-x 10 zouwencong staff 320 Jun 13 18:34 osc-commons
drwxr-xr-x 14 zouwencong staff 448 Jun 11 09:27 osc-service
drwxr-xr-x 5 zouwencong staff 160 Jun 13 22:27 script
MacBook-Pro:osc-api zouwencong$
script
目录下,这时的命令就更改为./script/deploy/deploy.sh all
核心命令:
mvn clean install -Dmaven.test.skip=true
:执行此命令会先清理target
目录,再进行项目编译、单元测试、打包功能、安装部署到本地仓库;加上-Dmaven.test.skip=true
参数则会跳过测试mvn clean deploy -Dmaven.test.skip=true
:执行此命令会先清理target
目录,再进行项目编译、单元测试、打包功能、安装部署到本地仓库、安装部署到远程仓库;加上-Dmaven.test.skip=true
参数则会跳过测试@echo off
REM ## 开始
echo [INFO] ----------------------------- start --------------------------------------
REM ## 获取入参,应用名称
set application_name=%1%
REM ## 输出看一眼
echo application_name: %application_name%
REM ## 参数是否符合
REM set "is_true=false"
REM ## 输出看一眼
REM echo is_true: %is_true%
REM ## 参数校验
if "%application_name%" == "all" (
REM ## 入口
echo [INFO] ------------------------ 进入整个服务部署 ---------------------------------
REM ## 1. 安装所有服务
REM ## commons
cd osc-commons/
mvn clean install -Dmaven.test.skip=true
mvn clean deploy -Dmaven.test.skip=true
REM ## service
cd ../osc-service/
mvn clean install -Dmaven.test.skip=true
REM ## 2. 挨个安装部署服务
REM ## 注册中心
cd osc-registry-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 网关
cd ../osc-gateway-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 断路器聚合监控中心
cd ../osc-turbine-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 链路跟踪监控中心
cd ../osc-sleuth-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 基础工程
cd ../osc-base-service/osc-base-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-base-service-core/
mvn clean deploy -Dmaven.test.skip=true
REM ## 日志工程
cd ../../osc-log-service/osc-log-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-log-service-core/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../../
REM ## 结束
echo [INFO] -------------------------- end -------------------------------------
echo [INFO] ------------------------------------------------------------------------
) else (
REM ## 入口
echo [INFO] ------------------------ 进入单个服务部署 ---------------------------------
REM ## 1. 安装所有服务
REM ## commons
cd osc-commons/
mvn clean install -Dmaven.test.skip=true
mvn clean deploy -Dmaven.test.skip=true
REM ## service
cd ../osc-service/
mvn clean install -Dmaven.test.skip=true
REM ## 参数校验
if "%application_name%" == "registry" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../
) else (
if "%application_name%" == "gateway" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../
) else (
if "%application_name%" == "turbine" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../
) else (
if "%application_name%" == "sleuth" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../
) else (
if "%application_name%" == "base" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/osc-%application_name%-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-%application_name%-service-core/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../../
) else (
if "%application_name%" == "log" (
REM ## 2. 安装部署指定服务
cd osc-%application_name%-service/osc-%application_name%-service-api/
mvn clean deploy -Dmaven.test.skip=true
cd ../osc-%application_name%-service-core/
mvn clean deploy -Dmaven.test.skip=true
REM ## 3. 返回根目录
cd ../../../
) else (
REM ## 返回根目录
cd ../
REM ## 入口
echo [INFO] ------------------------ 参数不正确 ---------------------------------
REM ## 结束
echo [INFO] -------------------------- end -------------------------------------
echo [INFO] ------------------------------------------------------------------------
)
)
)
)
)
)
)
与.sh
所要达到的效果与目的一致,所以就简单说明一下存在差异的地方:
有哪些差异:
.bat
批处理脚本执行命令:deploy.bat all
------------------- 2020.06.13 更新:归类脚本文件 -------------------
.bat
批处理脚本执行命令更改为:script\deploy\deploy.bat all
v1.4.4
标签的代码或者对照本篇博客更改v1.4.3
标签的代码macOS
系统,则还需要设置.sh
脚本文件的可执行权限:chmod +x deploy.sh
IDEA
底部的Terminal
终端入口./script/deploy/deploy.sh all
或script\deploy\deploy.bat all
把重复的操作编写到脚本里,提高效率节约时间,巴适。
希望能够帮助到你
over