问题:
发生了什么:
使用以下命令在 Windows 上构建后端失败:
go run build.go build
您期望发生的事情:
期望构建 go 后端二进制文件。
如何重现它(尽可能最小和精确):
在 Windows 上,只需按照此处在 Windows 上构建的过程运行命令:https ://github.com/grafana/grafana/blob/HEAD/contribute/developer-guide .md
还有什么我们需要知道的吗?:
这是日志的样子:
$ go run build.go build
Version: 8.3.0, Linux Version: 8.3.0, Package Iteration: 1635031358pre
building binaries build
building grafana-server ./pkg/cmd/grafana-server
rm -r ./bin/windows-amd64/grafana-server.exe
rm -r ./bin/windows-amd64/grafana-server.exe.md5
go build -ldflags -w -X main.version=8.3.0-pre -X main.commit=f496c31018 -X main.buildstamp=1634921041 -X main.buildBranch=main -buildmode=exe -o ./bin/windows-amd64/grafana-server.exe ./pkg/cmd/grafana-server
# github.com/grafana/grafana/pkg/cmd/grafana-server/commands
pkg\cmd\grafana-server\commands\cli.go:168:12: undefined: server.Initialize
exit status 2
exit status 1
环境:
Grafana 版本:主要
数据源类型和版本:不适用
操作系统 Grafana 安装在:Windows 10
用户操作系统和浏览器:不适用
Grafana 插件:不适用
其他:go版本go1.17.2 windows/amd64
解决方法:https://github.com/grafana/grafana/issues/40839
1、 go get -d github.com/google/wire/cmd/wire 手动安装 gen;
2、删除 //go:build wireinject && oss 这两个注释
// +build wireinject,oss
3、wire gen ./pkg/server
4、wire gen ./pkg/cmd/grafana-cli/runner
5、执行 go run build.go setup
go run build.go build
看起来wire_gen.go文件没有按照产生该错误的行的假设生成
使用手动安装电线:go get -d github.com/google/wire/cmd/wire然后使用手动生成wire gen ./pkg/server会出现以下错误:
$ wire gen ./pkg/server/
wire: C:\Projects\grafana\repos\grafana\pkg\server\wire.go:175:13: undeclared name: wireExtsSet
wire: C:\Projects\grafana\repos\grafana\pkg\server\wire.go:180:13: undeclared name: wireExtsTestSet
wire: generate failed
似乎是一个gopls问题,因为变量是在文件中声明的wireexts_oss.go- 一个快速的hacky解决方案是删除该文件中的注释构建标签:
//go:build wireinject && oss
// +build wireinject,oss
并再次运行wire gen ./pkg/server,它首先生成了预期的文件
有什么更好的解决方案吗?似乎这应该是内部逻辑的一部分build.go
插件离线下载方法
1、将插件包在/data/plugins 中解压
2、修改 defaults.ini 中 allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource
3、重启服务