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/.