Как остановить сборку jenkins на всех узлах после первой ошибки - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть заурядная установка Jenkins с использованием multifranch / pipeline / Jenkinsfile.

Проект, который я создаю, является проектом C / C ++, который должен быть скомпилирован во многих операционных системах. и архитектуры. Для этого у меня есть группа узлов (то есть агентов или подчиненных), зарегистрированных в jenkins, каждый из которых выполняет сборку указанного проекта для конкретной комбинации операционной системы и архитектуры.

Многие из этих сборок выполняются параллельно, что является здравым смыслом. Моя проблема теперь такова: я хотел бы остановить все незавершенные суб-сборки на всех узлах, когда ошибка происходит где-либо в этой общей многоплатформенной сборке. Например, предположим, что я создаю код для 3 вещей:

  1. macos
  2. Linux aarch64
  3. windows 10

Если MacOS не работает, я хотел бы автоматически отменить linux и windows, даже если в процессе , потому что я точно знаю, что полная сборка не удастся: я не буду быть в состоянии сделать релиз из тех, у кого есть некоторые недостающие части.

В настоящее время, если Macos терпит неудачу, linux и windows с радостью продолжают сборку, тратя слоты на другие рабочие места в очереди, электричество и время. .

Любые подсказки приветствуются!

Обновление 1: Решение для бедного человека состоит в том, чтобы сериализовать вспомогательные сборки в долгой поэтапной манере , Но это займет очень много времени, чтобы завершить сборку. Так что это не вариант для меня

Обновление 2: более ощутимое объяснение:

stages {
    stage('Checkout') {
        ...
    }
    stage('Build') {
        parallel {
            stage ('linux') {
                ...
            }
            stage ('windows') {
                ...
            }
            stage ('mac') {
                ...
            }
        }
    }
    stage('Archive and release') {
        ...
    }
}

Если любой из ма c, windows или linux сборка не удалась, я хотел бы, чтобы остальные тоже были немедленно прерваны, а не ждать завершения

1 Ответ

0 голосов
/ 13 февраля 2020

Нашел ответ. Хитрость заключается в том, чтобы добавить это в конфигурацию конвейера.

  pipeline {
    options {
      parallelsAlwaysFailFast()
    }
    ...
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...