搭建Gitea+Drone轻量级代码管理和CI服务

使用环境

IP地址 端口 所属服务
10.10.9.208 3000 Gitea网页管理服务
10.10.9.208 2222 SSH、HTTP下载代码服务
10.10.9.208 7500 Drone-Server服务
10.10.9.208 3100 Drone-Runner

Gitea

简介

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证,它是从Gogs发展而来的,因为Gogs由单一管理者做决定,因此诞生了Gitea,它采用社区管理模式,增加了诸多新特性,而且由社区众多的维护者来决定它的发展方向,因此拥有更强的生命力和发展潜力。

Gitea 的首要目标是创建一个极易安装,运行非常快速,安装和使用体验良好的自建 Git 服务。采用 Go 作为后端语言,只要生成一个可执行程序即可。并且他还支持跨平台,支持 Linux, macOS 和 Windows 以及各种架构,除了 x86,amd64,还包括 ARM 和 PowerPC.

功能特性

  • 支持活动时间线
  • 支持 SSH 以及 HTTP/HTTPS 协议
  • 支持 SMTP、LDAP 和反向代理的用户认证
  • 支持反向代理子路径
  • 支持用户、组织和仓库管理系统
  • 支持添加和删除仓库协作者
  • 支持仓库和组织级别 Web 钩子(包括 Slack 集成)
  • 支持仓库 Git 钩子和部署密钥
  • 支持仓库工单(Issue)、合并请求(Pull Request)以及 Wiki
  • 支持迁移和镜像仓库以及它的 Wiki
  • 支持在线编辑仓库文件和 Wiki
  • 支持自定义源的 Gravatar 和 Federated Avatar
  • 支持邮件服务
  • 支持后台管理面板
  • 支持 MySQL、PostgreSQL、SQLite3、MSSQL 和 TiDB(MySQL) 数据库
  • 支持多语言本地化(21 种语言)
  • 支持软件包注册中心(Composer/Conan/Container/Generic/Helm/Maven/NPM/Nuget/PyPI/RubyGems)

安装

Gitea的官方文档有中文版,其中介绍了多种安装方式,我们以docker部署为例,采用最基本的部署方式,即使用内部sqlite3为数据库,docker-compose部署配置文件如下:

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.17.2
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - SSH_PORT=2222
    restart: always
    networks:
      - gitea
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:2222"

其中环境变量的配置很多,我们可以在官方文档中查看,这里主要修改一下SSH_PORT的端口,因为默认使用22端口,这会和主机的ssh服务端口冲突,因此我们修改一下端口为2222,3000端口为网页管理端口,其他的配置在第一次访问时会通过网页的方式配置。

使用命令启动镜像:

docker-compose up -d

配置

因为比较轻量级,所以启动速度非常快,第一次访问网页端会进入初始配置页面

这里需要配置的项目有以下几个:

  • 站点名称:名称随意配置
  • 服务器域名:就是宿主机的IP地址或者绑定的域名
  • 基础URL:这里就是网页访问地址,把localhost改为宿主机IP或者域名即可

在可选设置中需要修改一些配置,服务器和第三方服务设置管理员账号设置

服务器和第三方服务设置

这里主要是启用本地模式,因为默认会使用CDN连接一些外网的资源,对于服务器不能连接外网的公司,必须要启用本地模式。一般我们都是企业内使用,因此不需要用户注册,通过管理员创建账号即可。

管理员账号设置

默认第一个注册用户会成为管理员,我们直接在这里创建好管理员信息,这里要注意的是用户名有一些保留字是不能使用的,例如admin

配置好以后点击“立即安装”就可以进入用户页面。

导入外部仓库代码

Gitea支持从以下代码管理仓库导入代码库

如果要支持导入,还要进行一些配置,在gitea/conf/app.ini文件中增加如下配置

[migrations]
ALLOW_LOCALNETWORKS = true


[webhook]

ALLOWED_HOST_LIST = 10.10.9.208/16



然后重启容器

docker-compose restart

Drone

简介

Drone 是一款基于 Docker 的 CI/CD 工具,所有编译、测试、发布的流程都在 Docker 容器中进行.

开发者只需在项目中包含 .drone.yml 文件,将代码推送到 git 仓库,Drone 就能够自动化的进行编译、测试、发布。

为什么使用 Drone 作为 CI/CD 工具

  • 功能灵活强大:构建、测试、发布、部署,你想干什么都可以,一套系统全搞定
  • 兼容性好:支持所有 SCM、所有平台、所有语言
  • 环境部署简单:原生支持 Docker 容器,启动两个容器就完成了部署,其它构建、测试、部署工具在使用时会自动从 docker 仓库拉取
  • 扩展性强:强大的插件系统,丰富的插件可以免费使用,也可以自定义
  • 配置简单:正如官方宣传的那样,“configuration as a code”,所有功能、步骤、工具、命令,一个 yaml 配置文件全搞定
  • 维护简单:直接复用 SCM 的账号体系和权限管理,无需注册用户、分配权限

安装

Drone 由两部分构成:

  • Server

    负责任务调度

  • Runner

    执行 Pipeline 的具体任务

因此安装有两个镜像drone/drone:2.13.0drone/drone-runner-docker:1.8.2,首先下载镜像

docker pull drone/drone:2.13.0
docker pull drone/drone-runner-docker:1.8.2

Drone和Jenkins这类CI工具不一样,它必须绑定指定的Git仓库,因此在启动的时候必须配置好对应的仓库信息。我们以Gitea仓库为例。

准备工作

首先在Gitea里面创建好对应的验证信息

生成的令牌要记住,Drone使用OAuth2连接Gitea,这里创建好应用,重定向URI配置Drone服务的登录地址,虽然我们还没有创建好Drone服务,但是这里可以先填写好地址和端口,后面创建Drone服务的时候注意要和这里保持一致。

记录下客户端ID和客户端密钥。Drone是包含server和runner的,他们之间的通信需要进行加密,可以通过如下方式生成密钥:

openssl rand -hex 16

drone-server启动文件配置

version: "3"

services:
  drone-server:
    image: drone/drone:2.13.0
    container_name: drone-server
    restart: always
    ports:
      - "7500:80"
    volumes:
      - ./data:/data
    environment:
      - DRONE_GITEA_SERVER=http://10.10.9.208:3000
      - DRONE_GITEA_CLIENT_ID=9eedfa2e-b0aa-497e-aaee-c7434755fd9c
      - DRONE_GITEA_CLIENT_SECRET=gto_zdessdivpj4gly2lqq2bby3qvsa6xbbrbrngj3rv24pzotsfjw4q
      - DRONE_RPC_SECRET=7cc96b3ca902a735958033cb233abb6e
      - DRONE_SERVER_HOST=10.10.9.208:7500
      - DRONE_SERVER_PROTO=http
      - DRONE_USER_CREATE=username:xingxing,admin:true
  • DRONE_GITEA_CLIENT_ID

    (必填) Gitea OAuth 客户端ID

  • DRONE_GITEA_CLIENT_SECRET

    (必填)Gitea OAuth 客户端密钥

  • DRONE_GITEA_SERVER

    (必填)Gitea 服务器地址,例如 http://10.10.9.208:3000。注意填写准确的 http(s) 协议,否则你会看到来自 Gitea 的错误报告:unsupported protocol scheme

  • DRONE_RPC_SECRET

    (必填)在准备工作中使用 openssl rand -hex 16 生成的共享密钥。这个密钥用于验证 Drone Server 和 Runner 之间的 RPC 连接。因此,在 Server 和 Runner 上都必须使用相同的密钥。

  • DRONE_SERVER_HOST

    (必填)访问 Drone 时所用的域名或 IP 地址。如果使用 IP 地址,还应该包含端口。 例如 http://10.10.9.208:7500

  • DRONE_SERVER_PROTO

    (必填)设置服务器的协议,使用:httphttps。 默认为 https

  • DRONE_USER_CREATE

    管理员配置,这里的管理员用户名是Git仓库的用户名,不一定是Git仓库的管理员,只要是Git仓库的用户即可

配置完后启动drone-server服务

docker-compose up -d

然后访问http://10.10.9.208:7500会自动跳到Gitea的授权页面,授权后填写邮箱、用户名、公司即可进入页面。在这里要注意一点,Drone是没有登录界面的,那么它是怎么获取到Gitea中的仓库进行构建的呢?

Drone和Gitea共用用户信息,当我们访问Drone的时候,如果在相同的浏览器内登录了Gitea,那么Drone就会使用当前Gitea登录用户的信息获取仓库数据;如果没有登录Gitea,那就会跳转到Gitea等登录页面。这个地方让我困惑了很久,一直不知道为什么有些仓库可以获取到,有些仓库又获取不到。还要注意一点,如果已经打开了Drone,我们再切换了Gitea登录的用户,那么Drone是不会自动进行切换的,这个时候需要在Drone中退出登录,再刷新页面登入即可实现切换账号。

进入后我们就看到了当前可以构建的仓库,如果在Gitea增加了参与的项目,而这里又看不到,可以点击Sync按钮进行手动同步。然后进入仓库激活它,进行一些设置。

不要接收pull和fork的WebHook消息,Trusted这里只有Drone管理员才能看到,其他用户是看不到的。

drone-runner启动文件配置

version"3"

services:
  drone-runner:
    image: drone/drone-runner-docker:1.8.2
    restart: always
    container_name: drone-runner
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:rw
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=10.10.9.208:7500
      - DRONE_RPC_SECRET=7cc96b3ca902a735958033cb233abb6e
      - DRONE_RUNNER_CAPACITY=2
      - DRONE_RUNNER_NAME=runner
  • DRONE_RPC_HOST

    填写 Drone Server 的主机名(以及可选填的端口号)

  • DRONE_RPC_PROTO

    传输协议:httphttps

  • DRONE_RPC_SECRET

    与 Drone Server 共享的密钥,就是在准备工作中使用 openssl rand -hex 16 生成的共享密钥

  • DRONE_RUNNER_CAPACITY

    Runner 可以并发执行的流水线数量,默认:2

  • DRONE_RUNNER_NAME

    自定义 Runner 名称

验证runner是否成功。

docker logs drone-runner

日志中包含以下内容则表示启动成功

starting the server
successfully pinged the remote server 

使用构建

Drone是采用配置文件的方式进行流水线配置的,因此我们首先要在对应的仓库根目录下创建.drone.yml文件,内容如下:

kind: pipeline
type: docker
name: test

文件提交后就会自动触发构建

我们可以通过手动在Drone中创建一个流水线也可以通过配置触发方式来自动触发,在使用Jenkins的时候,我们需要在Git仓库中配置WebHook,并且选择WebHook的触发事件,这样才能自动触发构建,但是在安装配置Drone的时候我们并没有配置触发方式,为什么添加了.drone.yml文件就自动触发构建了呢?原因是因为Drone是与Git仓库绑定的,当我们在创建Drone服务的时候已经配置了Gitea仓库的认证信息,那么当我们在Drone中激活一个项目的时候,Drone就会自动在Gitea中为对应的项目创建WebHook。

进入WebHook编辑页面,会看到默认帮我们选中了一些触发条件

在这里配置一下我们的触发条件,就可以自动触发构建。在这里要注意一下,Gitea在触发WebHook的时候,必须配置可以接收WebHook消息的列表,还记得我们在上面配置的webhook.ALLOWED_HOST_LIST吗?主要就是在这里使用的,如果没有配置,那么触发以后就会报错,报错信息可以在WebHook配置页面的下方看到。

到这里我们的Gitea+Drone自动化构建系统就完成了,下面还有一个小技巧。在Drone的项目配置页面,我们会看到Badges选项。

把里面的内容复制出来,添加到项目的README.md文件头部,这样我们就可以在Gitea项目页面中看到当前流水线的状态,就像右上角红框中显示的那样。

本文作者:星星在线

本文链接:https://www.cnblogs.com/small-bud/p/16829299.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   星星在线  阅读(431)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 Victory REOL
Victory - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.