带有 git 源和部署挂钩的 Elastic beanstalk rails 应用程序

带有 git 源和部署挂钩的 Elastic beanstalk rails 应用程序

我想为现有的 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)

以下仅仅是 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 [email protected]:xxxx/foo.git
   885cc33..99abfd6  master -> master

另外,我需要一个 before_symlink 部署钩子。我该怎么做?

答案1

从你的问题中无法明确你是否已经尝试过这个git aws.push选项。你可以参考一篇博客文章在 AWSBlog 上了解如何将基于 Rack 的应用程序部署到 AWS Elastic Beanstalk。总结一下,您可以按照以下简单步骤进行操作:

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

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

据我所知,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

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

希望这可以帮助。

答案2

我能够将 Travis CI 测试构建与 Amazon Beanstalk 部署集成。为了做到这一点,我必须自动化 eb 工具,因为当前版本 2.5.1 仅以交互方式运行,因此我编辑了一些 python 文件上的 EB 工具代码,然后创建了一个 .travis.yml 文件,其中包含将应用程序部署到 AWS Beanstalk 的适当说明。

以下是我的博客的链接,其中完整描述了该过程:

http://www.sysadminops.com/amazon-beanstalk-and-travis-ci-integration/

相关内容