AWS CodeBuild buildspec.yml递归获取所有文件和子文件夹

Vie*_*iet 6 amazon-s3 amazon-web-services aws-codebuild

我正在尝试使用AWS CodeBuild将所有文件和子文件夹放在嵌套public文件夹中,并使用CodePipeline部署到S3存储桶。我能够将它们挂在一起,但是努力配置buildspec.yml文件以获取所需的输出。

我的文件夹结构:

<path>/public/

??? 404.html
??? css
?   ??? ...
??? fonts
?   ??? bootstrap
?   ?   ??? ...
?   ??? icomoon
?   ?   ??? icomoon
?   ?   ?   ??? ...
?   ??? simple-line-icons
?       ??? ...
??? images
?   ??? ...
??? index.html
??? index.xml
??? js
?   ??? ...
??? tags
    ??? index.xml
Run Code Online (Sandbox Code Playgroud)

我需要将文件夹中的所有内容(包括子文件夹)public放入S3存储桶的根目录中。

到目前为止,我已经尝试在这里这里这里关注文档。我试过使用:

  • **/*以便以递归方式将所有内容保存在文件夹中,public但S3存储桶将具有该文件夹的路径,因此index.html不在根目录中。
  • discard-paths: yes要删除public文件夹的路径,但在S3存储桶中,所有文件都位于根目录中,不保留任何子文件夹结构。
  • base-directory:作为描述在这里
  • artifacts: secondary-artifacts: artifact1: files: - directory/file artifact2: files: - directory/file2 保持文件夹结构,但我的构建失败。
  • 上面所有语法的不同组合,但是我的构建失败了。

小智 29

TL; DR你可能并不需要使用“丢弃路径:是的”。所以,去掉“ discard-paths: yes ”,而是使用“ base-directory ”和“ **/* ”作为glob模式。继续阅读以了解更多原因。

所以是的,正如通常发生的那样,罪魁祸首非常微不足道。就我而言,目录结构如下所示:

dist/
|-- favicon.ico
|-- index.html
|-- js
|   `-- app.js
`-- revision.txt
Run Code Online (Sandbox Code Playgroud)

因此,为了让工件包含“ dist ”目录中的所有内容,同时保留嵌套目录结构,构建规范必须如下所示:

artifacts:
  files:
    - '**/*'
  base-directory: 'dist'
Run Code Online (Sandbox Code Playgroud)

本质上,“ base-directory ”参数的行为类似于unix的“ cd”命令,因此首先CodeBuild跳转到该目录,然后才解析glob模式,在本例中为 - **/*。如果你也碰巧使用“丢弃路径”然后发生的事情是,据推测,CodeBuild将当前目录切换到“ DIST ”,正确地解析文件结构,但随后从解决路径删除所有路径前缀,这样的结果将是没有嵌套的普通目录结构。

希望有帮助!


Vie*_*iet 7

我想出了一种解决方法。我认为这不是最好的方法,但是它可以工作。我希望您可以找到此解决方案有用buildspec.yml

version: 0.2

phases:
  build:
    commands:
      - mkdir build-output
      - cp -R <path>/public/ build-output
  post_build:
    commands:
      - mv build-output/**/* ./
      - mv build-output/* ./
      - rm -R build-output *.yml LICENSE README* .git*
artifacts:
  files:
    - '**/*'

Run Code Online (Sandbox Code Playgroud)

换句话说:

  • 我将嵌套<path>/public文件夹中的所有内容复制到名为的文件夹中./build-output

  • 然后,post_build将所有内容移出文件夹build-output

  • 删除从我的GitHub存储库中提取的文件,这些文件不需要在GitHub中托管静态网站 S3 bucket

  • 然后,我得到想要的结果:带有正确的文件夹树public的根目录中的所有文件S3 bucket

更新:

  • 您也可以在这里使用我的buildspec.yml示例文件。由于该示例超出了此问题的范围,因此我不在此处粘贴代码。
  • 我在这里详细解释。