it-swarm-ja.com

Elastic Beanstalk Rails gitソースとデプロイフックを備えたアプリケーション

既存のRailsアプリケーション用にElasticBeanstalkをセットアップしたい。

サンプルのfooアプリを作成することに成功しました。

これらは私が持っている質問です

デプロイするローカルパスからではなく、gitリポジトリからデプロイする必要があります。サンプルのfooアプリでこれを行うにはどうすればよいですか。

Git aws.Pushコマンドは、新しいec2インスタンスにデプロイされているようです。ただし、変更をgitリポジトリにプッシュしませんでした。 git aws.Pushを実行する前に、git Pushを個別に実行する必要がありますか? gitステータスを実行すると、ブランチが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:20121127T030627Zf[email protected]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)

以下は、gitPushだけの結果です。

[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デプロイフックが必要です。これどうやってするの ?

3
Divya Bhargov

git aws.Pushオプションをすでに試しているかどうかは、質問からは明らかではありませんでした。ラックベースのアプリケーションをAWSElastic Beanstalkにデプロイするには、AWSBlogで ブログ投稿 を参照できます。同じことを要約すると、次の簡単な手順でそれを行うことができます。

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

もちろん、これにはAWS ElasticBeanstalkコマンドラインツールをダウンロードする必要があります。

AFAIK、AWS Elastic BeanstalkにはまだGitデプロイフックとの統合がありませんが、JenkinsのようなCIサーバーをすでに使用している場合は非常に簡単です。 Githubは、ほとんどのCIサーバーと非常にうまく統合できます。カスタムシェルコマンドを使用して新しいJenkinsジョブを追加することで、CIサーバーからgit Pushトリガーgit aws.Pushを実現できます。新しいビルドをプッシュする前に、テストハーネスを実行することもできます。 JenkinsまたはTravisCIがあなたに代わって仕事をします!

before_symlinkタイプのタスクの実行に関して、AWS ElasticBeanstalkの動作方法は従来のCapistranoデプロイメントとは異なります。すべてのコードを実行可能アーカイブにバンドルし、負荷分散されたノードにコピーするだけです。 before_symlinkのようなタスクを実行するには、いくつかのカスタム構成ファイルを作成して、Gitリポジトリのルートパスの.ebextensionsの下に配置することをお勧めします。私がそれをした方法は、.ebextensions/symlink.configファイルを追加することです。サーバー上のdatabase.ymlファイルをシンボリックリンクするためのサンプルコードを次に示します。

container_commands:
  symlink-db:
    command: ln -sf /var/app/shared/database.yml $EB_CONFIG_APP_ONDECK/config/database.yml

/var/app/shared/ディレクトリでカスタムAMIを実行していることに注意してください。そうしないと、Vanilla Rubyコンテナを起動したときに存在しません。さらに、$EB_CONFIG_APP_ONDECK環境変数現在のデプロイディレクトリ名(通常は/var/app/ondeck)を保持します。これは、デプロイが完了し、Rails(Passenger)サーバーを再起動する前に、/var/app/currentに移動されます。リクエストの処理に利用できます。詳細は AWS Elastic Beanstalkコンテナのカスタマイズ をご覧ください。

お役に立てれば。

5
rhetonik

TravisCIテストビルドをAmazonBeanstalkデプロイメントと統合することができました。これを行うには、ebツールを自動化する必要がありました。現在のバージョン2.5.1はインタラクティブな方法でしか実行されないため、いくつかのpythonファイルでEBツールコードを編集してから、を作成しました。アプリをAWSBeanstalkにデプロイするための適切な手順が記載されたtravis.ymlファイル。

プロセスの完全な説明を提供する私のブログへのリンクは次のとおりです。

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

0
Oskar