跳到主要内容

自定义

如果您使用的代码托管平台不符合 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".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 的包 - 请参阅上面的导入。