drone、gogs、docker与项目集成实现自动化部署

news/2024/11/17 9:51:11/

目录

  • 前言
  • 项目目录结构
    • 目录结构
    • 测试文件
  • 文件内容
    • Dockerfile
    • run.sh
    • drone.yml
  • 测试
    • 打包部署中
    • 查看容器
    • 访问项目成功
  • 常见问题
    • Gogs 推送 URL 被解析到默认禁用的本地网络地址
    • 1、drone登录没有权限
    • 2、cannot ping the remote server
    • 3、推送代码以后不能自动clone
    • 4、maven编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
    • 5、cp: cannot stat 'air-app/docker/Dockerfile': No such file or directory
    • 6、Error response from daemon: Head "https://registry-1.docker.io/v2/appleboy/drone-ssh/manifests/latest"
    • 7、no main manifest attribute, in xxx.jar(jar中没有主清单属性)

前言

测试环境频繁的部署,既浪费时间又没有什么技术含量,在项目模块多的时候,部署一次要花半小时的时间,每天都要部署测试,时间长了浪费的时间还是挺多的,人为部署有时候还可能误操作。基于种种原因,萌生了自动打包测试工具drone,drone与gogs还有docker完美结合,实现自动打包,自动部署非常完美,现在让我们来感受一下吧!

项目目录结构

目录结构

在这里插入图片描述
一个未使用自动打包部署的项目,只需要添加这三个文件就可以实现自动部署。

测试文件

在这里插入图片描述

文件内容

Dockerfile

# 该项目镜像需要依赖的基础镜像
FROM java:8
# 将当前目录下的jar包复制到docker容器的根目录下
ADD air-app.jar /air-app.jar
# 指定docker容器启动时运行jar包,在容器启动的时候运行命令,来启动我们的项目
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/air-app.jar","-Xms128m","-Xmx128m","-c"]
# 指定维护者的名字
MAINTAINER air

run.sh

#!/usr/bin/env bash
#定义应用的组名
group_name='air'
#定义应用名称
app_name='air-app'
#定义应用版本
app_version='1.0.0'
#容器端口
app_in_port='5001'
#宿主端口
app_out_port='5001'
echo '----stop container----'
docker stop ${app_name}
echo '----rm container----'
docker rm ${app_name}
echo '----rm image----'
docker rmi docker.io/${app_name}:${app_version}
echo '----build image----'
docker build -t docker.io/${app_name}:${app_version} .
echo '----start container----'
docker run -d --restart=always --network=host \
-p ${app_out_port}:${app_in_port} \
-v /data/logs/${group_name}:/logs \
-e "spring.profiles.active=test" \
--name ${app_name} docker.io/${app_name}:${app_version}

drone.yml

kind: pipeline # 定义对象类型,还有secret和signature两种类型
type: docker # 定义流水线类型,还有kubernetes、exec、ssh等类型
name: air-app-drone # 定义流水线名称
clone:disable: false#指定打包分支和触发事件#trigger:#  branch:#    - master#  event:#    - pushsteps: # 定义流水线执行步骤,这些步骤将顺序执行1. name: package # 流水线名称image: maven:3-jdk-8 # 定义创建容器的Docker镜像volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置- name: maven-cachepath: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载- name: maven-buildpath: /app/build # 将应用打包好的Jar和执行脚本挂载出来commands: # 定义在Docker容器中执行的shell命令- mvn clean package # 应用打包命令- cp air-app/target/air-app-1.0.0.jar /app/build/air-app.jar- cp air-app/docker/Dockerfile /app/build/Dockerfile- cp air-app/run.sh /app/build/run.sh2. name: build-startimage: appleboy/drone-ssh # SSH工具镜像settings:host: 192.168.0.100 # 远程连接地址username: root # 远程连接账号password:from_secret: ssh_password # 从Secret中读取SSH密码port: 22 # 远程连接端口command_timeout: 5m # 远程执行命令超时时间script:- cd /mydata/maven/build # 进入宿主机构建目录- chmod +x run.sh # 更改为可执行脚本- ./run.sh # 运行脚本打包应用镜像并运行
volumes: # 定义流水线挂载目录,用于共享数据3. name: maven-buildhost:path: /mydata/maven/build # 从宿主机中挂载的目录4. name: maven-cachehost:path: /mydata/maven/cache # 从宿主机中挂载的目录

注意 ssh_password为服务器ssh的登录密码,该参数在drone控制面板配置
在这里插入图片描述

测试

将修改的代码提交到gogs,不一会drone就开始clone,package部署了

打包部署中

在这里插入图片描述

查看容器

在这里插入图片描述

访问项目成功

在这里插入图片描述

常见问题

Gogs 推送 URL 被解析到默认禁用的本地网络地址

Payload URL resolved to a local network address that is implicitly
bloc Gogs 推送 URL 被解析到默认禁用的本地网络地址

解决办法参考:https://blog.51cto.com/u_1472521/5981347

1、drone登录没有权限

在这里插入图片描述
目前的解决办法:登录gogs将drone对应的token删除,只要将token删除后就可以登录了。
在这里插入图片描述

2、cannot ping the remote server

Drone-runner-docker日志打印:

time=“2023-06-24T00:51:21Z” level=error msg=“cannot ping the remote
server” error=“Post “http://192.168.0.100:3080:3080/rpc/v2/ping”:
dial tcp: lookup 192.168.0.100:3080: no such host”

该问题是创建Drone-runner-docker容器的时候,把drone 的访问地址弄错造成的,修改正确即可解决。
在这里插入图片描述

3、推送代码以后不能自动clone

这个问题很容易解决,只需要在【drone.yml】文件配置一下启用自动clone即可
在这里插入图片描述

4、maven编译报错Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile

配置一下pom插件即可:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

5、cp: cannot stat ‘air-app/docker/Dockerfile’: No such file or directory

原因:Dockerfile文件位置放错了
将其话到air-app/docker目录下即可解决

6、Error response from daemon: Head “https://registry-1.docker.io/v2/appleboy/drone-ssh/manifests/latest”

在这里插入图片描述
访问超时,配置一下代理即可

先安装 dig指令

yum -y install bind-utils

在这里插入图片描述
参考:https://blog.csdn.net/p1279030826/article/details/126186916

7、no main manifest attribute, in xxx.jar(jar中没有主清单属性)

打包的问题,配置一下pom插件即可

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

以上问题,每个人配置不一定都遇到得到,这里只是为了记录而已,如果你遇到了,那恭喜你,按照上面的方法准能解决。


http://www.ppmy.cn/news/561031.html

相关文章

OUC编译原理实验报告 实验4:验证Yacc的使用/实验e4:从语言SUM到栈式计算机STACK的机器语言的翻译

编译原理实验报告 实验4&#xff1a;验证Yacc的使用 实验e4&#xff1a;从语言SUM到栈式计算机STACK的机器语言的翻译 中国海洋大学编译原理实验2023春 仅供同学参考思路 请勿直接抄袭 否则可能喜提0分 目录 文章目录 编译原理实验报告目录一.实验目的二.实验内容实验4实验…

java有多少种设计模式?

目录 创建型模式&#xff08;Creational Patterns&#xff09;&#xff1a;结构型模式&#xff08;Structural Patterns&#xff09;&#xff1a;行为型模式&#xff08;Behavioral Patterns&#xff09;&#xff1a;下面开始一一展开&#xff1a;创建型模式&#xff08;Creati…

.cda转换格式为mp3

http://wenku.baidu.com/view/ae3d451eff00bed5b9f31def.html

如何将CDA文件转换成MP3格式

如何将CDA文件转换成MP3格式 http://zhenshidianpu.anyplace.cn/article.php?articleId281439&articleActiondisplay

模型格式转换工具

一。keras_to_tensorflow https://github.com/amir-abdi/keras_to_tensorflow/blob/master/keras_to_tensorflow.py

PostgreSQL 数据类型转换,类型转换的三种格式

PostgreSQL 数据类型转换&#xff1a; type String;String ::type;CAST(String AS type); type:是指PostgreSQL的 数据类型。

pgsql的类型转换

第一种&#xff1a;双冒号方式。 第二种&#xff1a;cast函数方式。

CAD版本转换怎么操作?这些方法了解了吗

目前市场上有很多CAD版本。每个人的使用习惯和计算机配置都不一样。不同版本的CAD软件生成不同的CAD文件。虽然制作CAD文件的操作方法相似&#xff0c;但新旧版本存在兼容性问题。高版本的CAD软件可以看到低版本软件制作的设计图纸&#xff0c;但低版本工具看不到高版本工具制作…