Рубрики
Uncategorized

Piproverkt — jenkinsfiles и kotlin

Когда мы ввели JenkinsFiles в нашу экосистему, у нас есть несколько очень хороших функций из коробки. P… Теги с Котлин, Дежол, Дженкинс.

Когда мы ввели JenkinsFiles в нашу экосистему, у нас есть несколько очень хороших функций из коробки. Трубопроводы теперь могут выполнять произвольный код, и сборки будут верситься вместе с источником, который они строили.

Наша первоначальная реализация JenkinsFiles имела свои проблемы. Jenkinsfile поделится кодом, позвонив нагрузка Шаг на одних и тех же сценариях неоднократно, у которых было несколько проблем.

  1. Загрузка этих сценариев взяла время процессора, чтобы интерпретировать их
  2. Загрузка этих сценариев требует сетевого времени для перемещения скрипта с узема рабочего в Master (где интерпретируется)
  3. Трубопроводы не могли восстановить после перезагрузки системы и воспроизведения не работали из-за использования нагрузка
  4. Эти скрипты, как правило, были неприятными для развития, появилась плохая интеграция IDE, и это было подмножество функциональности Groovy. Завершение кода и AutoCorrect не работало хорошо.

Это было не хорошо, но это было лучше, чем раньше.

Архитекторы подошли ко мне о улучшении опыта разработчика для этих трубопроводов. Они упомянули с использованием Kotlin для создания трубопроводов, так как разработчики Дженкинса заявили, что они не будет поддерживать Котлин для трубопроводов . Я сомневался в этом подходе, но и заинтригован.

Между тем, я хотел распределить общий код таким образом, чтобы ликвидировали разработчиков, которые должны беспокоиться об общих деталях, таких как уведомления SCM, статистика наложения, очистка рабочей области и оптимизация SCM. Я разочаровался, пытаясь общаться с этими вопросами, и Дженкинсфайл не дал мне хороших инструментов для этого, но если я генерирую Jenkinsfile, я мог бы построить такой код в двигатель генерации.

После нескольких дней мышления я все еще был сомнительным из подхода к генерированию JenkinsFiles. Однако я не мог противостоять искушению экспериментировать. Возможность развития в Котлин была тантализация — завершение кода, обнаруженность, и сильное время компиляции гарантирует меня. Поэтому я отправился, чтобы доказать, что я мог это сделать.

Я был одновременно высеван и боишься идеи, что я создал машину Rube Goldberg.

Сначала я экспериментировал с компиляцией скриптов Kotlin на лету с переводчиком Kotlin. Я написал простой кусочек кода Kotlin для вывода JenkinsFile в банке библиотеки. Я заканчиваю это, чтобы работать, загружая правильные банки в Дженкинс и интерпретировать .kts Сценарий на лету в Дженкинс, но я столкнулся с несколькими проблемами.

  1. Местное развитие не было поддерживается очень хорошо
  2. Использование требуется независимое понимание того, как Дженкинс управляет библиотеками
  3. Котлинский сценарий был разбит в текущей версии Kotlin

Я создал трубопровод из Котлина, но я был с Марка, и я не был убежден, что этот подход будет работать. Может ли это на самом деле сделать развитие jenkinsfile проще, или я преследовал свой хвост? Естественно, я не заботился о ответе на этот вопрос, потому что мне было весело.

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

Теперь, когда у меня была хорошая среда разработки, и могла динамически генерировать jenkinsfile из исходного кода Kotlin Я начал работать над моей библиотекой. И это было действительно весело. Инструментарий вышла из моего пути, как ожидается, для развития Котлина И я мог сосредоточиться на моем коде. Я имел дело с Котлином, и IDE смог сказать мне немедленно, если мой код был действителен. У меня было несколько ударов долгое время, и иногда я смог сгенерировать плохие дженкинсфлы, но в целом мои трубопроводы начали укрепить. Общий код упал на место, когда я построил свои трубопроводы, а узоры стали очевидными. Изолирующая общий код стал тривиальным, поскольку я имел дело с типами Котлин, и IDE может рефакторировать для меня и сказать мне, когда я сделал ошибку.

После первой недели я чувствовал себя уверенно, что я был на правильном пути. Мой код Котлин стал более лаконичным каждый день, когда я перевел функциональность в общей библиотеке, и я смог правильно поделиться кодом как по всему проектам в общей библиотеке, так и в трубопроводах, имеющих много повторяющихся шагов (например, наш монолит).

Теперь я могу выразить мою пособию по эксплуатации CORDLE всего за несколько строк Kotlin, не беспокоясь о специально настроите все функции эзотерических женкинсов:

val pipelineDsl = PipelineDsl()

val myPipeline = pipelineDsl.pipeline {    
    agent {
        label("linux")
    }
    stages {
        stage("Build") {
            steps {
                echo("Hello, World!")
            }
        }
    }
}

generatePipeline(myPipeline, "path/to/Jenkinsfile.generated")

Я могу выразить свой трубопровод так же, как мог в Groovy, но с улучшениями, предоставляемыми Kotlin, и настроили по умолчанию, предоставляемыми на Pipelinedsl объект.

Конечно, все эти настройки по умолчанию могут быть переопределены, так как весь объект трубопровода — это не что иное, как простые классы данных. Это также делает мои трубопроводы простыми в единицу теста, поскольку утверждения становятся простыми утверждениями о равенстве объекта Kotlin. Лучшая часть — я могу использовать любой инструмент, который интегрируется с помощью RIDLE для разработки моих трубопроводов. Заинтересованы в пробуждении трубопроводов Kotlin? Проверьте репо на Документация и примеры Отказ

Оригинал: «https://dev.to/dgoetsch/pipelinekt-jenkinsfiles-and-kotlin-4m47»