自定义
如果您使用的代码托管平台不满足 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/addon".Serve 并传入一个 "go.woodpecker-ci.org/woodpecker/v3/server/forge".Forge 作为参数。
这将处理插件式代码托管平台与服务器的连接。
备注
无法从 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 的包 - 见上面的导入。