之前搭建过 Gitlab,但是就只是搭建而已,并未实际使用,因为我大部分的代码还是存放在 Github 上。

并且大部分项目都是在 Vercel 上运行的(Vercel 是真好用),但是最近国内访问 vercel 情况不容乐观,貌似被墙了呜呜。然后 Gitlab 的资源占用非常严重,几乎占用了一半的服务器性能,可 点我 查看运行状态。与此同时,随着很多私有项目越来越多,使用 git 私有仓库以及 Vercel 部署,肯定不如自建私有 git 服务和自有服务器部署使用体验来好。

于是就想搭建一个轻量级仓库,同时支持 CI/CD。经过一番的调研,决定使用 Gitea 和 Drone 作为解决方案。

Gitea

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证.

你可以在 横向对比 Gitea 与其它 Git 托管工具 查看 gitea 与其他 git 工具的优势与缺陷。

安装

这里我选用 Docker 进行安装,安装文档可在官方文档中查看其他安装方式

version: '3'networks:gitea:external: falsevolumes:gitea:driver: localservices:server:image: gitea/gitea:1.17.1container_name: giteaenvironment:- USER_UID=1000- USER_GID=1000restart: alwaysnetworks:- giteavolumes:- gitea:/data- /etc/timezone:/etc/timezone:ro- /etc/localtime:/etc/localtime:roports:- '10800:3000'- '2221:22'

根据自身需求配置 docker-compose.yml 内容。运行 docker-compose up 等待部署

服务器防火墙与云服务安全组都需要开放端口才可访问,服务器ip:10800,将会出现如下界面

因为修改配置相对比较麻烦,所以在首次安装的时候,请根据实际需求进行配置安装。

修改配置

假设要修改其中的配置的话,gitea 的后台管理面板是无法直接修改的。需要到 /data/gitea/conf/app.ini 中修改,具体修改的配置 参阅 自定义 Gitea 配置 - Docs

:::caution 注意
必须完全重启 Gitea 以使配置生效。
:::

迁移仓库

从其他第三方 git 仓库迁移到 gitea,可以访问https://git.kuizuo.cn/repo/migrate 来迁移仓库

稍等片刻,取决于访问 github 仓库的速度。有可能还会迁移失败,就像下面这样。

所以可以申请访问令牌(Access Token),在 New Personal Access Token 处创建。迁移成功后,如下图所示

镜像仓库

很大部分时间,gitea 只能作为我的副仓库,或者说 github 的镜像仓库。

gitea 也提供镜像仓库的方案,官方文档Repository Mirror

Drone

由于 Gitea 并没有内置 CI/CD(持续集成/持续部署) 的解决方案,所以需要配置第三方的,这里推荐使用 Drone CI。

安装

由于我们使用了 gitea,所以 drone 中选择 gitea 来安装,这是官方文档 Gitea | Drone,照着操作即可。

需要安装 Server 和 Runner,一个是 Drone 的服务,另一个用于检测 GIt 记录,以重新构建项目。

这里贴下 drone 的 docker 配置(根据文档和自己部署的 git 服务配置来替换)。

docker run \--volume=/var/lib/drone:/data \--env=DRONE_GITEA_SERVER=https://try.gitea.io \--env=DRONE_GITEA_CLIENT_ID=05136e57d80189bef462 \--env=DRONE_GITEA_CLIENT_SECRET=7c229228a77d2cbddaa61ddc78d45e \--env=DRONE_RPC_SECRET=super-duper-secret \--env=DRONE_SERVER_HOST=drone.company.com \--env=DRONE_SERVER_PROTO=https \--publish=80:80 \--publish=443:443 \--restart=always \--detach=true \--name=drone \drone/drone:2
docker run --detach \--volume=/var/run/docker.sock:/var/run/docker.sock \--env=DRONE_RPC_PROTO=https \--env=DRONE_RPC_HOST=drone.company.com \--env=DRONE_RPC_SECRET=super-duper-secret \--env=DRONE_RUNNER_CAPACITY=2 \--env=DRONE_RUNNER_NAME=my-first-runner \--publish=3000:3000 \--restart=always \--name=runner \drone/drone-runner-docker:1

执行完毕后,然后访问线上的 drone 服务,点击 CONTINUE 将会跳转到你的 Git 授权页面

点击应用授权,再次回到 drone,此时页面 Dashboard 列出了 gitea 的所有仓库(如果没有的话,可以点击右上角的 SYNC 来同步)。

实战

上述只是安装了,我们还需要编写 .drone.yml 配置文件来告诉 drone 我们要做什么,编写过程与 Github Action类似。相关文档: Pipeline | Drone

部署前端项目

这里就选用 antfu/vitesse 作为演示。这里省略 clone 仓库的步骤。进入到自己的 gitea 仓库,然后添加 .drone.yml 文件,内容如下:

kind: pipeline
type: docker
name: cisteps:- name: install & buildimage: nodecommands:- npm config set registry http://mirrors.cloud.tencent.com/npm/- npm i -g pnpm- pnpm i- pnpm run build- name: uploadimage: appleboy/drone-scpsettings:host:from_secret: hostusername:from_secret: usernamepassword:from_secret: passwordport: 22command_timeout: 2mtarget: /www/wwwroot/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}source:- ./dist

这里对 .drone.yml 配置进行详解:

其中 build 这个不用多说,与 node 构建相关的,不过多介绍。

upload 则使用appleboy/drone-scp插件,可以将构建出来的文件通过发送到服务器指定位置。在这里 source 对应就是构建的文件,target 则是要移动的位置,这里的 /www/wwwroot/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME} 对应本项目为 /www/wwwroot/kuizuo/vitesse。此外 ssh 的 host,username,password 或 key,都作为环境变量(私有变量的方式传递,这在 drone 的控制台中可以设置)。

由于每次构建可能需要删除原有的已部署的资源文件,那么可以使用 appleboy/drone-ssh 插件来执行终端命令来删除,例如

kind: pipeline
name: defaultsteps:- name: deployimage: appleboy/drone-sshenvironment:DEPLOY_PATH:from_secret: /www/wwwroot/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}settings:host:from_secret: hostusername:from_secret: usernamepassword:from_secret: passwordport: 22command_timeout: 2menvs: [DEPLOY_PATH]script:- rm -rf $${DEPLOY_PATH}

具体就因人而异了,这里我仅作为演示。

大致介绍完毕(其实已经介绍差不多了),有关更多插件可以参阅 drone 插件。这里开始演示,进入 drone 页面,找到仓库,默认情况下,所有仓库都处于未激活状态。

点击 ACTIVATE REPOSITORY 根据选项选择,点击右上角的NEW BUILD选择分支,添加 drone 环境变量(私有变量),即上面的 from_secret 后面的内容(host,username,password),即可开始运行。

静等 PIPELINE 执行完毕,结果如下

此时打开宝塔,跳转到指定目录下,就可以看到构建的内容都已经放到指定位置了

这时候只需要配置下 nginx,就能将页面展示到公网上,这里就不在这里赘述。当完成上述配置完毕后,每次只需要 pull request,drone 就会自动拉取 gitea 的代码,并开始执行.drone.yml中的任务。

部署 nest 项目

TODO。。。

参考文章

【CI/CD】搭建 drone 服务,构建前端 cicd 工作流,实现博客的自动化打包并部署 - 掘金 (juejin.cn)

单机部署 CI/CD 进阶版:宝塔+gitea+drone | Laravel China 社区 (learnku.com)

Gitea 与 Drone 实践相关推荐

  1. 搭建Gitea和Drone环境

    搭建Gitea和Drone环境 参考文章 前言 环境 参考文章 https://docs.gitea.io/zh-cn/comparison/ https://github.com/go-gitea/ ...

  2. 轻量级CI/CD自动构建平台Gitea+Drone保姆级实践教程

    目录 1.关于Gitea 1.1 gitea特性 1.2 快速安装 1.2.1 环境依赖 1.2.2 安装gitea 1.2.3 启动 1.2.4 访问 1.2.5 创建一个测试仓库 2 关于Dron ...

  3. 自动化构建:gitlab gitlab-run ,maven的缓存 和 gitea drone drone-run

    #Started.gitlab-ci.ymlstages: # List of stages for jobs, and their order of execution- buildmaven-bu ...

  4. Gitea+Drone(K8S CI/CD)2

    先上pipeline kind: pipeline type: kubernetes name: defaultsteps: - name: build packageimage: golang:1. ...

  5. 这行代码好怪,再看一眼!聊聊在 Gitea 玩 Code Review

    大家好,我是鸭鸭. 今天给大家分享一波 Code Review 中的实用小技巧,熟练掌握这些小技巧后,保证能让你在同事的代码面前迅速打出 LGTM~ Code Review 的意义在于让可靠的代码更快 ...

  6. [小团队自动化](二) Drone CI使用Vault作为凭据存储 —— 打造自己的CI/CD工作流...

    写在前边 这一篇文章是基于 Gitea+Drone CI+Vault 打造属于自己的CI/CD工作流系列文章第二篇,让我们一起来完成 drone 与 vault 的搭配使用,这篇主要讲 vault 的 ...

  7. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  8. 游戏运维的最佳实践:搜狐畅游自动化运维之旅

    本文讲的是游戏运维的最佳实践:搜狐畅游自动化运维之旅[编者的话]本文作者见证了畅游游戏自动化运维平台的从无到有,通过在其中踩过的坑.解过的结,他向大家来阐述游戏运维的进阶之路.本文主要围绕畅游游戏管理 ...

  9. Docker从入门到实践

    一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...

最新文章

  1. CUDA中grid、block、thread、warp与SM、SP的关系
  2. 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计
  3. H5实现多图片预览上传,可点击可拖拽控件介绍
  4. php中嵌套html代码和html代码中嵌套php方式
  5. 【转】MS-DOS下怎样使用解压缩共具
  6. 记个SwitchButton笔记
  7. python 将一个列表切割成随机指定长度的多个列表
  8. BERT 的演进和应用
  9. property attribute: assign, strong, weak, unsafe_unretain and copy
  10. Nginx面试题整理
  11. 安装microsoft office 和visio遇到的那些事儿
  12. QQ9.5.9 28650防撤回补丁
  13. 秀米图文排版UEditor插件示例
  14. python编程拍卖算法
  15. Vue插件element-ui安装时报错error An unexpected error occurred: “https://registry.npmjs.org/element-ui: conn
  16. mysql复制技术与生产实践pdf下载
  17. [生存志] 第22节 历代大事件概览 五代十国
  18. java排序算法(一)冒泡排序
  19. 线程传值数据丢失_开放线程:如何防止数据丢失
  20. python实现自适应分辨率截取桌面图片并识别图片文字

热门文章

  1. 对勾函数_对勾函数的图像及其性质1.pptx
  2. win10恢复经典开始菜单_没有蜘蛛纸牌的日子怎么过?带你找回Win10自带的游戏...
  3. 超级码力在线编程大赛初赛 第2场 T1-T4题解
  4. 数据库原理与设计P163习题9答案
  5. 面对封号潮,跨境收款如何做到不受牵连?
  6. 【C语言进阶】带你深度剖析那些常见的字符函数(一)
  7. mysql中的resultt框没有了_mysql中的zentao.zt_config表格消失了
  8. 人机博弈 围棋程序GNU GO 所有版本源码及使用方法
  9. c语言和python区别,python和c语言的区别是什么
  10. dockers移盘挂载