问题描述
我有执行以下步骤的AWS CodePipline:
当我手动运行CodeBuild阶段时,2个工件成功上传到s3。
当我更改代码并将其推送到CodeCommit时,管道成功执行,但是构件没有上载到S3存储桶。当我读取管道日志时,它断言2个文件已成功上传到S3存储桶。但是文件不在S3存储桶中。
管道和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(CP)会将其存储在 CP的存储桶中。您可以检查CP的铲斗。
工件将被压缩,尽管存储桶中的文件没有扩展名,并且具有随机名称。您可以下载文件,添加zip
扩展名并解压缩以进行验证。
部署到S3的一种方法是通过Deploy
操作和Amazaon S3操作提供程序。但这只会部署zip,不会解压缩。我认为这不是您的目标。
另一种方法是在CodeBuild项目中使用 AWS CLI 将“人工”工件复制到所需的存储桶中。这可能是最简单的方法。
,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
命令来完成。
获取pipleline详细信息:
aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
编辑管道以更新artifactStore
中的S3存储桶,然后运行命令。
aws codepipeline update-pipeline --cli-input-json file://pipeline.json