AWS Codebuild 将所有工件放在 S3 存储桶的根目录中
AWS Codebuild puting all artifacts in root of S3 bucket
我正在构建一个项目,将它的所有文件放在一个 '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'
我认为这可能会起作用,但它忽略了文件夹。感谢您的帮助,感谢阅读。
我自己也是最近才弄明白的,如有不妥请高手见谅,但是:
"discard-paths: yes"
会丢弃您的目录结构。它实质上使您的工件集变平。如果(像我一样)您只想丢弃 到 您的工件文件夹的路径,请将该完整路径放在 "base-directory" 字段中。
同样,这部分我不确定,但在我看来你不能告诉 CodeBuild 不要对你的工件应用服务器端加密,这意味着如果它是一个你打算允许人们浏览的网站到,那是行不通的,至少开箱即用。我最终做的是根本没有使用代码构建的工件部分,我添加了以下 post_build 命令:
命令:
- aws s3 sync my/artifact/path/ s3://my-bucket-name/
编辑: 我正在使用我创建并添加到亚马逊 ECR 的 docker 图像进行构建,我必须在我的图像中安装 AWS CLI 才能运行那个命令。
我认为您遗漏了一块 - 不清楚,但您需要在 Codebuild 模板中使用以下工件指定路径:
artifacts:
files:
- '**/*'
base-directory: 'dist'
然后确保在你的codebuild项目的"Artifacts"部分,正常指定S3 bucket,但是添加"optional" name参数为/
这会将输出设置为 S3 目录的根目录 - 请参阅 https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name
If type is set to S3, this is the name of the output artifact object. If you set the name to be a forward slash ("/"), the artifact is stored in the root of the output bucket.
遵循 CodePipeline 的范式,我建议您使用代码构建生成一个仅包含文件夹的工件,然后将该工件部署到任何地方,例如使用 AWS Code Deploy 到 S3。
但是如果你真的想使用Code Build那么下面是一个解决方案:
在Codebuild template
中使用:
artifacts:
files:
- "dist/**/*"
然后在 AWS 控制台中编辑代码构建项目的“工件”部分,使用以下输入:
- “姓名”:使用正斜杠(“/”)
- “路径 - 可选”:留空
- “命名空间类型 - 可选”:选择“None”
其他示例取自 aws documentation:
如果path设置为MyArtifacts,namespaceType设置为BUILD_ID,name设置为MyArtifact.zip,则输出的artifact存储在MyArtifacts中//MyArtifact.zip.
如果path为空,namespaceType设置为NONE,name设置为“/”,输出工件存储在输出桶的根目录中。
如果path设置为MyArtifacts,namespaceType设置为BUILD_ID,name设置为“/”,输出的artifact存储在MyArtifacts/.
我正在构建一个项目,将它的所有文件放在一个 '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'
我认为这可能会起作用,但它忽略了文件夹。感谢您的帮助,感谢阅读。
我自己也是最近才弄明白的,如有不妥请高手见谅,但是:
"discard-paths: yes"
会丢弃您的目录结构。它实质上使您的工件集变平。如果(像我一样)您只想丢弃 到 您的工件文件夹的路径,请将该完整路径放在 "base-directory" 字段中。
同样,这部分我不确定,但在我看来你不能告诉 CodeBuild 不要对你的工件应用服务器端加密,这意味着如果它是一个你打算允许人们浏览的网站到,那是行不通的,至少开箱即用。我最终做的是根本没有使用代码构建的工件部分,我添加了以下 post_build 命令:
命令:
- aws s3 sync my/artifact/path/ s3://my-bucket-name/
编辑: 我正在使用我创建并添加到亚马逊 ECR 的 docker 图像进行构建,我必须在我的图像中安装 AWS CLI 才能运行那个命令。
我认为您遗漏了一块 - 不清楚,但您需要在 Codebuild 模板中使用以下工件指定路径:
artifacts:
files:
- '**/*'
base-directory: 'dist'
然后确保在你的codebuild项目的"Artifacts"部分,正常指定S3 bucket,但是添加"optional" name参数为/
这会将输出设置为 S3 目录的根目录 - 请参阅 https://docs.aws.amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name
If type is set to S3, this is the name of the output artifact object. If you set the name to be a forward slash ("/"), the artifact is stored in the root of the output bucket.
遵循 CodePipeline 的范式,我建议您使用代码构建生成一个仅包含文件夹的工件,然后将该工件部署到任何地方,例如使用 AWS Code Deploy 到 S3。
但是如果你真的想使用Code Build那么下面是一个解决方案:
在Codebuild template
中使用:
artifacts:
files:
- "dist/**/*"
然后在 AWS 控制台中编辑代码构建项目的“工件”部分,使用以下输入:
- “姓名”:使用正斜杠(“/”)
- “路径 - 可选”:留空
- “命名空间类型 - 可选”:选择“None”
其他示例取自 aws documentation:
如果path设置为MyArtifacts,namespaceType设置为BUILD_ID,name设置为MyArtifact.zip,则输出的artifact存储在MyArtifacts中//MyArtifact.zip.
如果path为空,namespaceType设置为NONE,name设置为“/”,输出工件存储在输出桶的根目录中。
如果path设置为MyArtifacts,namespaceType设置为BUILD_ID,name设置为“/”,输出的artifact存储在MyArtifacts/.