我如何重现本地运行的goreleaser?

o2rvlv0m  于 2023-03-06  发布在  Go
关注(0)|答案(2)|浏览(157)

上下文:有一个repo,它使用GoReleaser tool编译二进制文件和releases编译到GitHub。
如本期所述,标记为v1.32.0的提交会导致发布动态链接的二进制文件--这没什么:例如,如果您对terraform-provider-confluent_1.32.0_linux_amd64二进制文件执行download,然后运行file命令,您将看到"动态链接":

$ file ~/MyDownloads/terraform-provider-confluent_1.32.0_linux_amd64/terraform-provider-confluent_1.32.0
/Users/klinou/MyDownloads/terraform-provider-confluent_1.32.0_linux_amd64/terraform-provider-confluent_1.32.0: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, Go BuildID=8SfNWb1Abn_y718BUN-I/PH1ZOJTKh7G-G89wQMVi/7pnMTwFFJzGpJwJM40fD/vwMzK5ZvGUHoFFCvKApk, stripped

我一直在尝试更新. goreelaser config来生成一个静态链接的二进制文件,但问题是当我在本地运行GoReleaser tool时,我甚至不能重现"动态链接"的消息:
x一个一个一个一个x一个一个二个x
最后,对于file命令,我可以看到statically linked,而不是dynamically linked。我应该修复什么(GoReleaser命令?)来重现GoReleaser的"远程"运行以看到dynamically linked
更新:https://github.com/zambien/terraform-provider-apigee/issues/48似乎是相关的。

hgc7kmma

hgc7kmma1#

在v1.32.0中,您在CGO_ENABLED中有一个拼写错误,因此,实际上,没有为它设置值。
https://github.com/confluentinc/terraform-provider-confluent/blob/v1.32.0/.goreleaser.yml#L32
如果您在本地为同一操作系统执行go build,而没有为CGO_ENABLED设置任何值,则二进制文件将被动态链接,如果您为另一个GOOS构建(比方说,从darwin设置GOOS=linux),则它将被静态链接。
所以,这与GoReleaser本身没有什么关系,更多的是关于Go语言的工具链和一个打字错误。
回答你的问题,如果你在GoReleaser的配置文件中设置了CGO_ENABLED=1,你应该能够在本地复制它,但是我建议你使用--skip-publish,因为你可能不想每次都重新发布工件。

tvmytwxo

tvmytwxo2#

看起来它与golang有关,与GoReleaser工具没有太大关系。我在运行它alpine:latest时设法重现了它:

/terraform-provider-confluent # GOOS=linux GOEXPERIMENT=boringcrypto GO_ENABLEDC=1 GO111MODULE=on go build -mod=vendor -o ./bin/test
/terraform-provider-confluent # file bin/test
bin/test: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-x86_64.so.1, Go BuildID=fhj6Ss4N5d_ykkAthq4k/V5mMr10YkNseYsALvX59/LCV_yXtocvQbKjlFWnVk/amlBkYDQQEWLeECvcQxy, with debug_info, not stripped

相关问题