编译后的 Go 二进制文件放在哪里?

Where to put the compiled Go binary?

我正在尝试为 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应用程序二进制文件复制到容器中,问题来了,编译后的二进制文件放在哪里?目前,它放入项目文件夹中。

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

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

然后编辑您的 Dockerfile:

  1. 加载你用 COPY or ADD

  2. 得到的二进制文件
  3. ENTRYPOINT or CMD

  4. 执行

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

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