|
|
|
Содержание:
|
|
|
|
|
|
|
|
[[_TOC_]]
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
### 1. Добавляем ключи доступа в Jenkins
|
|
|
|
|
|
|
|
1. Добавляем SSH key
|
|
|
|
- Заходим в "Настройка Jenkins"
|
|
|
|
- Выбираем "Manage credentials"
|
|
|
|
- В части "Stores scoped to Jenkins" находим выпадающий список около кнопки "global"
|
|
|
|
- В выпадающем списке выбираем `Add credentials`
|
|
|
|
- В поле "Kind" выбираем `SSH Username with private key`
|
|
|
|
- В поле "Username" пишем **имя пользователя Gitlab** у которого есть права на изменение репозитория (В нашем случае **Jenkins**)
|
|
|
|
- В поле "Private key" выбираем "Enter directly" и вводим **private SSH key пользователя Gitlab** *(id_rsa)*
|
|
|
|
- В поле "Passphrase" вводим **личный пароль пользователя Gitlab**, нажимаем "Ок"
|
|
|
|
> Если у Вас нет ключа SSH, то что бы создать его, обратитесь к [домашней странице Wiki](home#создаем-ключ-ssh-для-пользователя-gitlab)
|
|
|
|
|
|
|
|
1. Добавляем "Acces Token"
|
|
|
|
- В GitLab, в настройках пользователя ищем настройку "Access Tokens"
|
|
|
|
- Даём имя токену и определяем его области применения (При необходимости выставляем все)
|
|
|
|
- Нажимаем кнопку "Create personal access token"
|
|
|
|
- Копируем выданный токен (Не обязательно сохранять его куда-то)
|
|
|
|
- Заходим в "Настройка Jenkins"
|
|
|
|
- Выбираем "Manage credentials"
|
|
|
|
- В части "Stores scoped to Jenkins" находим выпадающий список около кнопки "global"
|
|
|
|
- В выпавшем списке выбираем `Add credentials`
|
|
|
|
- В поле "Kind" выбираем `GitLab API Token`
|
|
|
|
- В поле "API token" вставляем выданный нам токен, и нажимаем "Ок"
|
|
|
|
|
|
|
|
### 2. Скачивание и установка плагинов
|
|
|
|
|
|
|
|
- На панели слева выбираем "Настройка Jenkins"
|
|
|
|
- Переходим в "Управление плагинами"
|
|
|
|
- Выбираем вкладку "Доступные"
|
|
|
|
- В поиске вводим `Gitlab`
|
|
|
|
- Устанавливаем галочки напротив следующих плагинов
|
|
|
|
- [x] Generic Webhook Trigger
|
|
|
|
- [x] GitLab Authentication
|
|
|
|
- [x] Gitlab Hook
|
|
|
|
- [x] Gitlab API
|
|
|
|
- [x] Gitlab Merge Request Builder
|
|
|
|
- [x] GitLab Branch Source
|
|
|
|
- [x] GitLab Logo
|
|
|
|
- [x] Violation Comments to GitLab
|
|
|
|
|
|
|
|
- Нажимаем кнопку "Install without restart"
|
|
|
|
- После установки всех плагинов вручную перезагружаем страницу Jenkins (Потребуется повторная авторизация)
|
|
|
|
|
|
|
|
> Для стабильной Jenkins с GitLab достаточно только одного плагина *Gitlab API*, однако рекомендую установить весь список, для более комфортного интерфейса и больших настроек pipeline
|
|
|
|
|
|
|
|
### 3. Настройки авторизации
|
|
|
|
|
|
|
|
Следующие настройки необходимы для GitLab для того, что бы правильно работал WebHook
|
|
|
|
|
|
|
|
- На панели слева выбираем "Настройка Jenkins"
|
|
|
|
- Переходим в "Глобальные настройки безопасности"
|
|
|
|
- В разделе "Авторизация" выбираем `Любой пользователь может сделать что угодно` (На данный момент не решили проблему авторизации. Пока стараюсь найти решение. Если найду - укажу в этом разделе)
|
|
|
|
- Нажимаем кнопку "Сохранить"
|
|
|
|
|
|
|
|
### 4. Конфигурация системы Jenkins
|
|
|
|
|
|
|
|
- Переходим в "Настройки Jenkins"
|
|
|
|
- Выбираем "Конфигурация системы"
|
|
|
|
- В поле "Количество сборщиков" устанавливаем необходимое количество `9` (Рекомендую 7-10)
|
|
|
|
- В поле "Задержка перед сборкой" ставим `0`
|
|
|
|
- В разделе "Gitlab" ставим галочку на "Enable authentication for '/project' end-point"
|
|
|
|
- "Connection name" делаем какой удобно
|
|
|
|
- "Gitlab host URL" устанавливаем адрес всего нашего GitLab (В нашем случае это `https://gitlab.mega-pol.ru/`)
|
|
|
|
- В списке "Credentials" выбираем `GitLab API Token`
|
|
|
|
- Нажимаем справа от "Credentials" кнопку "Test connection" (В результате под "Credentials" должно написать "Success")\
|
|
|
|
|
|
|
|
![Скриншот_01-11-2021_115305](uploads/069ef0febed02a2152e957511114434a/Скриншот_01-11-2021_115305.jpg "Настройка GitLab плагина в конфигурации системы")
|
|
|
|
|
|
|
|
- На экране внизу нажимаем "Сохранить"
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
## Создание и настройка pipeline в Jenkins
|
|
|
|
|
|
|
|
В данном случае настраивается pipeline, у которого скрипт находится в репозитории GitLab. Он работает в `Jenkinsfile` из определенной ветки репозитория.
|
|
|
|
|
|
|
|
1. Заходим на главную страницу Jenkins
|
|
|
|
|
|
|
|
1. Слева наверху нажимаем "Создать Item"
|
|
|
|
- Вводим **имя** будущего pipeline
|
|
|
|
- Выбираем "Pipeline", нажимаем "Ок"
|
|
|
|
|
|
|
|
1. Ставим галочку в поле "Use alternative credential"
|
|
|
|
- В "Credential" выбираем `GitLab API Token`
|
|
|
|
- Нажимаем справа от "Credentials" кнопку "Test connection" (В результате под "Credentials" должно написать "Success")
|
|
|
|
|
|
|
|
1. В разделе "Build Triggers" ставим галочку на `Build when a change is pushed to GitLab. GitLab webhook URL:`
|
|
|
|
|
|
|
|
1. Настраиваем триггеры под свой pipeline (Для теста можно поставить все галочки в этом разделе)
|
|
|
|
|
|
|
|
1. В разделе "Pipeline", "Definition" выбираем `Pipeline script from SCM`
|
|
|
|
- В поле "SCM" выбираем `Git`
|
|
|
|
- В поле "Repository URL" Вставляем ссылку на клонирование репозитория с **Clone with SSH** (В необходимом GitLab репозитории есть кнопка "Clone", в ней копируем ссылку на "Clone with SSH")
|
|
|
|
- В поле "Credentials" выбираем необходимого нам пользователя (Все ошибки должны в этом разделе должны погаснуть сразу после добавления "Credentials")
|
|
|
|
- Проверяем остальные поля (Рабочая ветка, путь или имя рабочего файла `Jenkinsfile`), нажимаем "Сохранить"
|
|
|
|
|
|
|
|
> Для правильной работы Msbuild в pipeline Jenkins требуется установленный Delphi или его конкретные части сборщика см. [Главу "Настройка платформы для сборки (msbuild)"](Страница-с-руководством-по-установке-и-настройке-Jenkins#настройка-платформы-для-сборки-msbuild)
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
## Создание узла (агента) на Windows для Jenkins
|
|
|
|
|
|
|
|
Агенты Jenkins — это небольшие «клиентские» процессы Java, которые подключаются обратно к « главному » экземпляру Jenkins через протокол запуска сети Java ( JNLP ). В Jenkins есть master-node, который управляет slave-node. Процессы инициализируются master, а выполняются обычно на slave. В качестве узла могут выступать виртуальные машины с различными ОС, что позволяет выполнять сборку, развертывание и тесты на различных платформах параллельно.
|
|
|
|
|
|
|
|
1. Заходим на главную страницу Jenkins
|
|
|
|
1. Настройки Jenkins
|
|
|
|
1. Управление средами сборки
|
|
|
|
1. Новый узел
|
|
|
|
1. Пишем имя узла и выбираем "Permanent Agent"
|
|
|
|
1. На открывшейся странице заполняем:
|
|
|
|
- Имя узла
|
|
|
|
- Рекомендую добавить описание
|
|
|
|
- Указываем количество сборщиков
|
|
|
|
- Указываем корневую папку в которой будет работать узел
|
|
|
|
- Указываем метку (По ней возможно обращение в pipeline)
|
|
|
|
- В разделе использование выбираем "Use agent as much as possible"
|
|
|
|
- Способ запуска выбираем "Launch agent by connecting it to the controller"
|
|
|
|
1. Сохраняем и выбираем созданный узел
|
|
|
|
1. Нажимаем в верхней строке с ошибкой на `Go to security configuration screen and change it.`
|
|
|
|
|
|
|
|
![Скриншот_11-01-2022_114026](uploads/6da880b9fc5b02993c8518cdeca9fdb2/Скриншот_11-01-2022_114026.png)
|
|
|
|
|
|
|
|
1. В глобальных настройках безопасности ищем:
|
|
|
|
- Раздел "Agents"
|
|
|
|
- TCP port for inbound agents
|
|
|
|
- Выбираем статичный порт и вводим `36000`
|
|
|
|
- Сохраняем настройки и возвращаемся у созданному узлу
|
|
|
|
|
|
|
|
> Установку можно произвести 3мя способами, однако, из-за настроек сертификатов, рекомендуется использовать самый нижний
|
|
|
|
|
|
|
|
Для этого требуется выполнить следующие условия:
|
|
|
|
- Скачать агент локально на машине выполняющей роль узла (Нажав на `agent.jar`) в строке для установки
|
|
|
|
- Выбрать удобную директиву для `agent.jar`из которой вы будете его запускать
|
|
|
|
- В папке с `agent.jar` выполнить команду **cmd**: `java -jar agent.jar -jnlpUrl https://jenkins:8080/computer/<YoursNodeName>/jenkins-agent.jnlp -workDir "<DirectionOfYourNode>" -noCertificateCheck`. Эта команда указана третьей в списке способов запуска узла.
|
|
|
|
|
|
|
|
![Скриншот_11-01-2022_114409](uploads/0a677435628cf7da44ed38ad7f44885e/Скриншот_11-01-2022_114409.png)
|
|
|
|
|
|
|
|
> Обратите внимание, что команда `-noCertificateCheck` не указана в Jenkins. Мы её указываем для обхода проверки сертификатов
|
|
|
|
|
|
|
|
После успешного запуска узла в **cmd**, в результате должен появиться в новый узел левой колонке с *master* узлом, и под ним должны отображаться сборщики с подписью "В ожидании"
|
|
|
|
|
|
|
|
Можно посмотреть [видео](https://www.youtube.com/watch?v=V2ejGOY_uJI "https://www.youtube.com/watch?v=V2ejGOY_uJI") с создаем узла и разъяснением что к чему.
|
|
|
|
|
|
|
|
> В случае перезагрузки сервера Jenkins потребуется ручной запуск узла. Для этого достаточно последнее действие:
|
|
|
|
>> В папке с `agent.jar` выполнить команду **cmd**: `java -jar agent.jar -jnlpUrl https://jenkins:8080/computer/<YoursNodeName>/jenkins-agent.jnlp -workDir "<DirectionOfYourNode>" -noCertificateCheck`
|
|
|
|
-----
|
|
|
|
|
|
|
|
## Возможные ошибки и их решения
|
|
|
|
|
|
|
|
1. Ошибки при работе Job в Jenkins:
|
|
|
|
- При возникновении ошибки `Scripts not permitted to use method java.lang.Class isArray. Administrators can decide whether to approve or reject this signature.`
|
|
|
|
- Нажимаем на **Administrators can decide whether to approve or reject this signature.**
|
|
|
|
- Добавляем в разделе "ScriptApproval" все разрешения на которые он указывает
|
|
|
|
- При возникновении ошибки `Failed to update Gitlab commit status for project '55': HTTP 403 Forbidden`, Стоит обратить внимание на все ключи (Пароли и SSH ключи). Возможно, что в Jenkins произошел сбой связанный с "Credentials".
|
|
|
|
- Так же, часто встречается ошибка с "CredentialsID", что обычно указывает на не правильные настройки Jenkins. Или же на то, что такой "Credential" как "Acces Token" был удален.
|
|
|
|
|
|
|
|
*В моём частном случае была именно проблема с ключами для плагина GitLab (при том, что сам Jenkins ошибки не видел). Выяснилось, что на самом деле "Acces Token" был удален из репозитория.*
|
|
|
|
|
|
|
|
- Обращаю внимание на rsvars.bat, точнее на его директорию. Версия Delphi должна поддерживать msbuild
|
|
|
|
|
|
|
|
*В моем частном случае **community** версия Delphi имела запрет на сборку через **msbuild**, при том, что явную ошибку сборщик не выдавал*
|
|
|
|
|
|
|
|
1. Когда репозиторий имеет подмодули (*submodule*), возможны ошибки при сборке, указывающие на не найденный файл (файлы). Обратите внимание на `Jenkinsfile`, вероятно в нем не указаны параметры `checkout`.
|
|
|
|
|
|
|
|
Представляю здесь рабочий вариант процедуры
|
|
|
|
```ruby
|
|
|
|
def checkoutMergeParams = [$class: 'GitSCM',
|
|
|
|
branches: [
|
|
|
|
[name: env.gitlabSourceBranch]
|
|
|
|
],
|
|
|
|
extensions: [
|
|
|
|
[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: true, reference: '', timeout: 60, trackingSubmodules: false],
|
|
|
|
[$class: 'PruneStaleBranch'],
|
|
|
|
[$class: 'CleanCheckout'],
|
|
|
|
[$class: 'PreBuildMerge', options: [fastForwardMode: 'NO_FF', mergeRemote: 'origin', mergeTarget: env.gitlabTargetBranch]]
|
|
|
|
],
|
|
|
|
submoduleCfg: [],
|
|
|
|
userRemoteConfigs: [
|
|
|
|
[credentialsId: credentialsId, url: env.gitlabTargetRepoSshURL]
|
|
|
|
]
|
|
|
|
]
|
|
|
|
```
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
## Ссылки на документацию
|
|
|
|
|
|
|
|
- [Jenkins](https://www.jenkins.io/doc/book/)
|
|
|
|
|
|
|
|
- [GitLab](https://docs.gitlab.com/ee/topics/)
|
|
|
|
|
|
|
|
- [Видео с установкой узла для Jenkins](https://www.youtube.com/watch?v=V2ejGOY_uJI "https://www.youtube.com/watch?v=V2ejGOY_uJI")
|
|
|
|
|
|
|
|
-----
|
|
|
|
[В начало](Настройки-Jenkins-и-создание-pipeline#настройка-jenkins) | [Страница Home](home#пока-все-лежит-на-одной-странице) | [Страница с руководством по установке и настройке Jenkins](Страница-с-руководством-по-установке-и-настройке-Jenkins#установка-необходимого-софта)
|
|
|
|
|
|
|
|
[Редактировать текущую страницу](https://git-data.ru/Documentation/Guides/-/wikis/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8-Jenkins-%D0%B8-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-pipeline/edit)
|
|
|
|
|
|
|
|
----- |
|
|
|
\ No newline at end of file |