Трубопровод Jenkins: как проверить удаленную ветку без запуска оболочки - PullRequest
1 голос
/ 16 июня 2020

У меня есть метод библиотеки трубопроводов 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.

1 Ответ

0 голосов
/ 16 июня 2020

Насколько я могу судить, ответ - нет. Я не могу найти в самом Jenkins ничего, что могло бы обеспечить эту функциональность. Единственный способ, которым, как мне кажется, вы могли бы достичь нужной функциональности, - это написать собственную библиотеку Java или Groovy, которую вы могли бы включить в свой Jenkinsfile, которая либо общалась бы с git изначально через библиотеку, например J Git, или общайтесь с BitBucket изначально, как bitbucket-rest .

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