#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.