1 2 3 4 5 6 |
1.Создание отдельного пользователя для автоматического запуска сборок 2.Предоставление пользователю необходимых привилегий 3.Определение значений параметров аутентификации пользователя 4.Настройка сборки для ее удаленного запуска 5.Настройка URL для удаленного запуска сборок 6.Настройка в SVN-репозитарии хука post-commit для запуска сборки в Jenkins |
7.Сборка проекта по коммиту в GitHub
8.Сборка проекта по коммиту в BitBucket
1.Создание отдельного пользователя для автоматического запуска сборок
1 |
Jenkins->Настроить Jenkins->Manage Users->Создать пользователя |
1 2 3 4 5 |
Login: myusername Password: randomhere Repeat Password Ф.И.О: First_Name Last_Name Email: myusername@mydomain.com |
2.Предоставление пользователю необходимых привиллегий
1 |
Jenkins->Настроить Jenkins->Configure Global Security->Добавить пользователя/группу |
Вводим имя нашого пользователя myusername и устанавливаем необходимые права
1 2 |
Overall(Полные)-Read Build(Задача)-Build,Discover,Read,Workspace |
3.Определение значений параметров аутентификации пользователя
Заходим в Jenkins под созданным пользователем myusername и в профиле пользователя узнаем User_ID который соотвествует имени пользователя и API Token пользователя
Например
1 2 |
User_ID=myusername API_Token=551e08fbe02f9f455dd914c84fc525b7 |
User_ID (читай логин) и API Token(альтернатива паролю) будут использоваться при аутентификации в Jenkins для удаленного запуска сборок
Аутентификация на удаленном Jenkins-сервере будет происходить по следующему URL
(например, наш Jenkins-сервер доступне по https-протоколу)
1 |
https://<User_ID>:<API_Token>@<Jenkins_Domain>:<Jenkins_Port>/ |
Например
1 |
https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/ |
UserID – это идентификатор пользователя(login-пользователя)
1 2 3 |
API Token – уникальный токен для пользователя jenkins.mydomain.com – имя Jenkins-сервера Порт дефолтный 443,поэтому не указываем(Nginx проксирует запросы на Jenkins) |
4.Настройка сборки для ее удаленного запуска
В параметрах сборки
1 |
Триггеры сборки-> Trigger builds remotely (e.g., from scripts) |
Вставляем в поле Authentication Token рандомно сгенерированный токен
(например, вывод программы генерирования паролей pwgen с количеством символов,например,50 т.е. вывод команды pwgen 50 1)
1 |
Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg |
Токен сборки TOKEN_NAME не следует путать с токеном пользователя API_TOKEN
5.Настройка URL для удаленного запуска сборок
URL для запуска удаленного запуска НЕПАРАМЕТРИЗИРОВАННОЙ сборки
(имя сборки/проекта myjobname)
1 |
JENKINS_URL/job/<имя_проекта>/build?token=TOKEN_NAME |
т.е
1 |
jenkins.mydomain.com/job/myjobname/build?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg |
Итого полный URL для удаленного запуска НЕПАРАМЕТРИЗИРОВАННОЙ сборки с учетом аутентификации
1 |
https://<UserID>:<API_Token>@<Jenkins_Domain>:<Jenkins_Port>/job/<имя_проекта>/build?token=TOKEN_NAME |
Удаленный запуск НЕПАРАМЕТРИЗИРОВАННОЙ сборки вызываем вручную/со скрипта через curl
1 |
# curl https://<UserID>:<API_Token>@<Jenkins_Domain>:<Jenkins_Port>/job/<имя_проекта>/build?token=TOKEN_NAME |
1 |
# curl https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/build?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg |
URL для запуска удаленного запуска ПАРАМЕТРИЗИРОВАННОЙ сборки
1 2 3 4 5 6 7 |
Для этого в настройках сборки используем check-box Это параметризированная сборка Добавить параметр->String parameter Имя: REVISION_NUMBER Значение по умолчанию: Описание: Please, enter the desired revision number. For example, 1234 |
Это часть сборки, которая будет обновлять SVN-репозитарий для нужной/кастомной ревизии
Теперь к парметру REVISION_NUMBER можно обращаться в SHELL-скриптах как к переменной окружения через ${REVISION_NUMBER}
Т.е в SHELL-скрипте можно выполянть команду
1 |
# svn update -r ${REVISION_NUMBER} |
Регистр параметра в настройках сборки и в URL, по которому вызывается сборка, должны совпадать
Синтаксис параметризированной сборки
1 |
https://<UserID>:<API_Token>@<Jenkins_Domain>:<Jenkins_Port>/job/<имя_проекта>/buildWithParameters?token=TOKEN_NAME&REVISION_NUMBER=myparamvalue |
1 |
https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg&REVISION_NUMBER=16 |
Удаленный запуск ПАРАМЕТРИЗИРОВАННОЙ сборки вызываем вручную/со скрипта через curl
Важно!!!
При использовании вызова в Shell-скрипте параметры должны быть экранированы символом обратного слеша \ либо весь URL должен быть обрамлены кавычками
Т.е либо
1 |
# curl -X POST https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg\&REVISION_NUMBER=16 |
либо
1 |
# curl -X POST 'https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg&REVISION_NUMBER=16' |
Если,например, токен сборки(TOKEN_NAME) не используется, то URL имеет вид
1 |
https://<UserID>:<API_Token>@<Jenkins_Domain>:<Jenkins_Port>/job/<имя_проекта>/buildWithParameters?REVISION_NUMBER=myparam_value |
(экранируется символ ? либо весь URL обрамляется кавычками)
1 |
# curl -X POST https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters\?REVISION_NUMBER=16 |
либо
1 |
# curl -X POST 'https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters?REVISION_NUMBER=16' |
Для корректного удаленного запуска ПАРАМЕТРИЗИРОВАННОЙ сборки,
возможно, потребуется отключить Cross Site Request Forgery exploits
1 2 |
Jenkins->Настроить Jenkins->Configure Global Security->Снять галку Cross Site Request Forgery exploits |
или настроить аутентификацию
https://wiki.jenkins.io/display/JENKINS/Authenticating+scripted+clients
6.Настройка в SVN-репозитарии хука post-commit для запуска сборки в Jenkins
Копируем исходный post-commit хук и настраиваем его на вызов сборки
1 |
# cp /<path_to_repo>/<reponame>/hooks/post-commit.tmpl /<path_to_repo>/<reponame>/hooks/post-commit |
1 |
# nano /<path_repo>/<reponame>/hooks/post-commit.tmpl |
1 2 3 4 5 6 7 |
#!/bin/sh # Для непараметризированной сборки curl https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/build?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg # Для параметризированной сборки curl -X POST 'https://myusername:551e08fbe02f9f455dd914c84fc525b7@jenkins.mydomain.com/job/myjobname/buildWithParameters?token=Eip3eeruaceecham9bauh7nei5veoyieleemielazai6ye8eeg&REVISION_NUMBER=16' |
Сборка проекта по коммиту в GitHub
https://rtfm.co.ua/jenkins-pipeline-plagin-i-trigger-bilda-cherez-github-webhook
https://www.youtube.com/watch?v=Z3S2gMBUkBo&index=13&list=PLzvRQMJ9HDiSaisKr7OnM4Fl7JXCDDcmt
Сборка проекта по коммиту в BitBucket
https://skobk.in/2014/09/jenkins-build-on-bitbucket-commit
https://www.youtube.com/watch?v=nNaR5Q_pIa4&index=4&list=PLzvRQMJ9HDiSaisKr7OnM4Fl7JXCDDcmt
Источник
https://wiki.jenkins.io/display/JENKINS/Parameterized+Build
https://www.nczonline.net/blog/2015/10/triggering-jenkins-builds-by-url/
https://stackoverflow.com/questions/20359810/how-to-trigger-jenkins-builds-remotely-and-to-pass-parameters