我使用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:
预期结果应该是每次运行作业时群集上都有一个新的二进制文件。
答案 0 :(得分:1)
根据最佳做法-二进制文件应在构建映像执行期间应用-如上面的社区和best developer practices所述:
不要从正在运行的容器中创建映像–换句话说,请勿使用“ docker commit”来创建映像。这种创建图像的方法不可复制,应完全避免。始终使用完全可复制的Dockerfile或任何其他S2I(从源到映像)方法,如果将Dockerfile存储在源代码控制存储库(git)中,则可以跟踪对Dockerfile的更改。
但是,从另一个角度来看,您可以考虑:
1 。 init contianers直接在群集上构建图像
2 。 kaniko,带有构建上下文的外部位置(gcs存储桶git存储库)
3 。头盔预安装挂钩,以便使用上述解决方案
4 。最后是其他解决方案,例如cloud build或cloud build locally
另请参阅“ Switching from CircleCI to Google Cloud Build”。 如以上文章所述,当docker存储库中的映像更新时,您可以使用keel自动更新您的部署。
请告诉我是否有帮助。
答案 1 :(得分:0)
您的CI / CD应该仅使用该二进制文件构建一个Docker容器。然后,应将其推送到专用存储库。群集应下载二进制文件。