5

AWS を使用する場合、新しく作成したインスタンスにアプリケーションをデプロイするには、AWS CodeDeploy を使用するのが良い方法のようです。これは次のように機能します。

  1. アプリケーションの Auto Scaling グループを設定する
  2. CodeDeploy エージェントを S3 からプルし、インストールして起動する自動スケーリング グループ用のユーザー データ bash スクリプトを作成します。
  3. 自動スケーリング グループにデプロイする CodeDeploy デプロイ グループを設定する

これで、アプリケーション バンドル (jar または debian パッケージなど) がデプロイ グループにデプロイされると、自動スケーリング グループで起動された新しいインスタンスに自動的にデプロイされます。

私の質問は、この展開戦略を Travis CI のような CI ツールにどのように適合させることができるかということです。

具体的には:

  • Travis CI のような CI ツールでビルドされたパッケージを CodeDeploy で取得するにはどうすればよいですか? ビルドジョブはパッケージを S3 にアップロードする必要がありますか?
  • CodeDeploy を使用して、アプリケーションを段階的に (一度に 1 つのインスタンスなど) デプロイするにはどうすればよいですか?
  • このデプロイ戦略では、実行中の各インスタンスをシャットダウンして置き換える必要がありますか? それとも、アプリケーションの新しいバージョンを既存のインスタンスにデプロイしますか? 前者の場合、展開中にマシンの IP アドレスが変更されるため、他のサービスが新しく展開されたアプリケーションをどのように検出できるでしょうか (つまり、IP アドレスがハードコーディングされていない場合)。
4

2 に答える 2

0

Travis-CI と CodeDeploy を実際に統合する方法の例を探している他の (私のような) 人のために:

  • CodeDeploy ウォークスルーで説明されているように、アプリケーション、DeploymentGroups、およびインスタンスを構成します。
  • aws-cli コマンドを使用して、最初のリビジョンを CodeDeploy ターゲット インスタンスに正常にデプロイします。
  • アプリケーションをデプロイして実行したら、デプロイをトリガーするように Travis を構成します。
  • CodeDeployappspec.ymlファイルとデプロイに使用されるすべてのスクリプトは、アプリケーション バンドル内にパッケージ化する必要があります (latest.zip以下の例)。

次の.travis.yml設定は私のために働いた:

script: npm run build
before_deploy:
  - zip -r latest dist/*
  - mkdir -p dpl_cd_upload
  - mv latest.zip dpl_cd_upload/latest.zip
deploy:
  - provider: s3
    access_key_id: "XXXX"
    secret_access_key: "YYYYY"
    bucket: "deployments-bucket-name"
    local_dir: dpl_cd_upload
    skip_cleanup: true
  - provider: codedeploy
    access_key_id: "ZZZZZ"
    secret_access_key: "WWWW"
    bucket: "deployments-bucket-name"
    key: latest.zip
    bundle_type: zip
    application: CodeDeployAppName
    deployment_group: CodeDeployDeploymentGroupName

この例は本当に役に立ちました: https://github.com/travis-ci/cat-party/blob/master/.travis.yml

于 2018-10-23T15:39:02.640 に答える