跳到主要内容

自定义

如果您使用的代码托管平台不满足 Woodpecker 要求 或您的设置太特殊而无法包含在 Woodpecker 核心中,您可以编写插件式的代码托管平台支持。

注意

插件式代码托管平台仍处于实验阶段。它们的实现可能会随时更改和破坏。

危险

您必须信任您使用的插件式代码托管平台的作者。他们可能可以访问认证代码和其他潜在敏感信息。

使用方法

要使用插件式代码托管平台,请下载正确的插件版本。然后,您可以在配置中添加以下内容:

WOODPECKER_ADDON_FORGE=/path/to/your/addon/forge/file

如果您将 Woodpecker 作为容器运行,您可能希望将插件二进制文件挂载到 /opt/addons/

错误报告

如果您遇到错误,请检查哪个组件有问题。如果是插件的问题,请不要在主仓库中提出问题,而是使用单独的插件仓库。要检查哪个组件负责错误,请查看日志。来自插件的日志用包含插件文件名的特殊字段 addon 标记。

插件式代码托管平台列表

  • Radicle: 基于 Git 构建的开源、点对点代码协作栈。Woodpecker CI 的 Radicle 插件可以在这个仓库中找到。

创建插件式代码托管平台

插件使用 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 的包 - 见上面的导入。