Труба Дженкинса: можно ли избежать многократной проверки?

Я переместил несколько старых заданий Jenkins на новые, используя конвейерную функцию, чтобы иметь возможность интегрировать конфигурацию Jenkins в репозитории git. Он работает нормально, но я спрашиваю себя, есть ли способ уменьшить количество проверок, которые происходят при построении.

Настройка

  • У меня есть многоженчатое задание Jenkins, связанное с моим репозиторием git
  • У меня есть файл Jenkins в моем репозитории git

    #!groovy
    node {
    
      stage 'Checkout'
      checkout scm
    
      // build project
      stage 'Build'
      ...
    }
    

Проблема

Когда я нажимаю на удаленный Branche BRANCH_1, срабатывает многозадачное задание jenkins, и я понимаю, что следующие шаги:

  • многочленное задание делает git fetch для индексации ветвей и запускает задание, соответствующее моей удаленной ветке: BRANCH_1_job
  • BRANCH_1_job делает git checkout для извлечения файла Jenkins из активированной ветки
  • выполняется Jenkinsfile и делает сам checkout scm. Если я этого не сделаю, я не смогу построить свой проект, потому что нет источника.

Итак, для построения моей ветки я заканчиваю одним git fetch и двумя git checkout.

Вопросы

  • Правильно ли я понимаю процесс? Или я что-то пропустил?
  • Есть ли способ уменьшить число git checkout? Когда я проверяю официальные примеры , все они делают checkm scm как первый шаг. Я лично подумал бы, что мне не нужно это делать, потому что работа jenkins уже должна была сделать чек, чтобы получить Jenkinsfile (поэтому мои источники должны быть здесь как-то).
  • Разве вы не думаете, что эти многочисленные проверки могут привести к плохой производительности, как только репозиторий git содержит большое количество ссылок?

Спасибо вам всем

Ответ 1

С обычным git Дженкинс должен сделать две проверки: один, чтобы получить Jenkinsfile, чтобы знать, что выполнить в задании, а затем другую проверку фактического содержимого репозитория для целей построения. Технически Дженкинсу нужно загрузить только один файл Jenkins из репо, но git не позволяет проверять один файл. Поэтому двойную проверку нельзя избежать с помощью обычного git с использованием многоплатформенного плагина.

Если вы размещаете git в Bitbucket или GitHub, то вы избегаете двойной проверки, используя их конкретные плагины Jenkins вместо плагина с несколькими каналами.

См. сайт плагина Jenkins для Bitbucket и GitHub соответственно.

Эти плагины используют соответствующий API-интерфейс поставщика git для загрузки одного файла Jenkins. Таким образом, вы технически все еще имеете двойную проверку, но первый из них - это простой вызов REST для загрузки одного файла, вместо того, чтобы выполнять полный собственный git checkout всего репозитория.