在头盔安装之前将go二进制文件移动到吊舱的惯用方式是什么?

时间:2019-08-14 06:19:19

标签: docker go kubernetes kubernetes-helm circleci

我使用CircleCI构建go二进制文件,该二进制文件要在Helm图表安装的pod中运行。我想将二进制文件从CircleCI移到远程群集,以便在pod启动时可以使用它。我知道可以使用诸如ConfigMap或Secrets之类的卷,但是我不确定执行此操作的最佳方法。

我曾经使它与私有docker注册表和kubernetes Secrets一起工作以获取注册表的凭据,但我不喜欢此选项。我不想在每次二进制更改时都构建并推送新的Docker映像。

version: 2.1
jobs:
  build_and_deploy:
    docker:
      - image: circleci/golang:1.12.7
    steps:
      - checkout
      - run: go get -v -t -d ./...
      - run: go build cmd/main.go
      - run: ...
      - run: helm install

workflows:
  version: 2
  build:
    jobs:
      - build_and_deploy:

预期结果应该是每次运行作业时群集上都有一个新的二进制文件。

2 个答案:

答案 0 :(得分:1)

根据最佳做法-二进制文件应在构建映像执行期间应用-如上面的社区和best developer practices所述:

  

不要从正在运行的容器中创建映像–换句话说,请勿使用“ docker commit”来创建映像。这种创建图像的方法不可复制,应完全避免。始终使用完全可复制的Dockerfile或任何其他S2I(从源到映像)方法,如果将Dockerfile存储在源代码控制存储库(git)中,则可以跟踪对Dockerfile的更改。

但是,从另一个角度来看,您可以考虑:

1 init contianers直接在群集上构建图像

2 kaniko,带有构建上下文的外部位置(gcs存储桶git存储库)

3 。头盔预安装挂钩,以便使用上述解决方案

4 。最后是其他解决方案,例如cloud buildcloud build locally

另请参阅“ Switching from CircleCI to Google Cloud Build”。 如以上文章所述,当docker存储库中的映像更新时,您可以使用keel自动更新您的部署。

请告诉我是否有帮助。

答案 1 :(得分:0)

您的CI / CD应该仅使用该二进制文件构建一个Docker容器。然后,应将其推送到专用存储库。群集应下载二进制文件。