如何使用Hudson/Jenkins和Maven将静态web资源发布到AmazonS3?
我希望能够将静态web资源(JPG、css等)部署到AmazonS3,因为它们不会由与我的主webapp相同的服务器提供服务 我使用Jenkins(FKA Hudson)和Maven构建一个JavaWebApp.WAR文件,然后使用Jenkins“Deploy to container”插件将其上传到Tomcat实例 我真的希望静态资产作为主构建过程的一部分进行部署,但我不知道将它们部署到S3的最佳方法。我见过Hudson/Jenkins插件复制工件,但那只是我的.WAR文件,而不是项目中的文件如何使用Hudson/Jenkins和Maven将静态web资源发布到AmazonS3?,maven,hudson,amazon-s3,amazon-web-services,jenkins,Maven,Hudson,Amazon S3,Amazon Web Services,Jenkins,我希望能够将静态web资源(JPG、css等)部署到AmazonS3,因为它们不会由与我的主webapp相同的服务器提供服务 我使用Jenkins(FKA Hudson)和Maven构建一个JavaWebApp.WAR文件,然后使用Jenkins“Deploy to container”插件将其上传到Tomcat实例 我真的希望静态资产作为主构建过程的一部分进行部署,但我不知道将它们部署到S3的最佳方法。我见过Hudson/Jenkins插件复制工件,但那只是我的.WAR文件,而不是项目中的文件
有没有什么好办法?我应该用Maven插件而不是Hudson/Jenkins插件来完成这项工作吗?我就是这样做的:使用一个外部程序来完成这项工作。您只需像这样指定一个shell脚本构建步骤
#!/bin/sh
s3cmd --guess-mime-type -P sync $WORKSPACE/src/main/resources s3://your-bucket-name/some/path
您可能可以将它集成到pom.xml中并从那里调用它(因此部署过程的这一部分受版本控制)。事实证明我不需要这样做。我们一直计划使用CloudFront进行分发,最近AWS允许您为CloudFront分发指定“自定义源”。这意味着可以将静态资产与其他.war内容一起部署,然后将CloudFront分发版指向该应用程序。我创建了一个s3 webcache maven插件,该插件将图像、javascript、css和任何其他静态资源从src/main/webapp上传到给定的s3 Bucket,有关资料可于 此外,它还创建了一个名为WEB-INF/s3 webcache.xml的清单,servlet过滤器可以使用该清单将WEB服务器的请求重定向到s3或CloudForge 您需要将以下配置放入:
br.com.dynamicflow.aws
,特别是pom.xml文件(带有插件配置)和web.xml文件(带有过滤器配置)。我建议使用。您可以在大多数平台上通过pip
轻松安装它
同步到CloudFront与同步S3存储桶一样简单:
aws s3 sync your-local-dir/ s3://your-bucket --acl "public-read"
公共标志使资产世界可读
您应该能够将上述内容作为构建步骤添加到您的配置中,而不是通过插件进行操作。src/main/resources文件夹中的资源不是吗?如果我愿意,它们可以是-关键是如何将它们发送到Amazon S3?这表明您将maven文件推送到了git存储库中。我认为提交AWS密钥不是一个好主意。即使存储库是私有的,凭据也存储在外部文件中。
aws s3 sync your-local-dir/ s3://your-bucket --acl "public-read"