5

静的な Web リソース (jpg、css など) を Amazon S3 にデプロイできるようにしたいと考えています。メインの Web アプリケーションと同じサーバーによって提供されるわけではないからです。

Jenkins (FKA Hudson) と Maven を使用して Java webapp .WAR ファイルを作成し、Jenkins の「Deploy to container」プラグインを使用して Tomcat インスタンスにアップロードします。

静的アセットをメインのビルド プロセスの一部としてデプロイしたいのですが、それらを S3 に移行する最善の方法がわかりません。アーティファクトをコピーする Hudson/Jenkins プラグインを見たことがありますが、それは私の .WAR ファイルであり、プロジェクト内のファイルではありません。

これを行うための「良い」方法に関するアイデアはありますか? Hudson/Jenkins プラグインではなく、Maven プラグインでこれを行う必要がありますか?

4

4 に答える 4

6

これが私のやり方です。s3cmdなどの外部プログラムを使用してジョブを実行します。このようにシェルスクリプトのビルドステップを指定するだけです

#!/bin/sh

s3cmd --guess-mime-type -P sync $WORKSPACE/src/main/resources s3://your-bucket-name/some/path

おそらくこれをpom.xmlに統合し、そこから呼び出すことができます(したがって、デプロイメントプロセスのこの部分はバージョン管理下にあります)。

于 2011-03-24T08:03:44.590 に答える
1

結局、私はこれをする必要はありませんでした。私たちは常にCloudFrontをディストリビューションに使用することを計画していましたが、最近AWSではCloudFrontディストリビューションの「カスタムオリジン」を指定できるようになりました。これは、静的アセットを残りの.warコンテンツと一緒にデプロイしてから、CloudFrontディストリビューションがそのアプリケーションをポイントできることを意味します。

于 2011-04-01T08:08:42.560 に答える
1

画像、javascript、css、およびその他の静的リソースを src/main/webapp から特定の S3 バケットにアップロードするs3-webcache-maven-pluginを作成しました。ソースはhttps://github.com/aro1976で入手できます。 /aws-parent .

さらに、WEB-INF/s3-webcache.xmlという名前のマニフェストを作成します。これをサーブレット フィルターで使用して、Web サーバーからS3またはCloudForgeにリクエストをリダイレクトできます。

次の構成を <build><plugins> に配置する必要があります。

<plugin>
  <groupId>br.com.dynamicflow.aws</groupId>
  <artifactId>s3-webcache-maven-plugin</artifactId>
  <version>0.0.2-SNAPSHOT</version>
  <configuration>
    <accessKey>${s3.accessKey}</accessKey>
    <secretKey>${s3.secretKey}</secretKey>
    <bucketName>${s3.bucketName}</bucketName>
    <hostName>${cloudForge.cname}</hostName><!-- hostName is optional -->
    <includes>
      <include>**/*.gif</include>
      <include>**/*.jpg</include>
      <include>**/*.tif</include>
      <include>**/*.png</include>
      <include>**/*.pdf</include>
      <include>**/*.swf</include>
      <include>**/*.eps</include>
      <include>**/*.js</include>
      <include>**/*.css</include>
    </includes>
    <excludes>
      <exclude>WEB-INF/**</exclude>
    </excludes>
    </configuration>
    <executions>
    <execution>
      <goals>
          <goal>upload</goal>
      </goals>
      <phase>prepare-package</phase>
    </execution>
    </executions>
</plugin>

現時点では、 includesexcludesなどの構成パラメーターが必要であり、従来の Maven 正規表現を使用できます。

S3に保存されているファイル名は、 SHA-256ダイジェストに置き換えられます。これは、非常に長いキャッシュ ヘッダーと複数の戦争の最適化を可能にするためです。そのため、非常にシンプルで従来のファイル名を SHA- 256 ダイジェスト対応。

https://github.com/aro1976/aws-parent/tree/aws-parent-0.0.1/aws-examples/s3-webcache-exampleのサンプル プロジェクト、特にファイル pom.xml (プラグイン構成を含む) を確認してください) および web.xml (フィルター構成を使用)。

于 2012-08-04T04:16:14.093 に答える
0

aws cliをお勧めします。pipほとんどのプラットフォームから簡単にインストールできます。

CloudFront への同期は、S3 バケットを同期するのと同じくらい簡単です。

aws s3 sync your-local-dir/ s3://your-bucket --acl "public-read"

public フラグは、アセットを誰でも読み取り可能にします。

プラグインを経由するのではなく、構成のビルドステップとして上記を追加するだけでよいはずです。

于 2016-02-28T22:14:39.423 に答える