微服务 云原生:基于 Gogs + Drone 进行项目 CI/CD

传统构建部署

以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。

一个简单的例子:

  • 前端:
    • 项目名:kubemanagement-web
    • 技术栈:Vue
  • 后端:
    • 项目名:kubemanagement-server
    • 技术栈:Golang

tips: 不同语言对应的构建逻辑编写不同。关于 Dockerfile 以及 docker-compose 如何编写,请查阅官方文档,此处不在赘述。

1. 编写前端 Dockerfile 文件:

#第一阶段构建
FROM node:16.13.2 as builder
WORKDIR /app/kubemanagement-webCOPY . .RUN npm config set registry https://registry.npmmirror.com
RUN npm install# 开始构建
RUN npm run build:prod# 第二阶段构建
FROM nginx
COPY --from=builder /app/kubemanagement-web/dist/ /usr/share/nginx/html/
COPY --from=builder /app/kubemanagement-web/default.conf.template /etc/nginx/templates/default.conf.template
EXPOSE 80

2. 编写后端 Dockerfile 文件:

FROM golang:1.20-alpine3.16 as builder
WORKDIR /go/src/kubemanagement.com/server
COPY . .RUN go env -w GO111MODULE=on \&& go env -w GOPROXY=https://goproxy.cn,direct \&& go env -w CGO_ENABLED=0 \&& go env \&& go mod tidy \&& go build -o server .FROM alpine:latestLABEL MAINTAINER="zj20162325@163.com"WORKDIR /go/src/kubemanagement.com/server
COPY --from=0 /go/src/kubemanagement.com/server/config.yaml ./config.yaml
COPY --from=0 /go/src/kubemanagement.com/server/.kube/config ./.kube/config
COPY --from=0 /go/src/kubemanagement.com/server/server ./
EXPOSE 8082
ENTRYPOINT ./server

3. 分别构建镜像:

  • 前端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0 .
  • 后端
docker build -t harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0 .

结果如下:
在这里插入图片描述
如果需要推送镜像,比如推送到私有 Harbor 仓库,可执行:

docker push harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0
docker push harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0

4. 编写 docker-compose.yml 文件:

version: "3"networks:network:ipam:driver: defaultconfig:- subnet: '177.7.0.0/16'services:web:container_name: kubemanagement-webimage: harbor.kubemanagement.com/kubemanagement/kubemanagement-web:v1.0restart: alwaysenvironment:BACKEND_HOST: 'http://177.7.0.12:8082/'ports:- '8081:80'depends_on:- servernetworks:network:ipv4_address: 177.7.0.11server:container_name: kubemanagement-serverimage: harbor.kubemanagement.com/kubemanagement/kubemanagement:v1.0restart: alwaysports:- '8082:8082'networks:network:ipv4_address: 177.7.0.12

使用 docker-compose 自动完成包括构建镜像,创建服务,启动服务,并关联服务相关容器的一系列操作:

docker-compose up -d

结果如下:
在这里插入图片描述
此时通过相应 ip:port 即可访问页面,实例页面如下:
在这里插入图片描述

使用 Gogs & Drone 持续集成

在这里插入图片描述

Gogs

编写 gogs 的 docker-compose.yml 文件

version: "3"volumes:gogsdata:services:gogs:container_name: gogsimage: gogs/gogs:0.12.10volumes:- gogsdata:/datarestart: alwaysports:- '10022:22'- '10880:3000'

执行:

docker-compose up -d

结果如下:
在这里插入图片描述
通过 10880 端口访问:
在这里插入图片描述
数据库根据需求来选,这里选择最轻量级的 SQLite3 作为演示,其他配置项可以默认,由于编写 docker-compose.yml 时做了端口映射,主要修改域名、端口号,如下:
在这里插入图片描述
编写完可选配置后点击立即安装,我这里就简单设置管理员信息:
在这里插入图片描述
gogs 的使用与 git 基本一致,简单创建一个仓库并提交信息:
在这里插入图片描述

Drone

当前时间:2023/8/7 23:45:48
后续内容明天再完成,即 2023/8/8 之前

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80281.html

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

相关文章

Java中Date方法详解

先进行专栏介绍 本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。希望能对大家能有所帮助,同时也是请大家对我进行监督,对我写的代码进行…

eeglab(自用)

目录 1.加载、显示数据 2.绘制脑电头皮图 3.绘制通道光谱图 4.预处理工具 5.ICA去除伪迹 5. 提取数据epoch 1.加载、显示数据 观察事件值(Event values):该数据集中包含2400个事件,每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…

【Linux命令详解 | cat命令】Linux系统中用于显示或连接文件的命令

文章标题 简介一,参数列表二,使用介绍1. 显示文件内容2. 创建文件3. 连接文件4. 显示行号5. 压缩空行6. 显示特殊字符7. 显示行号和特殊字符8. 从标准输入读取9. 显示文件开头或结尾10. 备份文件11. 显示文件内容至多屏幕大小12. 转义正则表达式13. 显示…

java文件

一.File类 二.扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件 我的代码: import java.io.File; import java.io.IOException; import java.util.Scanner;public class Tes…

瑞芯微RK3568核心板-4G联网测试

​ 🌈引言 RK3568是瑞芯微针对AIOT和工业市场推出的一款高性能、低功耗、功能丰富的应用处理器。它采用了四核ARM架构64位Cortex-A55处理器,主频高达2.0GHz,集成瑞芯微自研1TOPS算力NPU, 同时集成Mali-G52 2EE GPU,支持4K60fps …

React Native连接Zebra斑马打印机通过发送CPCL指令打印(Android 和 iOS通用)

自 2015 年发布以来,React Native 已成为用于构建数千个移动应用程序的流行跨平台移动开发框架之一。通常,我们有开发人员询问如何将 Link-OS SDK 与 React Native 应用程序集成,以便在 Zebra 打印机上打印标签。在本教程中,我们将…

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。 神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能: webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持,以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手:隔行变色 -S实际是--save的简写,表示安装的第三方…

以太网DHCP协议(十)

目录 一、工作原理 二、DHCP报文 2.1 DHCP报文类型 2.2 DHCP报文格式 当网络内部的主机设备数量过多是,IP地址的手动设置是一件非常繁琐的事情。为了实现自动设置IP地址、统一管理IP地址分配,TCPIP协议栈中引入了DHCP协议。 一、工作原理 使用DHCP之…

Java 并发容器和框架Fork/Join详解

目 录 一 使用场景 1 大规模数据处理 2 复杂计算 3 并行搜索 4 并行排序 二 Fork/Join框架介绍 三 Fork/Join框架模块 四 Fork/Join框架核心思想 1分治思想(Divide-and-Conquer) 2 work-stealing(工作窃取)算法 五 Fork/Join框架执行流程 1 实现原理: 2…

消息队列(3) -封装数据库的操作

前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…

智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异

智慧城市作为人类社会发展的新阶段,正日益引领着我们迈向数字化未来的时代。在智慧城市的建设过程中,地理信息系统(GIS)扮演着举足轻重的角色。而在GIS的发展中,二维和三维GIS作为两大核心技术,在城市规划与…

thinkphp8.0多应用模式下提示控制器不存在

thinkphp 8.0 开启多应用模式 1、按照官方文档说明 ,已经安装了 think-multi-app composer require topthink/think-multi-app 2、控制器的命名空间也没写错。 3、访问路径与目录名、控制器、方法名一样,访问地址是没错的。 4、网上有说,在…

机器学习深度学习——序列模型(NLP启动!)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——卷积神经网络(LeNet) 📚订阅专栏:机器学习&&深度…

Android 网络协议与网络编程

一、TCP/IP协议 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联 协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP 协议组成。协议采用了4层的层级结构。…

Debian安装和使用Elasticsearch 8.9

命令行通过 .deb 包安装 Elasticsearch 创建一个新用户 adduser elastic --> rust # 添加sudo权限 # https://phoenixnap.com/kb/how-to-create-sudo-user-on-ubuntu usermod -aG sudo elastic groups elastic下载Elasticsearch v8.9.0 Debian 包 https://www.elastic.co/…

【PCB专题】Allegro中如何自动查找并删除不使用的规则

在Allegro软件使用中,我们经常是从上一个版本修改而来的。那么就会遇到有些多余规则没有使用的情况,怎么能够知道哪些规则没有使用并删除呢? 如下所示在Electrical中的All Constraints下存在SDIO规则和WIFI_SDIO规则。这两个规则是重复的,只是名称不同而已。 在规则的使…

python调用pytorch的clip模型时报错

使用python调用pytorch中的clip模型时报错:AttributeError: partially initialized module ‘clip’ has no attribute ‘load’ (most likely due to a circular import) 目录 现象解决方案一、查看项目中是否有为clip名的文件二、查看clip是否安装成功 现象 clip…

防火墙第二次作业

一、什么是防火墙? 百度给出个一个定义:防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。 通俗的来讲&#…

TestDataLake在提升测试效能方面的实践

目录 1.背景 2.预期目标 3.系统设计和实现 3.1系统功能组成 3.2 数据智能生成 3.3 接口遍历测试 4.应用效果和收益 5.后续规划 1.背景 随着软件开发的迅速发展,测试数据管理变得越来越复杂。手动创建测试数据需要耗费大量时间和精力,同时容易出…