Остановите выполнение заданий GitHub, если еще одно не удалось (остановка при сбое)

#github #github-actions

Вопрос:

TL; DR: Параллельное выполнение заданий a,b. Если a терпит неудачу, остановите выполнение b, пока оно все еще выполняется.

Моя компания использует действия GitHub для развертывания нашего кода.

Первым шагом в нашем развертывании является создание докеров и перенос их на DockerHub.

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

Обе эти работы являются отдельными, и у нас есть еще несколько работ, в зависимости от успеха первых двух.

Прямо сейчас, если тестовое задание завершится неудачно, другое задание продолжит выполняться, но, очевидно, следующее не будет выполнено, потому что тестовое задание завершилось неудачно.

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

Возможно ли это? После поиска в Интернете, StackOverflow и на странице действий GitHub я не нашел способа сделать это.

Спасибо!

Комментарии:

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

2. Также это помогло бы увидеть ваше действие на GitHub, чтобы увидеть, что вы пробовали.

3. В вашем рабочем процессе есть только задания a и b? Есть способ отменить весь рабочий процесс с помощью API, но я не уверен, что вы этого хотите. Вы можете отменить рабочий процесс, если что-то пойдет не так с заданием a, что означает, что задание b и следующие задания также будут остановлены.

4. Я думаю, вы могли бы разделить эти 2 задания в разных рабочих процессах. Затем, если ваш тестовый рабочий процесс не удался, вы можете добавить в него новое задание, которое отменит другой рабочий процесс, используя службу отмены выполнения рабочего процесса в API Github.

5. Спасибо всем! Но это не тот способ, которым мы хотели его решить. В любом случае, спасибо

Ответ №1:

Вы можете указать этот needs параметр и обратиться к названию задания. См.: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds

Примером может быть что-то вроде:

 jobs:
  build:
    ...
  deploy:
    needs: build
    ...
 

Комментарии:

1. Я использую needs , но это заставило бы второе задание ждать завершения первого задания, и я хочу запускать оба параллельно, а если одно не удастся, остановить другое.

2. Смотрите мой комментарий выше о том, как делать это параллельно. Я не рекомендую этого делать. Вы можете отправить непроверенный код, который затем вам нужно будет удалить. Стандартный DevOps, на мой взгляд, посоветует вам выполнить модуль и сквозные тесты перед отправкой.

3. Спасибо за совет, но у нас есть другие задания после сборки и тестов, которые предотвратят фактическое развертывание плохого кода. Мы хотим сэкономить время, запустив их параллельно. Все равно спасибо!

4. Я понимаю. Единственный способ, который я могу придумать прямо сейчас, чтобы иметь параллельные задания, — это иметь отдельный рабочий процесс действий на GitHub и создавать их так, чтобы они зависели друг от друга. Я не могу дать полный ответ прямо сейчас, но, возможно, позже. Пожалуйста, предоставьте свои рабочие процессы действий на GitHub.