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

news2024/11/18 17:30:57

目录

  • 前言
  • 项目目录结构
    • 目录结构
    • 测试文件
  • 文件内容
    • 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:
  #    - push


steps: # 定义流水线执行步骤,这些步骤将顺序执行
 1. name: package # 流水线名称
    image: maven:3-jdk-8 # 定义创建容器的Docker镜像
    volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置
      - name: maven-cache
        path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载
      - name: maven-build
        path: /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.sh
 2. name: build-start
    image: 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-build
    host:
      path: /mydata/maven/build # 从宿主机中挂载的目录
 4. name: maven-cache
    host:
      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.coloradmin.cn/o/681724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SynchronousQueue源码

介绍 SynchronousQueue作为阻塞队列的时候&#xff0c;对于每一个take的线程会阻塞直到有一个put的线程放入元素为止&#xff0c;反之亦然。在SynchronousQueue内部没有任何存放元素的能力。所以类似peek操作或者迭代器操作也是无效的&#xff0c;元素只能通过put类操作或者ta…

JDBC 和数据库连接池

JDBC 和数据库连接池 1. JDBC 概述 1.1 基本介绍 JDBC为访问不同的数据库提供了统一的接口&#xff0c;为使用者屏蔽了细节问题Java程序员使用JDBC&#xff0c;可以连接任何提供了JDBC驱动程序的数据库系统&#xff0c;从而完成对数据库的各种操作。JDBC的基本原理图[重要!]…

【编译、链接、装载十三】内存中的栈——图解栈的运行过程

【编译、链接、装载十三】内存中的栈——图解栈的运行过程 一、程序的内存布局二、栈1、什么是栈2、寄存器 三、函数执行四、结合汇编——分析函数调用1、demo2、反汇编3、反汇——图解反汇编、栈帧、寄存器 一、程序的内存布局 看看加上动态链接之后进程的地址空间是如何分布…

详解Spring配置文件

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;JavaEE、Spring Spring配置文件 1、简介2、XML3、\<Bean\>3.1、Bean标签范围配置3.2、生命周期3.3、⭐实例…

word文档批量生成工具(附免费软件)(按Excel表格内容自动替换内容生成文档)

批量生成word文档是让人无比厌恶但有时又不得不做的事情。比如学校要给拟录取的学生发通知书&#xff0c;就可能需要批量生成一批只有“姓名”、“学院”和“专业”不同&#xff0c;其他内容都相同的word文档以供打印&#xff08;事实上直接生成pdf是更好的选择&#xff0c;这个…

chatgpt赋能python:Python如何计算p值?

Python如何计算p值&#xff1f; 在统计学中&#xff0c;p值是估计观察到的结果是由随机因素导致的概率。在Python中&#xff0c;我们可以使用一些统计库来计算p值。 常见的统计库 Python中有很多统计库可以用来计算p值。其中&#xff0c;SciPy是最常用的统计库之一。它包含了…

【American English】去超市买东西常用对话,物品名字

不懂不丢人&#xff0c;不懂装懂才丢人。最近有点犯这毛病&#xff0c;多写一些东西消除一下。 无论什么知识都是多了才能成体系&#xff0c;更多自己在美国的小总结可见专栏&#xff1a;English。 文章目录 找寻物品优惠或折扣试吃结账退货离开 找寻物品 Excuse me, where can…

Linux——文件的概念、操作和理解

引言 文件 文件内容 文件属性 要操作文件&#xff0c;就要先打开文件。根据冯诺依曼体系&#xff0c;只能操作内存中的数据。因此要先把文件内容加载到存储器&#xff0c;即内存中。 文件接口 语言层面的文件接口 FILE* fopen(const char *path, const char *mode); int …

网页3行字,成立4周就快成独角兽!大模型创业狂飙中

先来看看这家公司的官网截图&#xff1a; 对的&#xff0c;你没有看错&#xff0c;加上公司名字也就只有4行字。 人工智能正在迅速发展&#xff1a;一家成立仅四周的初创公司获得了1.13亿美元的种子轮融资&#xff0c;将与OpenAI竞争&#xff0c;在构建、训练和应用大型语言模…

Ubuntu 如何启动、停止或重启服务

在本文中&#xff0c;我们向您介绍在 Ubuntu 中启动、停止和重启服务的方法。 列出 Ubuntu 中的所有服务 在开始之前&#xff0c;先获取计算机上所有服务的列表&#xff0c;因为我们需要知道服务名称来管理服务。 service --status-all 它将显示 Ubuntu 上的完整服务列表。…

八卦图总结

第一阶段知识汇总 版本号&#xff1a;V1.1 作 者 姓 名&#xff1a; 学 科 专 业&#xff1a; 软件测试 文 档 类 型&#xff1a;第一阶段 汇 总 测 试 基 础 …

strapi系列--如何建表并在原有官方自动生成的api基础上扩展接口,定制化自己的业务逻辑

为什么要进行后端定制呢&#xff1f; 在实际开发过程中&#xff0c;项目中有些需求需要我们定制化自己的业务逻辑&#xff0c;那么我们该如何处理这个需求呢&#xff1f;本文以图文并茂的形式&#xff0c;基于原有官方自动生成的api&#xff0c;定制一个我们自己的业务逻辑接口…

“破解求职之谜:应届生如何应对职场场景挑战?

今天&#xff0c;我想与你分享一个关于应届生面试的故事。这是一个真实且令人深思的故事&#xff0c;也是我个人在求职过程中的一次经历&#xff0c;这也是对尚未面试者的警醒对已面试者的勉励。 在暑期还未开始之前&#xff0c;我充满着憧憬和期待地投递了许多简历&#xff0c…

chatgpt赋能python:Python第几行是什么?了解Python中的行号

Python第几行是什么&#xff1f;了解Python中的行号 如果你是一名Python工程师&#xff0c;你肯定曾经遇到过错误提示中提到的Python第几行。那么Python中的行号是什么&#xff1f;本文将为您解答关于Python中行号的一些基本问题。 什么是Python中的行号&#xff1f; 在Pyth…

测试用例设计方法

等价类划分法 设计测试用例步骤 需求分析划分等价类&#xff1a;有效和无效设计用例 无效有5种情况 规则&#xff08;需求本身&#xff09;长度类型是否为空&#xff08;必填项&#xff09;是否重复 案例1&#xff1a;QQ号6-10位自然数 划分等价类 有效等价类有效数据无…

深入理解深度学习——BERT派生模型:BART(Bidirectional and Auto-Regressive Transformers)

分类目录&#xff1a;《深入理解深度学习》总目录 UniLM和XLNet都尝试在一定程度上融合BERT的双向编码思想&#xff0c;以及GPT的单向编码思想&#xff0c;同时兼具自编码的语义理解能力和自回归的文本生成能力。由脸书公司提出的BART&#xff08;Bidirectional and Auto-Regre…

[Hadoop] 期末答辩问题准备

0.相关概念 1.什么是NameNode&#xff1f; NameNode是整个文件系统的管理节点&#xff0c;它维护着整个文件系统的文件目录树&#xff0c;文件/目录的元信息和每个文件对应的数据块列表。并接收用户的操作请求。 2.SecondaryNameNode的主要作用&#xff1f; SecondaryNameN…

JUC阻塞队列BlockingQueue---ArrayBlockingQueue

JUC阻塞队列BlockingQueue---ArrayBlockingQueue ArrayBlockingQueue示例代码原理构造方法内部常量入队put方法出队take方法 什么是阻塞队列&#xff1f; ArrayBlockingQueue ArrayBlockingQueue是典型的有界阻塞队列&#xff0c;其内部是用数组存储元素的&#xff0c;初始化…

chatgpt赋能python:Python程序安装指南

Python程序安装指南 介绍 Python 是一种高级编程语言&#xff0c;广泛应用于数据分析、人工智能、Web开发等领域。安装 Python 程序是使用 Python 和运行 Python 脚本的必要步骤。在本文中&#xff0c;我们将提供详细的 Python 程序安装指南。 安装Python程序步骤 步骤1: 下…

1.1-python课程简介

一、python入门 1、python来源2、什么是python3、python编程软件下载4、python软件安装5、python软件运行和调试 1、python来源 Guido van Rossum 于1989年在荷兰国家数学和计算机科学研究所设计出来的。 2、什么是python Python 是一个高层次的结合了解释性、编译性、互动性…