【问题标题】:Where to put the compiled Go binary?将编译好的 Go 二进制文件放在哪里?
【发布时间】:2020-04-23 13:43:47
【问题描述】:

我正在尝试为 Go 应用程序构建我的第一个 Dockerfile,并使用 DroneCI 构建管道。

DroneCI 配置如下:

kind: pipeline
type: docker
name: Build auto git tagger

steps:
  - name: test and build
    image: golang
    commands:
      - go mod download
      - go test ./test
      - go build ./cmd/git-tagger

  - name: Build docker image
    image: plugins/docker
    pull: if-not-exists
    settings:
      username: 
      password: 
      repo: 
      dockerfile: ./build/ci/Dockerfile
      registry: 
      auto_tag: true

trigger:
  branch:
    - master

我遵循了https://github.com/golang-standards/project-layout的结构约定:

到目前为止,Dockerfile 如下所示:

FROM alpine:latest

RUN apk --no-cache add ca-certificates

WORKDIR /root/

下一步是将 GO 应用程序二进制文件复制到容器中,这里的问题是,将编译后的二进制文件放在哪里?目前,它放入项目文件夹中。

【问题讨论】:

  • 通常没关系。关键是你知道它在哪里,所以你可以执行它。
  • 如何指定二进制的输出文件夹?
  • set GOBIN, or use the -o flag。二进制文件必须位于 package 子树(Dockerfile 所在的位置)中,COPY 才能工作。

标签: docker go drone.io


【解决方案1】:

您可以使用go build -o 标志指定输出目录和文件名。例如:

go build ./cmd/git-tagger -o ./build/package/foo

然后编辑你的 Dockerfile:

  1. COPY or ADD加载你得到的二进制文件

  2. ENTRYPOINT or CMD执行它

P.S 您在配置中将 Dockerfile 路径指定为 ./build/ci/Dockerfile。但它在屏幕截图上的package 目录中。

不要忘记您链接的存储库只是 smb 的个人意见,Go 并没有真正强制您使用任何结构,这取决于您的公司风格标准或您的偏好。所以把二进制文件放在哪里并不是很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多