AWS CodePipeline 未将文件上传到 S3 存储桶

AWS CodePiplene not upload file to the S3 bucket

我有 AWS CodePipline,步骤如下:

当我运行 CodeBuild阶段手动2个工件成功上传到s3。

当我更改代码并将其推送到 CodeCommit 管道时,管道成功执行,但工件未上传到 S3 存储桶。当我阅读管道日志时,它断言 2 个文件已成功上传到 S3 存储桶。但文件不在 S3 存储桶中。

Pipeline 和 CodeBuild 使用相同的 S3 存储桶。这些是管道日志。最后 3 行日志断言 2 个工件已成功上传到 S# 存储桶。

Container] 2020/08/24 08:25:55 Phase complete: POST_BUILD State: SUCCEEDED
[Container] 2020/08/24 08:25:55 Phase context status code:  Message: 
[Container] 2020/08/24 08:25:55 Expanding base directory path: ./build-artifacts
[Container] 2020/08/24 08:25:55 Assembling file list
[Container] 2020/08/24 08:25:55 Expanding ./build-artifacts
[Container] 2020/08/24 08:25:55 Expanding file paths for base directory ./build-artifacts
[Container] 2020/08/24 08:25:55 Assembling file list
[Container] 2020/08/24 08:25:55 Expanding **/*
[Container] 2020/08/24 08:25:55 Found 2 file(s)
[Container] 2020/08/24 08:25:56 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED
[Container] 2020/08/24 08:25:56 Phase context status code:  Message: 

CodePipeline 将覆盖 CodeBuild 的工件桶,我猜它正在将工件移动到它自己的桶中。您可以通过 运行 执行以下命令查看 CodePipeline 的存储桶。

codepipeline get-pipeline --name PipelineName--query pipeline.[artifactStore]

[
    {
        "type": "S3",
        "location": "codepipeline-us-east-1-xxxxxxxx"
    }
]

如果您使用 CloudFormation 创建管道,请使用 ArtifactStore 配置存储桶。

更新 CodePipeline 中的 ArtifactStore: 目前,我没有看到通过控制台更新 ArtifactStore 的方法,但可以使用 update-pipeline 命令完成。

获取管道详细信息:

aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

编辑管道以更新 artifactStore 中的 S3 存储桶,然后 运行 命令。

aws codepipeline update-pipeline --cli-input-json file://pipeline.json

答案参考:

如评论中所述,您看不到存储桶中的工件的原因是 CodePipeline (CP) 会将其存储在 CP 的存储桶 中。你可以查看CP的桶

工件将被压缩,尽管存储桶中的文件将没有扩展名并且具有随机名称。您可以下载文件,添加zip扩展名并解压验证。

部署到 S3 的一种方法是通过 Deploy 操作和 Amazaon S3 操作提供程序。但这只会部署 zip,不会解压缩。我不认为这是你的目标。

另一种方法是在您的 CodeBuild 项目中使用 AWS CLI 以简单地将工件“手动”复制到所需的存储桶。这可能是最简单的方法