Jenkins管道-检查是否存在ECS服务



我正在Jenkins管道中使用AWS ECS CLI来自动化我的CICD。我想做的是,如果服务还不存在,我想根据任务定义创建一个服务,如果服务已经存在,我只想更新它。以下是create-servicecli命令:

aws ecs create-service 
--cluster $stg_cluster 
--task-definition $task_def 
--service-name $ecs_service 
--desired-count 1 
--launch-type EC2 
--scheduling-strategy REPLICA 
--load-balancers "targetGroupArn=$target_group_arn,containerName=$container_name,containerPort=80" 
--deployment-configuration "maximumPercent=200,minimumHealthyPercent=100"    

它第一次运行良好,但由于以下错误,将在后续部署中失败:

调用CreateService操作时发生错误(InvalidParameterException(:服务的创建不是幂等的。

我想我必须使用命令update-service,但不知道如何编写ECS CLI命令来检查ECS服务是否已经存在。我可以想到的一种方法是,我可以检查create-servicecli命令返回的代码,看看它是否等于0,但再次不确定如何从管道中检索它。谢谢你的帮助。

首先,您可以运行aws ecs describe-services来检查该服务是否已经存在,并且状态是否为ACTIVE。如果它处于活动状态,则可以运行aws ecs update-service来更新现有服务。如果不是ACTIVE,则可以运行aws ecs create-service来创建服务。

这是一个示例代码,您可以使用它来检查服务是否已经创建并处于活动状态:

aws ecs describe-services --cluster CLUSTER_NAME --services SERVIVE_NAME | jq --raw-output 'select(.services[].status != null ) | .services[].status'

然后使用if条件来运行CCD_ 9或CCD_。

这是我的代码,以防有人感兴趣。#Jenkinsfile管道

stage('Deploy')
{
steps {
....
script {
int count = sh(script: """
aws ecs describe-services --cluster $ecs_cluster --services $ecs_service | jq '.services | length'
""", 
returnStdout: true).trim()
echo "service count: $count"
if (count > 0) {
//ECS service exists: update
echo "Updating ECS service $ecs_service..."
sh(script: """
aws ecs update-service 
--cluster $ecs_cluster 
--service $ecs_service 
--task-definition $task_def 
""")
}
else {
//ECS service does not exist: create new
echo "Creating new ECS service $ecs_service..."

sh(script: """
aws ecs create-service 
--cluster $ecs_cluster 
--task-definition $task_def 
--service-name $ecs_service 
--desired-count 1 
--launch-type EC2 
--scheduling-strategy REPLICA 
--load-balancers "targetGroupArn=${target_group_arn},containerName=$app_name,containerPort=80" 
--deployment-configuration "maximumPercent=200,minimumHealthyPercent=100"
""")
}                
}  
}
}

在aws-cli:中使用查询参数

#!/bin/bash
CLUSTER="test-cluster-name"
SERVICE="test-service-name"
echo "check ECS service exists"
status=$(aws ecs describe-services --cluster ${CLUSTER} --services ${SERVICE} --query 'failures[0].reason' --output text)
if [[ "${status}" == "MISSING" ]]; then
echo "ecs service ${SERVICE} missing in ${CLUSTER}"
exit 1
fi

詹金斯管道相同:

stage('Deploy')
{
steps {
....
script {
string status = sh(script: """
aws ecs describe-services --cluster $ecs_cluster --services $ecs_service --query 'failures[0].reason' --output text
""", 
returnStdout: true).trim()
echo "service status: $status" 
if (status == 'MISSING') { 
echo "ecs service: $ecs_service does not exists in $ecs_cluster"
// put create service logic
}
}}}

相关内容

  • 没有找到相关文章

最新更新