Сканирование многоотраслевого конвейера Jenkins без выполнения

Можно ли сканировать многоотраслевой конвейер для обнаружения ветвей с Jenkinsfile, но без выполнения конвейера?

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


person Daniel Majano    schedule 16.05.2017    source источник


Ответы (6)


В разделе Источники ветвей вы можете добавить свойство с именем Подавлять автоматический запуск SCM.

Это не позволяет Дженкинсу создавать все с помощью Jenkinsfile.

person 42tg    schedule 19.05.2017
comment
охххх! Спасибо большое!. это то что мне нужно :) - person Daniel Majano; 22.05.2017
comment
Похоже, что это не только предотвращает выполнение заданий в результате сканирования (что вам и нужно), но также предотвращает их выполнение как часть фиксации в исходной ветке (что вам, вероятно, не нужно). Другими словами, это изменение блокирует запуск сборки любыми хуками Git. - person Andrew Cruickshank; 04.10.2017
comment
@AndrewCruickshank любым способом сделать это, но не отключать веб-хуки ?? - person emmdee; 15.06.2018
comment
Он не блокирует ловушку git, если вы используете токен curl + auth для запуска сборки. - person Gudgip; 04.07.2018
comment
Я не могу найти это, это устарело? Какая альтернатива? - person Fadel Trivandi Dipantara; 14.06.2019
comment
Просто для пояснения: обходной путь Gudgip отличается от веб-перехватчика - это означает, что Эндрю прав, как показано в документации для этого класса: * Подавляет сборки из-за {@link BranchIndexingCause} или {@link BranchEventCause}. * Назначение этого свойства - предотвратить запуск сборок в результате обнаружения ‹em› ‹/em› * изменений в базовом SCM. (github.com / jenkinsci / branch-api-plugin / blob / master / src / main /) - person mellow-yellow; 03.01.2020
comment
@FadelTrivandiDipantara У меня такая же проблема. Это устарело. Какое обходное решение? - person Chaitanya Bapat; 10.03.2020
comment
Хорошее объяснение устаревания: issues.jenkins-ci.org/browse/ - person Jonathan Bergeron; 08.05.2020

Кроме того, вы можете сделать это программно

import jenkins.branch.*
import jenkins.model.Jenkins


for (f in Jenkins.instance.getAllItems(jenkins.branch.MultiBranchProject.class)) {
  if (f.parent instanceof jenkins.branch.OrganizationFolder) {
    continue;
  }
  for (s in f.sources) {
    def prop = new jenkins.branch.NoTriggerBranchProperty();
    def propList = [prop] as jenkins.branch.BranchProperty[];
    def strategy = new jenkins.branch.DefaultBranchPropertyStrategy(propList);
    s.setStrategy(strategy);
  }

  f.computation.run()
}

Это Groovy-фрагмент, который вы можете выполнить в Jenkins, он будет сканировать, но не будет запускать новые «сборки» для всех обнаруженных веток.

person Stqs    schedule 10.10.2018
comment
это отличный фрагмент, который вы можете выполнить в Jenkins, он будет сканировать, но не будет запускать новые сборки для всех обнаруженных веток - person Stqs; 11.10.2018
comment
где мне это поставить? - person Fadel Trivandi Dipantara; 14.06.2019
comment
@FadelTrivandiDipantara в основном вы помещаете его в папку $ JENKINS_HOME / init.groovy.d, а затем, когда вы запускаете свой Jenkins, он выполняет все скрипты из этой папки. если у вас уже есть запущенный jenkins, вы можете перейти в Jenkins - ›Script Console и попытаться выполнить этот код там. - person Stqs; 21.08.2019
comment
также можно выполнить в Jenkins Admin ›Nodes› Master и открыть Script Console - person Daniel Andrei Mincă; 30.10.2019
comment
можно ли это добавить в папку Github, в которой упоминаются все файлы Jenkins? У меня там отличные скрипты. - person Chaitanya Bapat; 10.03.2020

Чтобы добавить к ответу @Stqs, вы также можете установить noTriggerBranchProperty с помощью плагина Job DSL, например:

multibranchPipelineJob('example') {
  ...
  branchSources {
    branchSource {
      ...
      strategy {
        defaultBranchPropertyStrategy {
          props {
            // Suppresses the normal SCM commit trigger coming from branch indexing
            noTriggerBranchProperty()
            ...
          }
        }
      }
    }
  }
  ...
}
person Paweł Prażak    schedule 01.10.2019
comment
noTriggerBranchProperty выполняет свою работу, но блокирует веб-перехватчики. Возможно ли наличие noTriggerBranchProperty вместе с триггерами веб-перехватчиков? - person Stqs; 24.06.2020

Если вы используете job-dsl, вы можете просто сделать это, и он просканирует все, не выполняя сборку при первом индексировании.

organizationFolder('Some folder name') {
  buildStrategies {
    skipInitialBuildOnFirstBranchIndexing()
  }
}
person scav    schedule 13.02.2020
comment
вам нужны организации или папки? как это работает? что я должен использовать вместо имени какой-то папки? - person Stqs; 07.05.2020
comment
Нет, вы, вероятно, можете найти buildStrategies в других местах, проверьте документацию на своем экземпляре, она должна содержать все доступные параметры. Некоторое имя папки является просто заполнителем, оно будет называть папку в Jenkins для организации ваших сборок. - person scav; 07.07.2020
comment
Я получил сообщение об ошибке. ERROR: (script, line 13) No such property: skipInitialBuildOnFirstBranchIndexing for class: javaposse.jobdsl.dsl.helpers.workflow.BuildStrategiesContext - person Adhika Setya Pramudita; 01.12.2020
comment
@scav Я получил эту ошибку, используя ваш ответ javaposse.jobdsl.dsl.helpers.workflow.BuildStrategiesContext.skipInitialBuildOnFirstBranchIndexing () - person c4f4t0r; 11.12.2020
comment
плагин basic-branch-build-strategies требуется - person Abdennour TOUMI; 28.02.2021

organizationFolder('my-folder') {

  buildStrategies {
     buildRegularBranches()
     buildChangeRequests {
       ignoreTargetOnlyChanges true
       ignoreUntrustedChanges false
     }
   }
}

Примечание: требуется плагин basic-branch-build-strategies

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА:

person Abdennour TOUMI    schedule 28.02.2021

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

when {
    not {
        expression {
            def causes = currentBuild.getBuildCauses()
            String causesClass = causes._class
            return causesClass.contains('BranchIndexingCause')
        }
    }
}
person Aarhun    schedule 11.05.2021