обновление определения задачи с использованием Jenkins в aws ecs ec2 - PullRequest
0 голосов
/ 18 декабря 2018

У меня две задачи, выполняющиеся в одном определении задачи (установите желаемое количество для этой службы на 2), я использую Jenkins для непрерывного развертывания.При обновлении служебной задачи, сначала нужно повернуть две запущенные задачи.

Я пытаюсь сделать это

Сначала получить текущие задачи, используя

def currentTask = sh (
      returnStdout: true,
      script:  " aws ecs list-tasks  --cluster ${clusterName} --family  ${taskFamily} --output text | egrep 'TASKARNS'| awk '{print \$2}' "
     ).trim()

Затем остановить эту задачу, используя

if (currentTask) {
sh "aws ecs stop-task --cluster ${clusterName} --task ${currentTask}"
}

, но этоостановив только первое задание.Я попытался написать «скрипт bash» с циклом for для итерации переменной «current task», но не работал с форматом Jenkins.

Я пытался использовать следующий скрипт, чтобы остановить задачи, но он не работает

 if (currentTask) {
 sh " 
       for oldtask in ${currentTask}; do
            aws ecs stop-task --cluster ${clusterName} --task ${oldtask};
       done "
   }

Есть идеи, как использовать цикл for для Jenkins, чтобы остановить обе выполняющиеся задачи?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Вот рабочий скрипт bash, который вы можете попробовать.Поскольку вы работаете с ответами JSON из CLI, лучше всего работать с jq, но вы можете попробовать и с другими.Пожалуйста, дайте мне знать, как это будет с вашей стороны.

clusterName="myCluster"
taskFamily="myTaskFamily"
for task in $(aws ecs list-tasks --cluster $clusterName --family ${taskFamily} | jq -r '.taskArns[]'); do
    aws ecs stop-task --cluster ${clusterName} --task ${task};
done

Примечание -

  1. Не рекомендуется останавливать такие задачи, как это, и, как предложил Джеффри, работать с правильной конфигурацией развертываниядля лучшего управления.
0 голосов
/ 19 декабря 2018

Здесь я должен принять комментарий Имрана - обычно вам не нужно вручную останавливать задачи.Если вы обновите службу до нового определения, ECS будет плавно переходить от задач, выполняющих старое определение, к задачам, выполняющим новое определение, без каких-либо простоев (в зависимости от некоторых других ваших настроек).Вам не нужно останавливать их.

Если вы действительно хотите остановить их вручную, несмотря на все это, тогда вам нужно будет объяснить, что означает «это не работает».Вы получаете сообщение об ошибке?Если да, то?Есть ли вывод во время этой части сборки jenkins?

...