进入Devops页面,构建流水线,选择Docker方式新建流水线
根据自己项目方式,选择要构建的流水线名称、子模块名称,构建方式,构建 工具根据项目选择maven或者gradle。输入启动参数后,选择部署组和主机,以及对应的环境变量即可。如果之前构建过,可直接选择复制流水线进行改造。
在构建发布的过程中,以下是遇到的几个问题:
没读取到pom文件中的依赖 ,报错为:
Failed to execute goal on project gateway: Could not resolve dependencies for
project com.taikanglife.pension:gateway:jar:1.0-SNAPSHOT: Could not find artifact com.taikanglife.pension:common:jar:1.0-SNAPSHOT in maven-group-snapshots (https://repos.taikangcloud.com/repository/maven-group-snapshots) -> [Help 1]
复制
该问题是由于构建发布的是子模块,但是部分依赖是在项目的pom文件中,子模块pom文件没有,导致报错
解决方法: 在启动参数中加上 -f ../pom.xml,读取根目录下的pom文件
2. 没添加DockerFile文件,导致构建发布失败,添加DockerFile文件
3. 发布异常,未找到镜像
Unable to find image '27020aea315c46958e722a9f1052d061
复制
原因是启动配置文件中删除环境变量时 -e没有去除,导致报错
4. 容器27020aea315c46958e722a9f1052d061启动失败
ps检查信息:0765e1b308b8 repos.taikangcloud.com/tkpension-tkpms-docker/dev/outer-gateway:branch-feature_20230206-gateway-20230213193806
"boots /app/app.jar" 1 second ago
Exited (0) Less than a second ago
复制
进入容器查看,docker ps 没有该容器
使用docker ps -a 发现该容器退出
使用docker run -it 容器名,看日志
发现错误是Spring Boot:jar中没有主清单属性
在pom文件中指定程序入口,启动类 ,新增代码
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.1.RELEASE</version>
<configuration>
<mainClass>com.gateway.GatewayApplicaion</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
复制
5. Failed to create parent directories for [/app/./logs/gateway/2023-02-13.log]
没有权限建立文件夹,需要将日志文件路径放在挂载文件下
6. 换了文件后,还是报错,查看该文件夹是root用户,root组,无权限在root文件夹中新建,通过Docker用户登录堡垒机手动新建目录,同时chmod 777,赋予权限
7. 发现构建没问题,但是Eureka没上去,检查日志,发现是
DiscoveryClient_GATEWAY-SERVER/10.154.8.111:gateway-server:9000 -
was unable to refresh its cache! status = Cannot execute request on any known server,com.netflix.discovery.shared.transport.TransportException:
Cannot execute request on any known server
复制
8. 检查配置文件,发现是Eureka地址写错了 原本是,http://10.154.8.111:8090/eureka/,
修改成http://10.154.8.111:8090/auth_eureka/eureka/即可