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 ”,正确地解析文件结构,但随后从解决路径删除所有路径前缀,这样的结果将是没有嵌套的普通目录结构。
希望有帮助!
我想出了一种解决方法。我认为这不是最好的方法,但是它可以工作。我希望您可以找到此解决方案有用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
。
更新:
归档时间: |
|
查看次数: |
2941 次 |
最近记录: |