跳到主要内容

功能预览:Gitea Actions

·阅读时长:6分钟
xinyu

Gitea 最受欢迎的功能之一是包含 CI/CD 系统,以及与现有第三方 CI/CD 系统的更好集成。随着 Gitea Actions 的开发工作,我们希望为这个问题提供解决方案。

免责声明

⚠️ 该功能为实验性功能,请注意

  • 默认情况下已禁用;
  • 目前不应在生产环境中使用;
  • 目前不应在公共 Gitea 实例中使用;
  • 在稳定之前可能会进行重大更改。
  • 该拉取请求正在由社区审核,设计可能会更改。

Gitea Actions 概述

Gitea Actions 的目标是促进 Gitea 与现有 CI/CD 系统之间的更紧密集成。另一个目标是公开独立运行器的统一管理界面,以便在需要时减少支持多个系统的管理开销。独立运行器工作流程旨在与 GitHub Actions 兼容,可用于构建、测试、打包、发布或部署 Gitea 上的任何代码项目。

Gitea Actions 不仅限于 DevOps,还允许您在存储库中发生其他事件时运行工作流程。例如,您可以在有人在存储库中创建新问题时运行工作流程以自动添加相应的标签。

DevOps 工具链

许多第三方 CI/CD 系统可以与 Gitea 集成。以下是一些最受欢迎的系统。

  • Agola
  • AppVeyor
  • AWS 云集成(webhook 到 s3)
  • buildbot-gitea
  • buildkite-connector
  • Concourse
  • Dex
  • Drone
  • Jenkins
  • Jianmu CI
  • Metroline
  • mvoCI
  • Tea Runner
  • Woodpecker

新的 Gitea Actions 系统将允许这些现有系统将它们的结果直接推送到 Gitea,使其能够以统一的方式查看,如果管理员不希望管理多个系统,他们可以使用独立运行器的选项。

创建 Gitea Actions

将工作流程包含在存储库中的设计理念(例如 Drone、Woodpecker 和 GitHub Actions 的方式)使存储库和 CI 工具能够更加紧密地集成,从而实现了代码即配置。同时,平台用户为整个系统提供了丰富的应用程序扩展。

经过两年的研究和讨论,Gitea 内置 CI/CD 系统的开发任务取得了重大进展。(加入讨论 #13539

实现

Gitea Actions 实现了一个内置的 CI/CD 系统框架,兼容 GitHub Actions 的 YAML 工作流程格式,并兼容 GitHub Marketplace 中大多数现有的 Actions 插件。

该系统包含三个部分

  • 定义实现 Gitea Actions 协议。第三方 CI/CD 系统可以使用此协议将它们的结果直接发布到 Gitea。
  • 基于 nektos/act 的 Gitea 运行器。
  • 实施 Actions 管理子系统

屏幕截图

1.系统管理员可以访问运行器管理界面以创建、编辑和删除运行器。

Screenshot showing Runners Management interface

2.从导航栏打开 Actions 以查看 CI 构建日志。

List of all Workflows

3.查看日志。

View logs of a specific build

在本地机器上试用

需求

从源代码构建

1.启动 Gitea

克隆功能分支并 从源代码安装

git clone https://github.com/go-gitea/gitea.git
cd gitea
git fetch origin pull/21937/head
git checkout -b pullrequest FETCH_HEAD

# Build with SQLite support
TAGS="bindata sqlite sqlite_unlock_notify" make build

# Initialize Gitea
./gitea web

app.ini 中添加额外的配置以启用 Actions

# custom/conf/app.ini
[actions]
ENABLED = true

重启它。如果一切顺利,您将在“站点管理”中看到“运行器管理”页面。

2.启动运行器

克隆 act_runner,并按照 README 启动它。

git clone https://gitea.com/gitea/act_runner.git
cd act_runner
make build

然后将运行器注册到 Gitea 服务器。

交互式命令

./act_runner register

系统将要求您输入

  • Gitea 实例 URL,例如 http://192.168.1.100:3000/。您应该使用您的 gitea 实例 ROOT_URL 作为实例参数,并且您不应该使用 localhost 或 127.0.0.1 作为实例 IP;
  • 运行器令牌,您可以在 http://192.168.1.100:3000/admin/runners 中获取;
  • 运行器名称,您可以将其留空;
  • 运行器标签,您可以将其留空。

非交互式命令

./act_runner register --instance http://<your_gitea_instance> --token <your_runner_token> --no-interactive

以守护进程方式运行

./act_runner daemon

3.为存储库启用 Actions

创建一个新的存储库或打开一个现有的存储库,在设置中勾选“Actions”复选框并提交。

Screenshot showing repo settings with actions enabled Enable actions for a repo

如果一切顺利,您将看到一个新的选项卡“Actions”。

Screenshot showing the actions tab of repository settings

4.上传工作流程文件

将一些工作流程文件上传到 .gitea/workflows/<some-actions-name>.yaml,您可以按照 快速入门 GitHub Actions。是的,Gitea Actions 在大多数情况下与 GitHub Actions 兼容,您可以使用相同的演示

# .gitea/workflows/build.yaml
name: Gitea Actions Demo
run-name: ${{ github.actor }} is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v3
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."

如果一切顺利,您将在 Actions 选项卡中看到一个新的运行。

List showing builds of all workflows

5.检查作业的日志

单击一个运行,您将看到日志。很容易看出 Gitea 运行器已拉取 Docker 镜像作为基本环境

Log output of workflow

  1. 未来探索

由于 Gitea Actions 和 GitHub actions 之间存在重叠,您可以尝试 GitHub Actions 文档 中的一些示例,如果您发现错误,请报告它们以便解决。

An icon showing wave propagation

加入我们的社区

Gitea 是开源的。为我们的 GitHub 存储库加星标,并加入我们在 Discord 上的社区!

An icon showing a paper plane

订阅我们的时事通讯

及时了解 Gitea 的所有信息