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

目录

  • 前言
  • 项目目录结构
    • 目录结构
    • 测试文件
  • 文件内容
    • 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.hqwc.cn/news/1321.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全合规-网络安全工程师(一)

网络安全工程师的工作种类很多&#xff0c;当前这个图片说明了具体的工程师的工作种类有哪些&#xff0c;列举了一下。 互联网时代网络及科技迅速发展&#xff0c;随之而来的首要问题就是网络安全&#xff0c;因为已经出现的网络问题带来了巨大的经济损失&#xff0c;甚至各种…

设计模式-工厂模式

工厂模式 1、工厂模式简介2、工厂模式实现 1、工厂模式简介 工厂模式(Factory Pattern)是最常见的设计模式&#xff0c;该模式属于创建型模式&#xff0c;它提供了一种简单、快速、高效且安全创建对象的方式。工厂模式在接口中定义了创建对象的方法&#xff0c;而将创建对象的具…

设计模式->观察者设计模式和订阅者发布者设计模式的区别

设计模式->观察者设计模式和订阅者发布者设计模式的区别 一、先复习一下观察者设计模式的相关定义,优点,以及缺点1.定义观察者模式的三个典型例子 2.优点3.缺点4.观察者设计模式的主要角色5.代码举例完整代码 二、回答问题:观察者设计模式和订阅者发布者设计模式的区别 一、…

雅迪渐进、小牛徐行,两轮电动车“尖子生”竞争加剧

配图来自Canva可画 2023年中旬&#xff0c;两轮电动车品牌陆续上新车&#xff0c;对外展示品牌实力和创新力。 5月9日&#xff0c;哈啰智能电动车发布“极智系列”三款搭载了哈啰图灵T30智能平台的新车&#xff1b;5月10日&#xff0c;九号公司发布全新设计的E系列电摩顶配车型…

设计模式-观察者模式

观察者模式 1、观察者模式简介2、具体实现 1、观察者模式简介 观察者(Observer)模式指在被观察者的状态发生变化时&#xff0c;系统基于事件驱动理论将其状态通知到订阅模式的观察者对象中&#xff0c;以完成状态的修改和事件的传播。这种模式有时又叫做发布-订阅模式或者模型-…

Spring关于@Configuration配置处理流程解析

Configuration配置处理流程解析 AnnotationConfigApplicationContext基于注解配置ApplicationContext启动刷新流程Spring关于Configuration解析处理流程那些年被忽略问题 AnnotationConfigApplicationContext基于注解配置 Spring通过上下文应用AnnotationConfigApplicationCon…

MySQL-SQL存储过程/触发器详解(下)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

启动spring boot项目时加载配置文件报错的问题

最近把电脑重置了一下&#xff0c;然后重新安装各种软件&#xff0c;从gitee拉去项目到本地运行时居然启动报错了 Failed to load property source from file:/D:/program/IdeaProjects/layui/target/classes/application.yml 这是加载配置文件的时候失败了&#xff0c;提示一堆…

Mybatis-Plus:实现自定义SQL

目录 1.简介 2.自定义SQL具体实现 2.1.注解SQL 2.2.Wrapper传参注解SQL 2.3.Wrapper传参xml文件SQL 2.4.正常传参XML文件SQL 3.总结 1.简介 Mybatis-Plus&#xff08;以下简称MBP&#xff09;的初衷是为了简化开发&#xff0c;而不建议开发者自己写SQL语句的&#xff1b…

华为云CodeArts TestPlan测试设计:守护产品开发质量之魂

华为产品质量的守护神 华为云CodeArts TestPlan测试设计是华为产品质量的守护神。华为云CodeArts TestPlan提供多维度测试设计模板、“需求-场景-测试点-测试用例” 四层测试分解设计能力&#xff0c;启发测试人员发散性思维&#xff0c;对项目环境、测试对象、质量标准、测试…

深入理解 Golang: Goroutine 协程

进程用来分配内存空间&#xff0c;是操作系统分配资源的最小单位&#xff1b;线程用来分配 CPU 时间&#xff0c;多个线程共享内存空间&#xff0c;是操作系统或 CPU 调度的最小单位&#xff1b;协程用来精细利用线程。协程就是将一段程序的运行状态打包&#xff0c;可以在线程…

java之路——带你了解Hibernate与基本过程

文章目录 前言一、Hibernate用来干嘛的二、Hibernate与mybatisHibernate的基本开发步骤 前言 Hibernate框架的发展可以追溯到2001年&#xff0c;它在过去的几年里获得了广泛的应用和持续的发展。 其中的发展演变&#xff1a; 初期版本&#xff08;2001-2006年&#xff09;&am…