自定义
如果您使用的代码托管平台不符合 Woodpecker 要求 或者您的设置过于特殊而无法包含在 Woodpecker 核心中,您可以编写一个附加代码托管平台。
注意
附加代码托管平台仍处于实验阶段。它们的实现随时可能更改和破坏。
危险
您必须信任您使用的附加代码托管平台的作者。他们可能有权访问认证代码和其他潜在的敏感信息。
使用
要使用附加代码托管平台,请下载正确的附加版本。然后,您可以将其添加到您的配置中:
WOODPECKER_ADDON_FORGE=/path/to/your/addon/forge/file
如果您以容器方式运行 Woodpecker,您可能想要将附加二进制文件挂载到 /opt/addons/。
错误报告
如果您遇到错误,请检查哪个组件有问题。如果是附加,不要在主仓库中提出问题,而应该使用单独的附加仓库。要检查哪个组件负责错误,请查看日志。附加的日志用特殊字段 addon 标记,包含它们的附加文件名。
附加代码托管平台列表
创建附加代码托管平台
附加使用 RPC 与服务器通信,并使用 go-plugin 库 实现。
编写您的代码
此示例将使用 Go 语言。
直接导入 Woodpecker 的 Go 包 (go.woodpecker-ci.org/woodpecker/v3) 并使用其中定义的接口和类型。
在 main 函数中,只需使用 "go.woodpecker-ci.org/woodpecker/v3/server/forge".Forge 作为参数调用 "go.woodpecker-ci.org/woodpecker/v3/server/forge/addon".Serve。
这将负责将附加代码托管平台连接到服务器。
备注
无法从 Woodpecker 访问全局变量,例如服务器配置。因此,您必须在您的附加中解析环境变量。原因是附加在完全独立的进程中运行。
示例结构
package main
import (
"context"
"net/http"
"go.woodpecker-ci.org/woodpecker/v3/server/forge/addon"
forgeTypes "go.woodpecker-ci.org/woodpecker/v3/server/forge/types"
"go.woodpecker-ci.org/woodpecker/v3/server/model"
)
func main() {
addon.Serve(config{})
}
type config struct {
}
// `config` 必须实现 `"go.woodpecker-ci.org/woodpecker/v3/server/forge".Forge`。您必须直接使用 Woodpecker 的包 - 请参阅上面的导入。