我正在尝试使用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
我需要将public
文件夹中的所有内容(包括子文件夹)放入S3存储桶的根中。
到目前为止,我已经尝试关注文档here,here和here。我尝试使用:
**/*
递归地将所有内容保存在文件夹public
中,但是S3存储桶将具有该文件夹的路径,因此index.html
不在根目录中。discard-paths: yes
删除public
文件夹的路径,但是在S3存储桶中,所有文件都位于根目录中,没有子文件夹结构。base-directory
:如here所述。artifacts:
secondary-artifacts:
artifact1:
files:
- directory/file
artifact2:
files:
- directory/file2
保留文件夹结构,但构建失败。答案 0 :(得分:17)
TL; DR 您可能不需要使用“ discard-paths:yes ”。因此,删除“ discard-paths:yes ”,然后将“ base-directory ”和“ ** / * ”一起用于全局模式。继续阅读以了解更多原因。
是的,是的,罪魁祸首很平常。在我的情况下,目录结构如下:
dist/
|-- favicon.ico
|-- index.html
|-- js
| `-- app.js
`-- revision.txt
因此,为了使工件在保留嵌套目录结构的同时包含“ dist ”目录中的所有内容,buildspec必须看起来像这样:
artifacts:
files:
- '**/*'
base-directory: 'dist'
本质上,“ 基本目录”参数的行为与unix的“ cd”命令相同,因此,首先CodeBuild会跳转到该目录,只有在解析了glob模式之后,在这种情况下,此标志- * * / * 。如果您还碰巧使用了“ discard-paths ”,那么发生的是,大概是CodeBuild将当前目录更改为“ dist ”,正确解析了文件结构但是,然后从解析的路径中删除所有路径前缀,因此结果将是没有嵌套的纯目录结构。
希望有帮助!
答案 1 :(得分:5)
我找到了解决它的方法。我认为这不是最好的方法,但是它可以工作。希望您可以找到有用的解决方案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:
- '**/*'
换句话说:
我将嵌套<path>/public
文件夹中的所有内容复制到名为./build-output
的文件夹中。
然后在post_build
中,将所有内容移出文件夹build-output
。
删除从我的GitHub存储库中提取的文件,这些文件不需要在S3 bucket
然后我得到想要的结果:public
内S3 bucket
内所有文件中带有正确的文件夹树。
更新:
答案 2 :(得分:0)
我遇到了一个类似的问题,在语法下面的许多排列之后,对我来说很有效。
artifacts:
files:
- './**/*'
base-directory: public
name: websitename
答案 3 :(得分:-1)
这对我有用。
/
buildspec.yml
/public
index.html
/js
/img
appspec.yml
/src
在buildspec.yml
中 artifacts:
files:
- 'public/*'
discard-paths: yes