猿问

将二进制文件推送到 cf 时,Cloud Foundry 下载错误的 Go 版本

嗨,当我将二进制文件推送到 cf 时,我们看到下载了错误的 go 版本

推送代码的步骤

  1. 运行构建命令

GOOS="linux" GOARCH=amd64 go build ${LDFLAGS} -o localdeploy/some-app main.go

  1. cd本地部署

  2. cf push -f 清单.yml

注意:localdeploy 文件夹包含 manifest.yml 和 some-app 二进制文件

Go.mod文件

go 1.16


require (

    github.com/cloudfoundry-community/go-cfenv v1.18.0

    github.com/gin-gonic/gin v1.8.1

    github.com/google/uuid v1.3.0

    github.com/rs/zerolog v1.28.0

    github.com/stretchr/testify v1.8.0

)


清单文件.yml


 applications:

      - name: some-app-1000-snapshot

        command: ./some-app

        stack: cflinuxfs3

        buildpacks:

          - https://github.com/cloudfoundry/binary-buildpack.git


Then i see following logs downloading go 1.15.5 instead of go 1.16



Below are the logs getting when pushed to cf --- application is working but why it is downloading 1.15 instead of 1.16 which is present in my mod file


Staging app and tracing logs...

   -----> Download go 1.15.5

   -----> Running go build supply

   /tmp/buildpackdownloads/d612ac0e3047b21e80ecfeae72c39f81 ~

   ~

   -----> Binary Buildpack version 1.0.46

   -----> Download go 1.15.5

   -----> Running go build finalize

   /tmp/buildpackdownloads/d612ac0e3047b21e80ecfeae72c39f81 ~```


桃花长相依
浏览 71回答 1
1回答

ABOUTYOU

二进制 buildpack 不会为您的应用程序安装任何东西。它实际上是一个无操作构建包。由于您已经在本地编译了您的应用程序,因此用于您的二进制文件的 Go 版本是您计算机上本地安装的版本。您可以根据本地安装的内容来控制该版本。二进制 buildpack 的输出在这里令人困惑,因为您确实看到它下载了旧的 Go 版本。发生这种情况的原因是因为 buildpack 本身是用 Go 编写的,并且您在 manifest.yml 中有指向 buildpack 源代码的 buildpack 定义。因此要运行 buildpack,它必须先编译自己。它需要 Go 来做那件事,所以它下载 Go,构建自己,然后自己运行。这就是你在上面看到的内容Download go 1.15.5。大多数(全部?)CloudFoundry 安装将默认使用二进制 buildpack,因此您无需引用源代码。运行cf buildpacks并从列表中获取二进制 buildpack 的名称。它将类似于binary-buildpackor binary_buildpack。编辑您的 manifest.yml 并替换https://github.com/cloudfoundry/binary-buildpack.git为该值。现在,当您推送时,它将使用已经编译的现有构建包,您不应该看到有关正在下载 Go 的消息。
随时随地看视频慕课网APP

相关分类

Go
我要回答