Відповіді:
Ви не можете виконати сценарій Pipeline локально, оскільки його ціль - це сценарій Дженкінса. (Що є однією з причин, чому найкраще зберігати свій Jenkinsfile
короткий та обмежений код, який насправді стосується функцій Дженкінса; ваша фактична логіка побудови повинна оброблятися із зовнішніми процесами чи інструментами побудови, які ви викликаєте за допомогою рядка sh
або bat
кроку.)
Якщо ви хочете , щоб перевірити зміни , щоб Jenkinsfile
жити , але не роблячи його, використовувати в Replay функцію додаються в 1.14
JENKINS-33925 відстежує потрібне для автоматизованого тестування.
У мене є рішення, яке добре працює для мене. Він складається з місцевих джинкінів, що працюють у докері, та гачкового мережевого гачка, який запускає трубопровід у місцевих дженкінах на кожній комісії. Вам більше не потрібно натискати на своє сховище github або bitbucket, щоб перевірити конвеєр.
Це було протестовано лише в середовищі Linux.
Зробити цю роботу досить просто, хоча ця інструкція довга. Більшість кроків є.
Створіть на своєму виборі файл під назвою Dockerfile. Я розміщую його, /opt/docker/jenkins/Dockerfile
заповнивши це:
FROM jenkins/jenkins:lts
USER root
RUN apt-get -y update && apt-get -y upgrade
# Your needed installations goes here
USER jenkins
Побудуйте зображення local_jenkins
Це вам потрібно буде зробити лише один раз або після того, як ви щось додали в Dockerfile.
$ docker build -t local_jenkins /opt/docker/jenkins/
Запустіть і перезапустіть local_jenkins
Час від часу ви хочете легко запускати та перезавантажувати дженкіни. Наприклад, після перезавантаження машини. Для цього я зробив псевдонім, який я вклав .bash_aliases
у свою домашню папку.
$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases
$ source .bash_aliases # To make it work
Переконайтесь, що /opt/docker/jenkins/jenkins_home
папка існує та що у вас є права на читання та запис користувачів на неї.
Щоб запустити або перезапустити джинсини, просто введіть:
$ localjenkinsrestart
Все, що ви робите у своїх місцевих джинкінах, буде зберігатися у папці / opt / docker / jenkins / jenkins_home та зберігатися між перезавантаженнями.
Створіть ключ доступу до ssh у своїх докерних дженкінах
Це дуже важлива частина для цього. Спочатку запускаємо контейнер docker і створюємо до нього оболонку bash:
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
Тепер ви ввійшли в контейнер докера, це ви можете побачити на зразок jenkins@e7b23bad10aa:/$
свого терміналу. Хеш після @ точно точно відрізнятиметься.
Створіть ключ
jenkins@e7b23bad10aa:/$ ssh-keygen
Натисніть клавішу Enter у всіх питаннях, поки не отримаєте відповідне запит
Скопіюйте ключ на свій комп’ютер. Зсередини докерного контейнера ваш комп'ютер становить 172.17.0.1, якщо вам цікаво.
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
user = ваше ім'я користувача та 172.17.0.1 - ip-адреса вашого комп'ютера зсередини контейнера докера.
У цей момент вам доведеться ввести пароль.
Тепер давайте спробуємо завершити цикл, відправивши його на комп'ютер із контейнера докера.
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
Цього разу вам не потрібно вводити пароль. Якщо у вас щось пішло не так, і вам доведеться спробувати ще раз.
Тепер ви знаходитесь в домашній папці комп’ютерів. Спробуйте ls
і подивіться.
Не зупиняйтесь тут, оскільки у нас є ланцюжок ssh снарядів, з яких нам потрібно вийти.
$ exit
jenkins@e7b23bad10aa:/$ exit
Правильно! Тепер ми повернулися і готові продовжувати.
Встановіть свій Дженкінс
Ви знайдете свого місцевого Дженкінса у своєму браузері за адресою http: // localhost: 8787 .
Перший раз, коли ви вкажете веб-переглядач на свій місцевий Дженкінс, він буде змащений майстром установки. Значення за замовчуванням добре, але обов’язково встановіть плагін трубопроводу під час налаштування.
Налаштуйте свої джинсини
Це дуже важливо , що ви активуєте безпеку на основі матриці на HTTP: // локальний: 8787 / configureSecurity і дати собі повне право , додавши себе в матрицю і відзначте всі ящики. (У крайньому правому куті є значок галочок)
Jenkins’ own user database
як область безпекиMatrix-based security
у розділі АвторизаціяUser/group to add:
і натисніть [ Add ]
кнопкуPrevent Cross Site Request Forgery exploits
не встановлений. (Оскільки цей Дженкінс доступний лише на вашому комп’ютері, це не така вже й велика справа)[ Save ]
та вийдіть із Дженкінса та ще раз, щоб переконатися, що він працює.
Якщо це не так, вам не доведеться починати спочатку і спорожняти /opt/docker/jenkins/jenkins_home
папку перед перезавантаженнямДодайте користувача git
Нам потрібно дозволити нашому git-гачку ввійти до місцевого Дженкінса з мінімальними правами. Достатньо лише побачити та створити робочі місця. Тому ми створюємо користувача, якого називають 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 Дженкінс додає новий проект трубопроводу. Для позначення я назвав його крючкопроводом.
New Item
в меню Дженкінсаhookpipeline
[ OK ]
Poll SCM
у розділі "Тригери". Залиште графік порожнім.Pipeline script from SCM
Repository URL
поле введітьuser@172.17.0.1:projects/project/.git
Script Path
поле введітьJenkinsfile
Перейдіть до /home/user/projects/project/.git/hooks
папки та створіть файл, який називається post-commit
:
#!/bin/sh
BRANCHNAME=$(git rev-parse --abbrev-ref HEAD)
MASTERBRANCH='master'
curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build
echo "Build triggered successfully on branch: $BRANCHNAME"
Зробіть цей файл виконуваним:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
Перевірте гачок після фіксації:
$ /home/user/projects/project/.git/hooks/post-commit
Перевірте в Дженкінсі, чи був запущений проект вантажної лінії.
Нарешті внесіть у свій проект деякі довільні зміни, додайте зміни та виконайте зобов'язання. Це призведе до запуску газопроводу у вашому місцевому Дженкінсі.
Щасливі дні!
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, є повноцінною мовою програмування для процесу складання, де ви змішуєте декларативну частину з власним кодом. Як хороші розробники, ми також маємо провести кілька одиничних тестів для цього виду коду.
Є три кроки, які слід дотримуватися, розробляючи трубопроводи Дженкінса. Крок 1. повинен охоплювати 80% випадків використання.
Приклади
PipelineUnit репо GitHub містить деякі приклади Спок про те , як використовувати тестування бази Дженкінс трубопроводу Unit
На момент написання (кінець липня 2017 року) з Blue Ocean плагін ви можете перевірити синтаксис декларативного трубопроводу безпосередньо в візуальному редакторі трубопроводу . Редактор працює з інтерфейсом Blue Ocean, коли ви натискаєте "налаштувати" лише для проектів github (це відома проблема, і вони працюють над тим, щоб він також працював на git тощо).
Але, як пояснено в цьому питанні, ви можете відкрити редактор, переглядаючи:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Потім клацніть посередині сторінки і натисніть Ctrl+S
, це відкриє текстову область, куди ви можете вставити декларативний сценарій конвеєра. Якщо натиснути Оновити , якщо є синтаксична помилка, редактор повідомить вам, де знаходиться синтаксична помилка. Як на цьому скріншоті:
Якщо немає синтаксичної помилки, текстова область закриється, і сторінка візуалізує ваш конвеєр. Не хвилюйтесь, що це нічого не врятує (якщо це проект github, він здійснить зміну Jenkinsfile).
Я новачок у Дженкінсі, і це дуже корисно, без цього мені доводилося робити багато разів Дженкінсфіл, поки це не спрацює (дуже дратує!). Сподіваюсь, це допомагає. Ура.
Трохи запізнився на вечірку, але тому я написав jenny
, невелике повторне виконання деяких основних кроків Дженкінсфіл. ( https://github.com/bmustiata/jenny )
Наскільки я знаю цей плагін трубопроводу є "двигуном" нової механіки Jenkinsfile, тому я цілком позитивний, що ви можете використовувати це для локальної перевірки сценаріїв.
Я не впевнений, чи потрібні якісь додаткові кроки, коли ви копіюєте його в файл Jenkinsfile, однак синтаксис тощо повинен бути точно таким же.
Редагувати: Знайдено посилання на "двигун", перевірте опис цієї функції, останній абзац, перший запис.
У моїх налаштуваннях розробки - відсутній належний редактор Groovy - велика кількість питань Jenkinsfile походить від простих синтаксичних помилок . Щоб вирішити цю проблему, ви можете перевірити файл Jenkins для вашого екземпляра 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
Окрім функції Replay, про яку вже згадували інші (давно про її корисність!), Я виявив і корисне наступне:
Вставте ключ SSH у свій профіль Дженкінса, а потім використовуйте декларативний вкладиш наступним чином:
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
Це зробить статичний аналіз на вашому Jenkinsfile. У вибраному редакторі визначте комбінацію клавіш, яка автоматично виконує цю команду. У коді Visual Studio, який я використовую, перейдіть до Завдання> Налаштувати завдання, а потім скористайтеся наступною JSON для створення команди Validate Jenkinsfile :
{
"version": "2.0.0",
"tasks": [
{
"label": "Validate Jenkinsfile",
"type": "shell",
"command": "ssh jenkins.hostname declarative-linter < ${file}"
}
]
}
Я використовую функцію повторного відтворення, щоб зробити деяке оновлення та швидко запустити.
З деякими обмеженнями і для сценаріїв трубопроводів я використовую таке рішення:
node('master') {
stage('Run!') {
def script = load('...you job file...')
}
}
def execute() {
... main job code here ...
}
execute()