我遇到了同样的问题。
tl:博士
我没有将带有 imageDetail.json 的正确输入工件传递给管道 CodeDeployToECS 操作。
概括:
我没有使用“<IMAGE1_NAME>”占位符签入任务定义的版本,而是在管道内动态生成任务定义输入到 CodeDeploy。
项目早期的任务定义非常不稳定,新变量等被传递给容器。它在管道 (Cloudformation) 中生成并注册,然后通过 Codebuild 项目读出,用“<IMAGE1_NAME>”替换图像占位符,并通过管道工件传递到管道的下一个阶段。
修复它:
- 我在生成 imageDetail.json 的管道中有一个 CodeBuild 项目:
{"ImageURI":"########.dkr.ecr.eu-west-1.amazonaws.com/##/#####:2739511dd87d4e4e1f65ed69c9e779b63fb72e36-master-fbe73fdc-6213-4bd6-a784-dcc3d2ae7845"}
它的管道输出名为“BuildDockerOutput”
- 我有另一个 Codebuild 项目,它产生:
任务定义.json
{
"containerDefinitions": [
{
"name": "ronantest1",
"image": "<IMAGE1_NAME>",
]
}
appspec.json
{
"version": 0.0,
"Resources": [
{
"TargetService": {
"Type": "AWS::ECS::Service",
"Properties": {
"TaskDefinition": "<TASK_DEFINITION>",
"LoadBalancerInfo": {
"ContainerName": "ronantest1",
"ContainerPort": "8080"
}
}
}
}
],
"Hooks": [
{
"AfterAllowTestTraffic": "arn:aws:lambda:eu-west-1:######:function:code-deploy-after-allow-test-traffic"
}
]
}
它的管道输出名为“PrepareCodeDeployOutputTesting”
我的最终 CodeDeploy 操作如下所示:
- Name: BlueGreenDeploy
InputArtifacts:
- Name: BuildDockerOutput
- Name: PrepareCodeDeployOutputTesting
Region: !Ref DeployRegion1
ActionTypeId:
Category: Deploy
Owner: AWS
Version: '1'
Provider: CodeDeployToECS
RoleArn: !Sub arn:aws:iam::${TestingAccountId}:role/######/CrossAccountsDeploymentRole
Configuration:
AppSpecTemplateArtifact: PrepareCodeDeployOutputTesting
AppSpecTemplatePath: appspec.json
ApplicationName: !Ref ApplicationName
DeploymentGroupName: !Ref ApplicationName
TaskDefinitionTemplateArtifact: PrepareCodeDeployOutputTesting
TaskDefinitionTemplatePath: taskdef.json
Image1ArtifactName: BuildDockerOutput
Image1ContainerName: "IMAGE1_NAME"
RunOrder: 4
请注意 CodeDeployToECS 的不同方面需要来自不同 InputArtifacts 的人工制品,特别是“Image1ArtifactName”