Как дождаться завершения сборки проекта CodeBuild перед завершением модульного теста Boto3?

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

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


person David    schedule 11.12.2018    source источник


Ответы (1)


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

      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)
person David    schedule 14.12.2018
comment
Спасибо, эта идея мне помогла. Чтобы улучшить это, я проверяю endTime сборки как условие цикла while, который все еще спит, но не останавливается, пока сборка не завершится. - person Ikon; 20.07.2019
comment
boto3, похоже, поддерживает get_waiter(), но неясно, есть ли в CodeBuild какие-либо доступные официанты? boto3.amazonaws.com/ v1/документация/api/последняя/ссылка/ - person Justin; 21.01.2020