在过去的几个月里,我已经熟悉了 AWS OpsWorks 部署过程,因为它与 Node.js 有关 - Go 的部署似乎是另一种动物。
根据我收集到的信息,这是编译成功的 Go 部署所需要的:
- 在EC2盒子上安装go
- 从 GitHub 拉取私有(private)仓库
- 引入所有依赖
- 为 box 的 arch 编译主包
- 用我使用的几个标志启动二进制文件
我读到的所有地方似乎都在吹捧 Go 部署的简便性,因为依赖项包含在二进制文件中,但这似乎暗示您正在您的开发环境中编译应用程序并将其推送到云端。这似乎不是一个适合整个开发团队的过程。
https://github.com/crowdmob/chef-golang-web-server-cookbook
我一直在尝试让 CrowdMob 的 Chef 脚本正常工作,但无济于事。我继续收到如下所示的错误:
[2014-08-01T16:08:22+00:00] WARN: Cookbook 'templates' is empty or entirely chefignored at /opt/aws/opsworks/current/merged-cookbooks/templates
在部署期间处理依赖关系的正确方法是什么?
是否有使用 Chef 将 Go 部署到 AWS 的既定实践?
最佳答案
使用 CircleCi、Travis 或您自己设置的 Jenkins 等持续集成服务。
关于持续集成服务
- 添加一个 github post commit 钩子(Hook)。
- 测试/构建二进制文件
- 创建 zip 文件作为工件
此时,您可以使用 AWS 命令行和从该版本创建的 zip 文件在 Elastic Beanstalk 上创建一个新版本。
venv/bin/aws elasticbeanstalk create-application-version ...
然后只需从 EB 仪表板中选择要部署的版本即可。
恕我直言,对于简单的服务,使用 Chef 有点矫枉过正。 Docker 提供了一个简单的工作流程。
关于deployment - 将 Golang 应用程序部署到 AWS OPSWORKS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088417/