AWS Codebuild将所有工件放在S3存储桶的根目录中

时间:2018-03-29 16:02:42

标签: aws-codebuild

我正在构建一个项目,将所有文件放在'dist'文件夹中,并通过CodeBuild运行它。我试图让它将'dist'中的所有文件和文件夹放入s3存储桶的根目录中,但是我无法弄清楚如何使其工作。

我的'dist'文件夹看起来像这样:

- index.html - somecssfiles.css - fonts/ - - some fonts or w/e - js/ - - some javascript files

我尝试了很多不同的东西,但似乎无法将'dist / *'放入s3存储桶的根目录。这是buildspec.yml文件中artifacts属性的当前迭代:

artifacts: files: - '*' discard-paths: yes base-directory: 'dist'

我认为这可能有用,但它忽略了文件夹。感谢阅读,感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

我认为您丢失了一块-尚不清楚,但是您需要使用以下工件在Codebuild模板中指定路径:

apache poi 4.0.1

然后确保在代码构建项目的“工件”部分中,您通常指定S3存储桶,但将“可选”名称参数添加为shiftRows

这会将输出设置为S3目录的根-请参见https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name

artifacts: files: - '**/*' base-directory: 'dist'

答案 1 :(得分:3)

我最近才知道这件事,所以如果我不对,请高手请原谅我,但是:

"discard-paths: yes"会丢弃您的目录结构。它基本上可以平整你的神器集。如果(像我一样)你只想扔掉你的工件文件夹的路径,把那个完整的路径放在" base-directory"领域。

同样,这部分我不确定,但在我看来,你不能告诉CodeBuild不要对你的工件应用服务器端加密,这意味着如果它是一个你打算允许人们使用的网站要浏览,这不会起作用,至少开箱即用。我最终做的不是使用codebuild的artifact部分,而是添加了以下post_build命令:

命令:       - aws s3 sync my/artifact/path/ s3://my-bucket-name/

编辑:我正在使用我创建的Docker镜像构建并添加到Amazon的ECR中,我必须在我的映像中安装AWS CLI才能运行该命令。 / p>

答案 2 :(得分:2)

遵循 CodePipeline 的范式,我建议您使用代码构建生成仅包含文件夹的工件,然后将该工件部署到任何位置,例如使用 AWS Code Deploy 迁移到 S3。

但如果你真的想使用代码构建,那么下面是一个解决方案:

Codebuild template 中使用:

artifacts:
    files:
        - "dist/**/*"

然后在 AWS 控制台中编辑您的代码构建项目的“工件”部分,使用以下输入:

  • “名称”:使用正斜杠(“/”)
  • “路径 - 可选”:留空
  • “命名空间类型 - 可选”:选择“无”

取自aws documentation的其他示例:

  • 如果 path 设置为 MyArtifacts,namespaceType 设置为 BUILD_ID,name 设置为 MyArtifact.zip,则输出工件存储在 MyArtifacts//MyArtifact.zip 中。

  • 如果 path 为空,namespaceType 设置为 NONE,name 设置为“/”,则输出工件存储在输出桶的根目录中。

  • 如果 path 设置为 MyArtifacts,namespaceType 设置为 BUILD_ID,name 设置为“/”,则输出工件存储在 MyArtifacts/ 中。