我当前的设置使用AWS CodeBuild构建一个docker-image并将其推送到AWS ECR。 将CodePipeline中的Docker映像从ECR部署到ECS服务时,需要使用imagedefinitions.json文件来执行CodePipeline中的部署步骤。 据我了解,该文件用于定义新的任务定义。我目前在CodeBuild的buildspec.yml文件中定义此文件:
echo Writing image definitions file...
- printf '[{"name":"%s","imageUri":"%s"}]' $MODULE $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json
但是,我想使用现有的任务定义,而不是为每个构建都创建相同任务定义的新修订版。我需要使用在现有任务定义中定义的环境变量,并且在imagedefinitions.json文件中也没有找到定义这些变量的方法。
答案 0 :(得分:0)
imagedefinitions.json是否可用于指定现有任务定义?
“ imagedefinitions.json”文件未定义ECS任务。它定义了一个container_name(ECS任务定义的一部分)和image_name:tag。
[
{
"name": "sample-app",
"imageUri": "11111EXAMPLE.dkr.ecr.us-west-2.amazonaws.com/ecs-repo:latest"
}
]
在ECS部署操作中,您可以指定集群名称和服务名称。添加“ imagedefinitions.json”中的两项,即container_name和image:tag,ECS作业人员将具有创建任务定义修订和更新服务(服务具有关联的任务定义)所需的全部信息。
管道中的ECS部署操作定义:
{
"name": "Deploy",
"actions": [
{
"name": "Deploy",
"actionTypeId": {
"category": "Deploy",
"owner": "AWS",
"provider": "ECS",
"version": "1"
},
"runOrder": 1,
"roleArn": "arn:aws:iam::<Account>:role/Pipeline_Role",
"configuration": {
"ClusterName": "<Cluster>", <====================
"ServiceName": "<Service>” <====================
},
"outputArtifacts": [],
"inputArtifacts": [
{
"name": "SourceArtifact"
}
],
"region": "us-east-1"
}
]
}
请注意,使用ECS部署操作的部署阶段的结果是一个新的任务定义修订版,该修订版将在任务定义中包含指定容器的更新的图像URI。您的其他任务定义参数(例如环境变量)应保持不变。
或者,我可以在此文件中指定环境变量吗?
否,但是如上所述,您现有的Task Def(创建新修订版的TaskDef)环境变量将保持不变。
让我知道是否有任何困惑。