У меня есть метод библиотеки трубопроводов Jenkins под названием branchExists.groovy
, который проверяет, существует ли ветка в удаленном (не локальном!) Репозитории.
Это код:
#!/usr/bin/env groovy
def call(String repoUrl, String branchName) {
// Use git ls-remote to verify branch existence
def sout = sh(returnStdout: true, script: "#!/bin/bash\ngit ls-remote --heads ${repoUrl} refs/heads/${branchName}").trim()
return sout.size() != 0
}
Итак, как видите, оболочка Bash запускается для выполнения команды git ls-remote
. Чтобы запустить оболочку, метод должен выполняться в контексте блока node{}
в конвейере, даже если я больше ничего не делаю на этом узле.
Есть ли на языке Jenkins Pipeline, чтобы проверять удаленные ветки без необходимости запускать команду оболочки и тем самым не заставляя занимать node{}
?
EDIT: может быть, хорошо знать, что сервер Git такое Atlassian Bitbucket Server, поэтому, может быть, я мог бы использовать API Bitbucket? Или для этого по-прежнему требуется узел?
Почему я не хочу занимать узел?
Причина, по которой я беспокоюсь о том, чтобы не занимать узел, заключается в легковесе / легкие и тяжелые исполнители. См. https://support.cloudbees.com/hc/en-us/articles/360012808951-Pipeline-Difference-between-flyweight-and-heavyweight-Executors
Легковесные исполнители - это просто потоки , работающие внутри JVM мастера Jenkins. Количество исполнителей-легковесов не ограничено. и они будут создаваться автоматически при необходимости, в отличие от исполнителей тяжелого веса, которые ограничены в зависимости от конфигурации их узла. т.е. Java поток). Шаги конвейера, такие как sh и bat, будут выполняться на тяжеловесном исполнителе, если они заключены в блок узла , поэтому в хорошо спроектированном конвейере, где сложные логические операции c происходят только на этих шагах, вспомогательный исполнитель должен бездействовать, пока шаги выполняются на удаленных агентах на протяжении большей части сборки.
Легковесные исполнители не будут блокировать очередь сборки и не будут заблокированы очередью сборки. Если все тяжеловесные исполнители насыщены, мой конвейер не будет продолжаться, пока исполнитель не станет доступен для запуска git ls-remote
.