При написании конвейеров jenkins кажется очень неудобным фиксировать каждое новое изменение, чтобы посмотреть, работает ли оно.
Есть ли способ выполнить их локально без фиксации кода?
При написании конвейеров jenkins кажется очень неудобным фиксировать каждое новое изменение, чтобы посмотреть, работает ли оно.
Есть ли способ выполнить их локально без фиксации кода?
Вы не можете выполнить сценарий конвейера локально, так как его цель - сценарий Jenkins. (Это одна из причин, по которой лучше придерживаться Jenkinsfile
краткого и ограниченного кода, который фактически имеет дело с функциями Jenkins; ваша фактическая логика сборки должна обрабатываться внешними процессами или инструментами сборки, которые вы вызываете через одну строку sh
или bat
шаг.)
Если вы хотите , чтобы проверить изменения , чтобы Jenkinsfile
жить , но не совершая его, использовать в Replay функцию добавляемые в 1.14
JENKINS-33925 отслеживает желаемое для автоматизированного тестового фреймворка.
У меня есть решение, которое хорошо работает для меня. Он состоит из локального jenkins, работающего в докере, и веб-хука git для запуска конвейера в локальном jenkins при каждом коммите. Вам больше не нужно нажимать на свой github или репозиторий bitbucket, чтобы протестировать конвейер.
Это было проверено только в среде Linux.
Сделать это довольно просто, хотя эта инструкция немного длинна. Большинство шагов там.
Это то, что вам нужно
Вот как ты это делаешь
Дженкинс Докер
Создайте файл с именем Dockerfile на месте вашего выбора. Я помещаю это в
/opt/docker/jenkins/Dockerfile
заполнить это этим:Создайте образ local_jenkins
Это вам нужно будет сделать только один раз или после добавления чего-либо в Dockerfile.
Запустите и перезапустите local_jenkins
Время от времени вы хотите легко запустить и перезапустить jenkins. Например, после перезагрузки вашей машины. Для этого я сделал псевдоним, который я положил
.bash_aliases
в мою домашнюю папку.Убедитесь, что
/opt/docker/jenkins/jenkins_home
папка существует и у вас есть права на чтение и запись для нее.Чтобы запустить или перезапустить свой Jenkins, просто наберите:
Все, что вы делаете в своем локальном jenkins, будет храниться в папке / opt / docker / jenkins / jenkins_home и сохраняться между перезапусками.
Создайте ssh ключ доступа в вашем докере
Это очень важная часть, чтобы это работало. Сначала мы запускаем docker-контейнер и создаем для него оболочку bash:
Теперь вы вошли в Docker-контейнер, это вы можете увидеть чем-то вроде
jenkins@e7b23bad10aa:/$
вашего терминала. Хеш после @ наверняка будет отличаться.Создать ключ
Нажмите ввод по всем вопросам, пока не получите ответ
Скопируйте ключ на свой компьютер. Если вы хотите знать, что внутри контейнера Docker ваш компьютер 172.17.0.1.
user = ваше имя пользователя, а 172.17.0.1 - это IP-адрес вашего компьютера из контейнера Docker.
Вы должны будете ввести свой пароль на этом этапе.
Теперь давайте попробуем завершить цикл, выполнив команду ssh на вашем компьютере из контейнера Docker.
На этот раз вам не нужно вводить пароль. Если вы это сделаете, что-то пошло не так, и вы должны попробовать еще раз.
Теперь вы будете в домашней папке вашего компьютера. Попробуйте
ls
и посмотрите.Не останавливайтесь на достигнутом, так как у нас есть цепочка ssh-оболочек, из которых мы должны выйти.
Правильно! Теперь мы вернулись и готовы продолжить.
Установите свой Дженкинс
Вы найдете свой местный Jenkins в вашем браузере по адресу http: // localhost: 8787 .
Когда вы в первый раз указываете свой браузер на свой локальный Jenkins, вы будете отмечены мастером установки. По умолчанию все в порядке, не забудьте установить плагин конвейера во время установки.
Настройте свои Дженкинс
Это очень важно , что вы активируете безопасность на основе матрицы на HTTP: // локальный: 8787 / configureSecurity и дать себе все права , добавив себя в матрицу и отметьте все ящики. (В крайнем правом углу есть значок галочки)
Jenkins’ own user database
качестве области безопасностиMatrix-based security
в разделе АвторизацияUser/group to add:
и нажмите на[ Add ]
кнопкуPrevent Cross Site Request Forgery exploits
снят. (Так как этот Дженкинс доступен только с вашего компьютера, это не такая уж большая проблема)[ Save ]
и выйдите из Jenkins и войдите снова, чтобы убедиться, что это работает. Если это не так, вы должны начать сначала и очистить/opt/docker/jenkins/jenkins_home
папку перед перезапускомДобавьте пользователя git
Нам нужно разрешить нашему git hook подключиться к нашему локальному Jenkins с минимальными правами. Достаточно просто посмотреть и построить рабочие места. Поэтому мы создаем пользователя
git
с паролемlogin
.Перейдите в браузере по адресу http: // localhost: 8787 / securityRealm / addUser и добавьте его
git
как имя пользователя иlogin
пароль. Нажмите на[ Create User ]
.Добавьте права пользователю git
Перейдите на страницу http: // localhost: 8787 / configureSecurity в вашем браузере. Добавьте пользователя git в матрицу:
git
в полеUser/group to add:
и нажмите на[ Add ]
Теперь пришло время установить флажки для минимальных прав пользователя git. Только это необходимо:
Убедитесь, что
Prevent Cross Site Request Forgery exploits
флажок снят, и нажмите[ Save ]
Создать проект конвейера
Мы предполагаем, что у нас есть имя пользователя,
user
и наш проект с поддержкой git,Jenkinsfile
в котором он называется,project
находится по адресу/home/user/projects/project
В ваш http: // localhost: 8787 Jenkins добавьте новый конвейерный проект. Я назвал это крючком для справки.
New Item
в меню Дженкинсhookpipeline
[ OK ]
Poll SCM
в разделе «Построение триггеров». Оставьте расписание пустым.Pipeline script from SCM
Repository URL
поле введитеuser@172.17.0.1:projects/project/.git
Script Path
поле введитеJenkinsfile
Создайте git hook
Перейдите в
/home/user/projects/project/.git/hooks
папку и создайте файл с именем,post-commit
который содержит это:Сделайте этот файл исполняемым:
Протестируйте хук после фиксации:
Проверьте в Дженкинсе, был ли запущен ваш проект ловушки.
Наконец, внесите некоторые произвольные изменения в ваш проект, добавьте изменения и сделайте коммит. Теперь это вызовет конвейер в вашем местном Jenkins.
Счастливые дни!
источник
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
с ,docker build -t local_jenkins /opt/docker/jenkins
потому что Docker жаловался «не в состоянии подготовить контекст: контекст должен быть каталог».$ docker inspect jenkins | grep Gateway
ssh user@docker.for.mac.localhost
вместо использования IP-адреса. Также убедитесь, что вы включили функцию удаленного входа в Системные настройки macOs -> Меню общих папокTL; DR
Длинное
тестирование Jenkins Pipeline становится все более и более болезненным. В отличие от классического подхода к декларативному конфигурированию заданий, в котором пользователь был ограничен тем, что пользовательский интерфейс предоставил, новый Jenkins Pipeline является полноценным языком программирования для процесса сборки, в котором вы смешиваете декларативную часть со своим собственным кодом. Как хорошие разработчики, мы хотим провести некоторые модульные тесты и для этого вида кода.
Есть три шага, которые вы должны выполнить при разработке Jenkins Pipelines. Шаг 1. должен охватывать 80% случаев использования.
Примеры
PipelineUnit репо GitHub содержит некоторые примеры Спок о том , как использовать тестирование базы Дженкинс трубопровода Unit
источник
В Jenkins есть функция «Воспроизведение», которая позволяет быстро воспроизвести задание без обновления источников:
источник
На момент написания (конец июля 2017 г.) с помощью плагина Blue Ocean вы можете проверить синтаксис декларативного конвейера непосредственно в визуальном редакторе конвейера . Редактор работает из пользовательского интерфейса Blue Ocean, когда вы нажимаете «настроить» только для проектов github (это известная проблема, и они работают, чтобы она работала также на git и т. Д.).
Но, как объясняется в этом вопросе, вы можете открыть редактор, перейдя по ссылке:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Затем нажмите в середине страницы и нажмите
Ctrl+S
, это откроет текстовую область, где вы можете вставить конвейерный декларативный скрипт. Если вы нажмете « Обновить» , если возникнет синтаксическая ошибка, редактор сообщит вам, где находится синтаксическая ошибка. Как на этом скриншоте:Если нет синтаксической ошибки, текстовое поле закроется, и страница отобразит ваш конвейер. Не волнуйтесь, это ничего не спасет (если это github-проект, он внесет изменение Jenkinsfile).
Я новичок в Дженкинс, и это очень полезно, без этого мне приходилось фиксировать Jenkinsfile много раз, пока он не работал (очень раздражает!). Надеюсь это поможет. Приветствия.
источник
Немного опоздал на вечеринку, но именно поэтому я написал
jenny
небольшую повторную реализацию некоторых основных шагов Jenkinsfile. ( https://github.com/bmustiata/jenny )источник
Насколько я знаю, этот Pipeline Plugin является «движком» новой механики Jenkinsfile, поэтому я вполне уверен, что вы можете использовать его для локального тестирования ваших сценариев.
Я не уверен, есть ли какие-либо дополнительные шаги, необходимые при копировании его в файл Jenkinsfile, однако синтаксис и т. Д. Должны быть точно такими же.
Редактировать: Нашли ссылку на «движок», проверьте описание этой функции, последний абзац, первую запись.
источник
В моей настройке разработки - без правильного редактора Groovy - большая часть проблем Jenkinsfile возникает из-за простых синтаксических ошибок . Чтобы решить эту проблему, вы можете проверить Jenkinsfile по вашему экземпляру Jenkins (работает на
$JENKINS_HTTP_URL
):curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
Приведенная выше команда является слегка измененной версией из https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line
источник
Помимо функции воспроизведения, о которой уже упоминали другие (то же самое относится и к ее полезности!), Я также обнаружил, что полезно следующее:
источник
Поместите свой SSH-ключ в свой профиль Jenkins, затем используйте декларативный линтер следующим образом:
Это сделает статический анализ вашего Jenkinsfile. В редакторе по вашему выбору определите сочетание клавиш, которое автоматически запускает эту команду. В Visual Studio Code, который я использую, перейдите в Задачи> Настроить задачи, затем используйте следующий JSON для создания команды Validate Jenkinsfile :
источник
Я использую будущее воспроизведения, чтобы сделать некоторые обновления и запустить быстро.
источник
С некоторыми ограничениями и для скриптовых конвейеров я использую это решение:
источник