前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Gitea 与 Drone 实践

Gitea 与 Drone 实践

作者头像
愧怍
发布2022-12-27 20:54:56
1.5K0
发布2022-12-27 20:54:56
举报

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

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

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

Gitea

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

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

安装

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

docker-compose.yml

代码语言:javascript
复制
version: '3'

networks:
  gitea:
    external: false

volumes:
  gitea:
    driver: local

services:
  server:
    image: gitea/gitea:1.17.1
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - gitea
    volumes:
      - gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '10800:3000'
      - '2221:22'

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

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

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

修改配置

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

注意

必须完全重启 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。

Drone 是面向繁忙开发团队的自助服务持续集成平台。相对于常见的Jenkins,选中 Drone 的原因在于它非常简洁,不像 Jenkins 那样复杂,同时它拥有可以满足基本需求的能力,并且提供了许多实用的插件,如GitHub,Email,微信,钉钉等

安装

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

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

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

server

代码语言:javascript
复制
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

runner

代码语言:javascript
复制
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

查看连接情况

代码语言:javascript
复制
docker logs runner

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

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

实战

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

部署前端项目

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

代码语言:javascript
复制
kind: pipeline
type: docker
name: ci

steps:
  - name: install & build
    image: node
    commands:
      - npm config set registry http://mirrors.cloud.tencent.com/npm/
      - npm i -g pnpm
      - pnpm i
      - pnpm run build

  - name: upload
    image: appleboy/drone-scp
    settings:
      host:
        from_secret: host
      username:
        from_secret: username
      password:
        from_secret: password
      port: 22
      command_timeout: 2m
      target: /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 插件来执行终端命令来删除,例如

代码语言:javascript
复制
kind: pipeline
name: default

steps:
  - name: deploy
    image: appleboy/drone-ssh
    environment:
        DEPLOY_PATH:
            from_secret: /www/wwwroot/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}
    settings:
        host:
            from_secret: host
        username:
            from_secret: username
        password:
            from_secret: password
        port: 22
        command_timeout: 2m
        envs: [DEPLOY_PATH]
        script:
            - rm -rf $${DEPLOY_PATH}

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

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

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

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

image-20220928152635955
image-20220928152635955

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

image-20220928152725853
image-20220928152725853

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

部署 nest 项目

TODO。。。

参考文章

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Gitea​
    • 安装​
      • 修改配置​
        • 迁移仓库​
          • 镜像仓库​
          • Drone​
            • 安装​
            • 实战​
              • 部署前端项目​
                • 部署 nest 项目​
                • 参考文章​
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档