带有 git 源和部署钩子的弹性 beantalk rails 应用程序

Div*_*gov 3 rails deployment amazon-web-services

我想为我现有的 Rails 应用程序设置 Elastic Beanstalk。

我成功地制作了示例 foo 应用程序。

这些是我的问题

我需要从我的 git 存储库而不是从我部署的本地路径进行部署。我如何为示例 foo 应用程序执行此操作。

git aws.push 命令似乎部署在新的 ec2 实例上。但是,它没有将更改推送到我的 git 存储库。在执行 git aws.push 之前,我应该单独执行 git push 吗?请注意,当我执行 git status 时,我的分支领先 1 个提交。aws 是否维护一个单独的 git 存储库?我怎样才能让它改用我的 git 存储库?

[mymac:~/Projects/new/foo(master)]$ git aws.push
Counting objects: 4949, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1115/1115), done.
Writing objects: 100% (4949/4949), 14.11 MiB | 1.90 MiB/s, done.
Total 4949 (delta 3800), reused 4944 (delta 3798)
remote: 
To https://AKIAJZT3WFY2WLO6CHQQ:20121127T030627Zf56675b2f4c9c731ca6f51b11d36a438e8bcee25c5171061ce5ac681495318c9@git.elasticbeanstalk.ap-southeast-1.amazonaws.com/v1/repos/617069/commitid/39396162666436346439656465313537613561343561626465643931393366623762386265303138/environment/6170692d656e76
 * [new branch]      HEAD -> master


[mymac:~/Projects/new/foo(master)]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

以下是 git push 的结果。

[mymac:~/Projects/new/foo(master)]$ git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 340 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
To git@github.com:xxxx/foo.git
   885cc33..99abfd6  master -> master
Run Code Online (Sandbox Code Playgroud)

另外,我需要有一个 before_symlink 部署钩子。我怎样才能做到这一点 ?

小智 5

从您的问题中不清楚您是否已经尝试过该git aws.push选项。您可以参考AWSBlog 上的博客文章,将基于 Rack 的应用程序部署到 AWS Elastic Beanstalk。总而言之,您可以通过以下简单步骤来完成:

  1. eb init
  2. eb start
  3. git aws.push

当然,这需要您下载 AWS Elastic Beanstalk 命令行工具。

AFAIK,AWS Elastic Beanstalk 还没有与 Git 部署挂钩集成,但如果您已经在使用像 Jenkins 这样的 CI 服务器,这非常简单。Github 可以很好地与大多数 CI 服务器集成。您可以通过使用自定义 Shell 命令添加新的 Jenkins 作业来从 CI 服务器实现git push触发git aws.push。您可能还想在推出新构建之前执行测试工具。Jenkins 或 Travis CI 将为您完成这项工作!

关于before_symlink类型任务的执行,AWS Elastic Beanstalk 的工作方式与传统的 Capistrano 部署不同。它将您的所有代码捆绑到一个可执行存档中,然后简单地将其复制到负载平衡的节点。为了执行before_symlink类似的任务,您可能需要编写一些自定义配置文件并将它们放在.ebextensionsGit 存储库的根路径下。我这样做的方法是添加一个.ebextensions/symlink.config文件。这是用于database.yml在服务器上符号链接文件的示例代码。

container_commands:
  symlink-db:
    command: ln -sf /var/app/shared/database.yml $EB_CONFIG_APP_ONDECK/config/database.yml
Run Code Online (Sandbox Code Playgroud)

请注意,我正在运行一个带有/var/app/shared/目录的自定义 AMI ,否则,当您启动 vanilla Ruby 容器时,该目录不存在。此外,$EB_CONFIG_APP_ONDECK环境变量保存当前部署目录名称(通常为/var/app/ondeck),/var/app/current一旦部署完成并在重新启动 Rails(乘客)服务器之前移动到该名称,从而使其可用于服务请求。阅读有关自定义 AWS Elastic Beanstalk 容器的更多信息

希望这可以帮助。