Как ждать, пока проект CodeBuild закончит сборку, прежде чем завершить модульный тест Boto3? - PullRequest
0 голосов
/ 12 декабря 2018

При написании юнит-теста Python Boto3 для CodeBuild, можно ли запустить start_build () и затем ждать () завершения сборки, прежде чем оценивать, прошел ли мой тест или нет?Обычно я бы просто использовал официанта, но насколько я могу судить, у CodeBuild нет официантов (я сделал client.waiter_names и получил пустой массив, а в документации по Boto3 нет списка официантов для клиента CodeBuild).

Я нашел этот (дублирующий) вопрос , но в ответе не говорится, как на самом деле решить проблему ожидания - он просто говорит, как проверить состояние сборки.Это было бы полезно, если бы я мог как-то подождать (), пока статус не изменится на определенное значение.

1 Ответ

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

В итоге я так и не нашел хорошего решения, поэтому просто сделал цикл, который будет опрашивать статус до его завершения.

      client = boto3.client(service_name='codebuild', region_name='us-east-1')
      new_build = client.start_build(projectName='fooProject')
      buildId = new_build['build']['id']

      buildSucceeded = False

      counter = 0
      while counter < 10:   #capped this, so it just fails if it takes too long
        time.sleep(5)
        counter = counter + 1
        theBuild = client.batch_get_builds(ids=[buildId])
        buildStatus = theBuild['builds'][0]['buildStatus']

        if buildStatus == 'SUCCEEDED':
          buildSucceeded = True
          break
        elif buildStatus == 'FAILED' or buildStatus == 'FAULT' or buildStatus == 'STOPPED' or buildStatus == 'TIMED_OUT':
          break

      self.assertTrue(buildSucceeded)
...