从零开始打造自托管 CI/CD:Gitea Actions 安装、设置与使用全攻略

[复制链接]
发表于 2025-10-16 15:44:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
三言两语的解说Gitea Actions办理的痛点

一、什么是 Gitea Actions?为什么使用 Gitea Actions?

1.1 Gitea Actions 简介

Gitea Actions 是 Gitea 生态内的 CI/CD 办理方案,它与 GitHub Actions 类似,可以让开发者在代码库(Repository)内直接编写工作流(Workflow),实现主动化构建、测试、摆设和其他利用。Gitea 是一个轻量化的、自托管的 Git 服务,当我们想在内网或自有服务器上构建一条美满且私有化的 CI/CD 流水线时,Gitea Actions 是一个非常不错的选择。
1.2 为什么使用 Gitea Actions?


  • 私有化和可控性:Gitea 是自托管的,全部代码、镜像都在你的服务器大概私有云情况中运行,对安全和合规有较高要求的构造会更青睐。
  • 对 GitHub Actions 认识度高:语法、目次布局、关键字与 GitHub Actions 极其相似,学习资本低。
  • 更轻量、更简单:相比于其他 CI/CD 工具,如 Jenkins、GitLab CI 等,Gitea + Gitea Actions 安装、设置更加轻量,对资源占用比力友爱。
  • 无缝集成:使用同一个体系完成代码托管和 CI/CD 工作流,无需额外安装插件或对接第三方服务。

二、怎样通过 Docker Compose 安装 Gitea 和 Gitea Action

下面我们一步步来,使用 Docker Compose 快速安装 Gitea + Gitea Actions。
2.1 准备工作


  • 服务器情况:一台安装了 Docker 和 Docker Compose 的服务器(如 Ubuntu、CentOS 等)。
  • 端口、权限:确保 80 或 3000(以及其他想要使用的端口)在防火墙或云服务商处已放行。
  • Docker、Docker Compose:确保服务器上已精确安装 Docker、Docker Compose。
2.2 Docker Compose 示例文件

下面是一个最小化设置的示例,仅供参考,可以根据需求举行拓展。这里的关键是同时设置 gitea 和 gitea runner。
   留意:有一些社区维护的 community docker-compose examples 可以参考,但必要自行在 docker-compose.yml 中添加针对 Actions Runner 的设置。
  1. version: '3'
  2. services:
  3.   gitea:
  4.     image: gitea/gitea:1.20.4 # 或者最新版本
  5.     container_name: gitea
  6.     restart: always
  7.     ports:
  8.       - "3000:3000"     # 访问Web界面
  9.       - "222:22"        # SSH端口
  10.     volumes:
  11.       - ./data:/data
  12.     environment:
  13.       - USER_UID=1000
  14.       - USER_GID=1000
  15.       - GITEA__server__DOMAIN=localhost
  16.       - GITEA__server__SSH_DOMAIN=localhost
  17.       - GITEA__server__HTTP_PORT=3000
  18.       - GITEA__server__ROOT_URL=http://localhost:3000
  19.       # 如果要开启邮件通知和其他功能,可以在这里添加相应配置
  20.   runner:
  21.     image: gitea/act_runner:latest
  22.     container_name: gitea-actions-runner
  23.     restart: always
  24.     depends_on:
  25.       - gitea
  26.     environment:
  27.       - GITEA_INSTANCE_URL=http://gitea:3000
  28.       - RUNNER_NAME=runner-1
  29.       - RUNNER_CHECK_INTERVAL=30
  30.       # 下面的TOKEN需要手动填入(获取方法见下文)
  31.       - GITEA_RUNNER_REGISTRATION_TOKEN=REPLACE_WITH_ACTUAL_TOKEN
  32.     volumes:
  33.       - /var/run/docker.sock:/var/run/docker.sock
复制代码

  • gitea 服务:使用官方镜像 gitea/gitea:latest。
  • runner 服务:使用官方镜像 gitea/act_runner:latest,依赖 gitea。
  • GITEA_RUNNER_REGISTRATION_TOKEN:该情况变量是注册 Runner 的关键,必要我们在 Gitea 的管理背景获取一个有用的 Token,下面会解说怎样获取。

2.3 获取 Runner Registration Token


  • 启动 gitea 容器:docker-compose up -d
    。
  • 通过欣赏器访问 http://<服务器IP或域名>:3000,举行 初次安装引导,创建管理员账号等利用。
  • 登录 Gitea 后,点击右上角头像 -> Admin Panel(管理背景) -> 在左侧菜单里找到 “Runners”。
  • 点击 “New Registration Token” 按钮天生一个新的 Token,复制下来,填入到 docker-compose.yml 中 GITEA_RUNNER_REGISTRATION_TOKEN=REPLACE_WITH_ACTUAL_TOKEN 的位置。

然后再次运行:
  1. docker-compose up -d
复制代码
期待容器启动后,runner 服务就会主动注册到 Gitea 中,此时在 Gitea 的 Runner 页面应该能看到一个已上线(Active)的 Runner。

三、Gitea Actions 的工作原理与常用用法

3.1 工作原理简述


  • 触发器(Events):像 push、pull_request、tag_push 等事故会触发对应的工作流。
  • 工作流(Workflow)文件:默认存储在堆栈的 .gitea/workflows/ 目次下(或自界说)。类似 GitHub Actions,一样寻常定名为 main.yml 或 *.yml。
  • Runner:一旦事故触发,Gitea 会调用 Runner 举行实验。Runner 就是一个容器/服务器,里边通过 act 工具剖析并实验 .gitea/workflows/*.yml 中的 steps。
  • steps / jobs:在界说的 workflow 中,可以分多个 job,每个 job 再包罗多个 step,依次实验 shell 下令或调用各种 actions(如 actions/checkout@v4 等)。
3.2 存放工作流文件的位置



  • 默认位置:在 Gitea 堆栈的根目次下新建 .gitea/workflows/ 文件夹,然后在内里放置你的工作流文件,如 main.yml、build.yml 等。
  • 可自界说:假如你在堆栈的 Settings 里修改了默认的 workflow 路径,你就必要把 .yml 文件放在你指定的目次里。
比方,我们可以在堆栈中新建:
  1. .gitea
  2. └─ workflows
  3.      └─ main.yml
复制代码
然后把下面这段示例写到 main.yml 里即可。


四、动手实践:示例 Gitea Actions Workflow 详解

以下是提供的 Action 样例,将它放到 .gitea/workflows/main.yml(或你所设置的其他文件名)中即可使用。下面这段action完成了构建镜像生存本地,并将镜像时间戳版本和最新版本推到docker hub wenhao96 堆栈,末了删除过程中产生的磁盘空间占用文件。
  1. name: Gitea Actions Demo
  2. run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
  3. on: [push]
  4. jobs:
  5.   Explore-Gitea-Actions:
  6.     runs-on: ubuntu-latest
  7.     steps:
  8.       - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
  9.       - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
  10.       - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
  11.       - name: Check out repository code
  12.         uses: actions/checkout@v4
  13.       - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
  14.       - name: List files in the repository
  15.         run: |
  16.           ls ${{ gitea.workspace }}
  17.       - name: Build Docker image
  18.         run: |
  19.           docker build -t ${{ gitea.repository }}:latest .
  20.       - name: Log in to Docker Hub
  21.         env:
  22.           DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
  23.           DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
  24.         run: |
  25.           echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
  26.       - name: Tag and push Docker image
  27.         run: |
  28.           TIMESTAMP=$(date +'%Y%m%d%H%M%S')
  29.           docker tag ${{ gitea.repository }}:latest wenhao96/$(basename ${{ gitea.repository }}):${TIMESTAMP}
  30.           docker push wenhao96/$(basename ${{ gitea.repository }}):${TIMESTAMP}
  31.           docker tag ${{ gitea.repository }}:latest wenhao96/$(basename ${{ gitea.repository }}):latest
  32.           docker push wenhao96/$(basename ${{ gitea.repository }}):latest
  33.           docker rmi wenhao96/$(basename ${{ gitea.repository }}):${TIMESTAMP}
  34.           docker rmi wenhao96/$(basename ${{ gitea.repository }}):latest
  35.       - name: Clean up
  36.         run: |
  37.           docker builder prune --all --force
  38.           docker volume prune -f
  39.           docker network prune -f
  40.           docker system df
  41.           docker rmi $(docker images --filter "dangling=true" -q) || true
  42.       - run: echo "🍏 This job's status is ${{ job.status }}."
复制代码
4.1 关键字段解读


  • name: Gitea Actions Demo:该工作流的名称。
  • run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀:在运行时表现的名称(这里通过变量将实验者名字展示出来)。
  • on: [push]:意味着当有人向该堆栈 push 提交时主动触发此工作流。
  • jobs: Explore-Gitea-Actions::界说一个名为 Explore-Gitea-Actions 的工作(Job)。
  • runs-on: ubuntu-latest:指定该 job 在何种 Runner 情况运行。
  • steps::工作流步调依次列出。
4.2 核心功能解读


  • actions/checkout@v4:将当前堆栈代码下载到 Runner 的工作目次内。
  • docker build...:构建 Docker 镜像,使用 ${{ gitea.repository }} 作为镜像名称。
  • docker login:通过 secrets 获取 Docker Hub 用户名、暗码,并实验 Docker 登录。
  • Tag and push Docker image:通逾期间戳和 basename ${{ gitea.repository }} 的方式给镜像举行多标签。
  • docker rmi:在本地移除已推送的镜像,节省空间。
  • Clean up:末了一步举行 Docker 体系资源清算。

五、Secrets 的添加与常勤奋能

5.1 怎样在 Gitea 中添加 Secrets


  • 进入你的堆栈,在右上角点击 “Settings”。
  • 在左侧或顶部导航栏中检察是否有 “Secrets” 或 “Secrets and Variables” 入口(差异版本界面略有差异)。
  • 点击 “New secret”,添加 DOCKER_USERNAME、DOCKER_PASSWORD 等。
  • 在 workflow 文件中,就可以通过 ${{ secrets.DOCKER_USERNAME }} 和 ${{ secrets.DOCKER_PASSWORD }} 来调用。

5.2 常勤奋能与拓展


  • 缓存(Cache):Gitea Actions 提供和 GitHub Actions 类似的缓存机制,可以加速依赖安装和构建速率。
  • 并行(parallel)和串行(serial):支持在 workflow 文件中设置多个 job 并行实验,大概串行实验。
  • 多情况测试:可以针对差异的 Node.js 版本或 Python 版天职别实验测试,资助确保兼容性。
  • Conditional(条件实验):可以根据分支名、路径、标签等判定是否实验某些步调。
  • Artifacts(构建产物):可以将天生的日记、构建产物举行上传与存储,以方便后续检察。

六、扩展写法与更多头脑发散


  • 多 Job 依赖
    你可以界说多个 jobs,好比 build-backend、build-frontend、deploy,让后续的 job 依赖前者产物:
    1. jobs:
    2.   build-backend:
    3.     runs-on: ubuntu-latest
    4.     steps:
    5.       - name: Checkout
    6.         uses: actions/checkout@v4
    7.       - name: Build backend
    8.         run: npm run build
    9.   build-frontend:
    10.     runs-on: ubuntu-latest
    11.     steps:
    12.       - name: Checkout
    13.         uses: actions/checkout@v4
    14.       - name: Build frontend
    15.         run: npm run build
    16.   deploy:
    17.     runs-on: ubuntu-latest
    18.     needs: [build-backend, build-frontend] # 依赖前两个 jobs 完成后再执行
    19.     steps:
    20.       - name: Deploy
    21.         run: echo "Deploying..."
    复制代码
  • 基于标签或发布版本举行主动摆设
    假如你想在创建 Git 标签大概发布发布版本(Release)时主动构建并推送 Docker 镜像,只需将 on: [push] 改成:
    1. on:
    2.   push:
    3.     tags:
    4.       - 'v*.*.*'
    复制代码
    即可在打 tag 时触发。
  • 自界说 Runner 情况
    在复杂场景下,你大概不想使用官方的 ubuntu-latest,而是使用自界说镜像或自界说服务器。可以在 Gitea Actions Runner 中指定相应标签,然后在 workflow 中写上:
    1. runs-on: [self-hosted, custom-runner-label]
    复制代码
    如许可以充实使用你自界说 Runner 的情况依赖。
  • 联合其他服务

    • 消息关照:在构建完成后,通过调用 curl 大概特定的 Action,将构建状态发送到 Slack、微信呆板人、飞书等。
    • 打包发布:将构建产物 (如前端的 dist 文件) 上传到对象存储服务 (如 Minio、S3、OSS、COS 等)。
    • 多情况交付:在测试情况或生产情况中,使用同一套工作流脚本做差异利用。

  • CI/CD 最佳实践

    • 最小权限原则:只给 Runner 分配须要的访问权限和 Secrets。
    • 分支计谋:使用 feature 分支举行归并哀求 (Pull Request),仅在 main/master 分支或 release 分支才举行摆设或打包。
    • 可观测可观测性:通过 Gitea 或 Runner 自带的日记功能举行调试和追踪,也可将日记发送至 ELK、Grafana Loki 等观察体系中。


七、CICD乐成展示



八、结语

通过以上内容,你应该能比力全面地相识 Gitea Actions 的工作模式以及怎样快速上手构建本身的 CI/CD 流水线。从根本安装到 Docker 镜像构建再到 Secrets 管理,都涉及了实际使用的常见场景。别的,通过发散头脑可以拓展到更多功能,好比多情况测试、缓存和Artifacts,以致是联合其他服务举行完备的 DevOps 流程。
你大概得到的收益:


  • 与 GitHub Actions 一脉相承,学习资本低。
  • 自托管可控,满足私有化需求。
  • 使用方式机动,可以根据项目范例自由定制工作流。
假如你筹划把 Gitea Actions 摆设到企业内部情况(内网)举行大规模使用,发起检察官方文档或社区分享,相识集群化 Runner、负载平衡、备份以及高可用摆设等更深入的话题。
   温馨提示:本文示例仅作演示之用,在真实生产情况中必要根据自身项目的需求与安全计谋举行更过细的设置。
  
通过上述内容,你就已经根本明确了这个方法,根本用法我也都有展示。假如你能领悟贯通,我信赖你会很强
Best
Wenhao (楠博万)
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表