mirror of
https://gitea.com/gitea/docs.git
synced 2026-07-22 12:17:50 +00:00
Update zh tw languages and fix some broken links (#455)
--------- Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: silverwind <2021+silverwind@noreply.gitea.com> Reviewed-on: https://gitea.com/gitea/docs/pulls/455 Reviewed-by: silverwind <2021+silverwind@noreply.gitea.com>
This commit is contained in:
@@ -4,121 +4,121 @@ slug: "design"
|
||||
sidebar_position: 40
|
||||
---
|
||||
|
||||
# Gitea Actions设计
|
||||
# Gitea Actions設計
|
||||
|
||||
Gitea Actions由多个组件组成。本文檔将对它们進行逐个描述。
|
||||
Gitea Actions由多個元件組成。本文件將對它們進行逐個描述。
|
||||
|
||||
## Act
|
||||
|
||||
[nektos/act](https://github.com/nektos/act) 项目是一个优秀的工具,允许你在本地运行GitHub Actions。
|
||||
我们受到了它的启发,並思考它是否可能為Gitea运行Actions。
|
||||
[nektos/act](https://github.com/nektos/act) 專案是一個優秀的工具,允許你在本地運行GitHub Actions。
|
||||
我們受到了它的啟發,並思考它是否可能為Gitea運行Actions。
|
||||
|
||||
然而,尽管[nektos/act](https://github.com/nektos/act)被设计為一个命令行工具,但我们实际上需要的是一个专為Gitea修改的Go库。
|
||||
因此,我们在[gitea/act](https://gitea.com/gitea/act)基础上進行了分叉。
|
||||
然而,儘管[nektos/act](https://github.com/nektos/act)被設計為一個命令行工具,但我們實際上需要的是一個專為Gitea修改的Go庫。
|
||||
因此,我們在[gitea/act](https://gitea.com/gitea/act)基礎上進行了分叉。
|
||||
|
||||
这是一个软分叉,将定期跟進上游。
|
||||
虽然添加了一些自定义提交,但我们会尽力避免对原始代码進行太多更改。
|
||||
這是一個軟分叉,將定期跟進上游。
|
||||
雖然添加了一些自訂提交,但我們會盡力避免對原始程式碼進行太多更改。
|
||||
|
||||
分叉的 act 只是Gitea特定用途的桥接或适配器。
|
||||
還添加了一些额外的提交,例如:
|
||||
分叉的 act 只是Gitea特定用途的橋接或適配器。
|
||||
還添加了一些額外的提交,例如:
|
||||
|
||||
- 将執行日志输出到日志记录器钩子,以便报告给Gitea
|
||||
- 禁用 GraphQL URL,因為Gitea不支持它
|
||||
- 每个Job启动一个新的容器,而不是重复使用,以确保隔离性。
|
||||
- 將執行日誌輸出到日誌記錄器鉤子,以便報告給Gitea
|
||||
- 禁用 GraphQL URL,因為Gitea不支援它
|
||||
- 每個Job啟動一個新的容器,而不是重複使用,以確保隔離性。
|
||||
|
||||
这些修改没有理由合並到上游。
|
||||
如果使用者只想在本地运行可信的Actions,它们是没有意义的。
|
||||
這些修改沒有理由合併到上游。
|
||||
如果使用者只想在本地運行可信的Actions,它們是沒有意義的。
|
||||
|
||||
然而,将来可能会出現重叠,例如两个项目都需要的必要错误修复或新功能。
|
||||
在这些情况下,我们将向上游存放庫贡献变更。
|
||||
然而,將來可能會出現重疊,例如兩個專案都需要的必要錯誤修復或新功能。
|
||||
在這些情況下,我們將向上遊存放庫貢獻變更。
|
||||
|
||||
## act runner
|
||||
|
||||
Gitea的Runner被稱為act runner,因為它基于act。
|
||||
Gitea的Runner被稱為act runner,因為它基於act。
|
||||
|
||||
与其他CIRunner一样,我们将其设计為Gitea的外部部分,这意味着它應該在与Gitea不同的服务器上运行。
|
||||
與其他CIRunner一樣,我們將其設計為Gitea的外部部分,這意味著它應該在與Gitea不同的伺服器上運行。
|
||||
|
||||
為了确保Runner连接到正确的Gitea实例,我们需要使用令牌注册它。
|
||||
此外,Runner通過声明自己的標籤向Gitea报告它可以运行的Job類型。
|
||||
為了確保Runner連接到正確的Gitea實例,我們需要使用令牌註冊它。
|
||||
此外,Runner通過聲明自己的標籤向Gitea報告它可以運行的Job類型。
|
||||
|
||||
之前,我们提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job将在具有`ubuntu-latest`標籤的Runner上运行。
|
||||
但是,Runner如何知道要运行 `ubuntu-latest`?答案在于将標籤映射到环境。
|
||||
这就是為什么在注册過程中添加自定义標籤时,需要输入一些复杂内容,比如`my_custom_label:docker://centos:7`。
|
||||
这意味着Runner可以接受需要在`my_custom_label`上运行的Job,並通過使用`centos:7`镜像的Docker容器来运行它。
|
||||
之前,我們提到工作流文件中的 `runs-on: ubuntu-latest` 表示該Job將在具有`ubuntu-latest`標籤的Runner上運行。
|
||||
但是,Runner如何知道要運行 `ubuntu-latest`?答案在於將標籤映射到環境。
|
||||
這就是為什麼在註冊過程中添加自訂標籤時,需要輸入一些複雜內容,比如`my_custom_label:docker://centos:7`。
|
||||
這意味著Runner可以接受需要在`my_custom_label`上運行的Job,並通過使用`centos:7`鏡像的Docker容器來運行它。
|
||||
|
||||
然而,Docker不是唯一的選择。
|
||||
act 也支持直接在主机上运行Job。
|
||||
这是通過像`linux_arm:host`这样的標籤实現的。
|
||||
这个標籤表示Runner可以接受需要在`linux_arm`上运行的Job,並直接在主机上运行它们。
|
||||
然而,Docker不是唯一的選擇。
|
||||
act 也支援直接在主機上運行Job。
|
||||
這是通過像`linux_arm:host`這樣的標籤實現的。
|
||||
這個標籤表示Runner可以接受需要在`linux_arm`上運行的Job,並直接在主機上運行它們。
|
||||
|
||||
標籤的设计遵循格式`label[:schema[:args]]`。
|
||||
如果省略了schema,则默认為`host`。
|
||||
標籤的設計遵循格式`label[:schema[:args]]`。
|
||||
如果省略了schema,則預設為`host`。
|
||||
|
||||
因此,
|
||||
|
||||
- `my_custom_label:docker://node:18`:使用`node:18 Docker`镜像运行带有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label:host`:在主机上直接运行带有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label`:等同于`my_custom_label:host`。
|
||||
- `my_custom_label:vm:ubuntu-latest`:(僅為示例,未实現)使用带有`ubuntu-latest` ISO的虚拟机运行带有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label:docker://node:18`:使用`node:18 Docker`鏡像運行帶有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label:host`:在主機上直接運行帶有`my_custom_label`標籤的Job。
|
||||
- `my_custom_label`:等同於`my_custom_label:host`。
|
||||
- `my_custom_label:vm:ubuntu-latest`:(僅為範例,未實現)使用帶有`ubuntu-latest` ISO的虛擬機運行帶有`my_custom_label`標籤的Job。
|
||||
|
||||
## 通信协议
|
||||
## 通信協議
|
||||
|
||||
由于act runner是Gitea的独立部分,我们需要一种协议让Runner与Gitea实例進行通信。
|
||||
然而,我们不认為让Gitea监听一个新端口是个好主意。
|
||||
相反,我们希望重用HTTP端口,这意味着我们需要一个与HTTP兼容的协议。
|
||||
因此,我们選择使用基于HTTP的gRPC。
|
||||
由於act runner是Gitea的獨立部分,我們需要一種協議讓Runner與Gitea實例進行通信。
|
||||
然而,我們不認為讓Gitea監聽一個新端口是個好主意。
|
||||
相反,我們希望重用HTTP端口,這意味著我們需要一個與HTTP相容的協議。
|
||||
因此,我們選擇使用基於HTTP的gRPC。
|
||||
|
||||
我们使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行连接。
|
||||
有关 gRPC 的更多信息,請访问[其官方网站](https://grpc.io/)。
|
||||
我們使用[actions-proto-def](https://gitea.com/gitea/actions-proto-def) 和 [actions-proto-go](https://gitea.com/gitea/actions-proto-go) 進行連接。
|
||||
有關 gRPC 的更多資訊,請前往[其官方網站](https://grpc.io/)。
|
||||
|
||||
## 网络架构
|
||||
## 網路架構
|
||||
|
||||
让我们来看一下整體的网络架构。
|
||||
这将帮助您解决一些问题,並解释為什么使用回环地址注册Runner是个不好的主意。
|
||||
讓我們來看一下整體的網路架構。
|
||||
這將幫助您解決一些問題,並解釋為什麼使用迴環地址註冊Runner是個不好的主意。
|
||||
|
||||

|
||||
|
||||
图片中标记了四个网络连接,並且箭头的方向表示建立连接的方向。
|
||||
圖片中標記了四個網路連接,並且箭頭的方向表示建立連接的方向。
|
||||
|
||||
### 连接 1,act runner到Gitea实例
|
||||
### 連接 1,act runner到Gitea實例
|
||||
|
||||
act runner 必須能够连接到Gitea以接收任务並发送執行结果回来。
|
||||
act runner 必須能夠連接到Gitea以接收任務並發送執行結果回來。
|
||||
|
||||
### 连接 2,Job容器到Gitea实例
|
||||
### 連接 2,Job容器到Gitea實例
|
||||
|
||||
即使Job容器位于同一台机器上,它们的网络命名空间与Runner不同。
|
||||
举个例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要连接到Gitea来获取代码。
|
||||
获取代码並不总是运行某些Job所必需的,但在大多数情况下是必需的。
|
||||
即使Job容器位於同一臺機器上,它們的網路命名空間與Runner不同。
|
||||
舉個例子,如果工作流中包含 `actions/checkout@v4`,Job容器需要連接到Gitea來獲取程式碼。
|
||||
獲取程式碼並不總是運行某些Job所必需的,但在大多數情況下是必需的。
|
||||
|
||||
如果您使用回环地址注册Runner,当Runner与Gitea在同一台机器上时,Runner可以连接到Gitea。
|
||||
然而,如果Job容器尝试从本地主机获取代码,它将失败,因為Gitea不在同一个容器中。
|
||||
如果您使用迴環地址註冊Runner,當Runner與Gitea在同一臺機器上時,Runner可以連接到Gitea。
|
||||
然而,如果Job容器嘗試從本地主機獲取程式碼,它將失敗,因為Gitea不在同一個容器中。
|
||||
|
||||
### 连接 3,act runner到互联网
|
||||
### 連接 3,act runner到互聯網
|
||||
|
||||
当您使用诸如 `actions/checkout@v4` 的一些Actions时,act runner下载的是脚本,而不是Job容器。
|
||||
默认情况下,它从[github.com](http://github.com/)下载,因此需要访问互联网。如果您设置的是 self,
|
||||
那么默认将从您的当前Gitea实例下载,那么此步骤不需要连接到互联网。
|
||||
它還默认从Docker Hub下载一些Docker镜像,这也需要互联网访问。
|
||||
當您使用諸如 `actions/checkout@v4` 的一些Actions時,act runner下載的是腳本,而不是Job容器。
|
||||
預設情況下,它從[github.com](http://github.com/)下載,因此需要訪問互聯網。如果您設定的是 self,
|
||||
那麼預設將從您的當前Gitea實例下載,那麼此步驟不需要連接到互聯網。
|
||||
它還預設從Docker Hub下載一些Docker鏡像,這也需要互聯網訪問。
|
||||
|
||||
然而,互联网访问並不是绝对必需的。
|
||||
您可以配置您的Gitea实例从您的内部网络设施中获取 Actions 或镜像。
|
||||
然而,互聯網訪問並不是絕對必需的。
|
||||
您可以設定您的Gitea實例從您的內部網路設施中獲取 Actions 或鏡像。
|
||||
|
||||
实际上,您的Gitea实例可以同时充当 Actions 市场和镜像註冊表。
|
||||
您可以将GitHub上的Actions存放庫镜像到您的Gitea实例,並将其用作普通Actions。
|
||||
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker镜像註冊表。
|
||||
實際上,您的Gitea實例可以同時充當 Actions 市場和鏡像註冊表。
|
||||
您可以將GitHub上的Actions存放庫鏡像到您的Gitea實例,並將其用作普通Actions。
|
||||
而 [Gitea 容器註冊表](usage/packages/container.md) 可用作Docker鏡像註冊表。
|
||||
|
||||
### 连接 4,Job容器到互联网
|
||||
### 連接 4,Job容器到互聯網
|
||||
|
||||
当使用诸如`actions/setup-go@v5`的Actions时,可能需要从互联网下载资源,以设置Job容器中的Go语言环境。
|
||||
因此,成功完成这些Actions需要访问互联网。
|
||||
當使用諸如`actions/setup-go@v5`的Actions時,可能需要從互聯網下載資源,以設定Job容器中的Go語言環境。
|
||||
因此,成功完成這些Actions需要訪問互聯網。
|
||||
|
||||
然而,这也是可選的。
|
||||
您可以使用自定义的Actions来避免依赖互联网访问,或者可以使用已安裝所有依赖项的打包的Docker镜像来运行Job。
|
||||
然而,這也是可選的。
|
||||
您可以使用自訂的Actions來避免依賴互聯網訪問,或者可以使用已安裝所有依賴項的打包的Docker鏡像來運行Job。
|
||||
|
||||
## 总结
|
||||
## 總結
|
||||
|
||||
使用Gitea Actions只需要确保Runner能够连接到Gitea实例。
|
||||
互联网访问是可選的,但如果没有互联网访问,将需要额外的工作。
|
||||
换句话说:当Runner能够自行查询互联网时,它的工作效果最好,但您不需要将其暴露给互联网(無论是單向還是双向)。
|
||||
使用Gitea Actions只需要確保Runner能夠連接到Gitea實例。
|
||||
互聯網訪問是可選的,但如果沒有互聯網訪問,將需要額外的工作。
|
||||
換句話說:當Runner能夠自行查詢互聯網時,它的工作效果最好,但您不需要將其暴露給互聯網(無論是單向還是雙向)。
|
||||
|
||||
如果您在使用Gitea Actions时遇到任何网络问题,希望上面的图片能够帮助您進行故障排除。
|
||||
如果您在使用Gitea Actions時遇到任何網路問題,希望上面的圖片能夠幫助您進行故障排除。
|
||||
|
||||
Reference in New Issue
Block a user