Содержание:
- 1. Добавляем ключи доступа в Jenkins
- 2. Скачивание и установка плагинов
- 3. Настройки авторизации
- 4. Конфигурация системы Jenkins
- Создание и настройка pipeline в Jenkins
- Создание узла (агента) на Windows для Jenkins
- Возможные ошибки и их решения
- Ссылки на документацию
1. Добавляем ключи доступа в Jenkins
-
Добавляем 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
-
Добавляем "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
-
Устанавливаем галочки напротив следующих плагинов
- Generic Webhook Trigger
- GitLab Authentication
- Gitlab Hook
- Gitlab API
- Gitlab Merge Request Builder
- GitLab Branch Source
- GitLab Logo
- 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")\
-
На экране внизу нажимаем "Сохранить"
Создание и настройка pipeline в Jenkins
В данном случае настраивается pipeline, у которого скрипт находится в репозитории GitLab. Он работает в Jenkinsfile
из определенной ветки репозитория.
-
Заходим на главную страницу Jenkins
-
Слева наверху нажимаем "Создать Item"
- Вводим имя будущего pipeline
- Выбираем "Pipeline", нажимаем "Ок"
-
Ставим галочку в поле "Use alternative credential"
- В "Credential" выбираем
GitLab API Token
- Нажимаем справа от "Credentials" кнопку "Test connection" (В результате под "Credentials" должно написать "Success")
- В "Credential" выбираем
-
В разделе "Build Triggers" ставим галочку на
Build when a change is pushed to GitLab. GitLab webhook URL:
-
Настраиваем триггеры под свой pipeline (Для теста можно поставить все галочки в этом разделе)
-
В разделе "Pipeline", "Definition" выбираем
Pipeline script from SCM
- В поле "SCM" выбираем
Git
- В поле "Repository URL" Вставляем ссылку на клонирование репозитория с Clone with SSH (В необходимом GitLab репозитории есть кнопка "Clone", в ней копируем ссылку на "Clone with SSH")
- В поле "Credentials" выбираем необходимого нам пользователя (Все ошибки должны в этом разделе должны погаснуть сразу после добавления "Credentials")
- Проверяем остальные поля (Рабочая ветка, путь или имя рабочего файла
Jenkinsfile
), нажимаем "Сохранить"
- В поле "SCM" выбираем
Для правильной работы Msbuild в pipeline Jenkins требуется установленный Delphi или его конкретные части сборщика см. Главу "Настройка платформы для сборки (msbuild)"
Создание узла (агента) на Windows для Jenkins
Агенты Jenkins — это небольшие «клиентские» процессы Java, которые подключаются обратно к « главному » экземпляру Jenkins через протокол запуска сети Java ( JNLP ). В Jenkins есть master-node, который управляет slave-node. Процессы инициализируются master, а выполняются обычно на slave. В качестве узла могут выступать виртуальные машины с различными ОС, что позволяет выполнять сборку, развертывание и тесты на различных платформах параллельно.
- Заходим на главную страницу Jenkins
- Настройки Jenkins
- Управление средами сборки
- Новый узел
- Пишем имя узла и выбираем "Permanent Agent"
- На открывшейся странице заполняем:
- Имя узла
- Рекомендую добавить описание
- Указываем количество сборщиков
- Указываем корневую папку в которой будет работать узел
- Указываем метку (По ней возможно обращение в pipeline)
- В разделе использование выбираем "Use agent as much as possible"
- Способ запуска выбираем "Launch agent by connecting it to the controller"
- Сохраняем и выбираем созданный узел
- Нажимаем в верхней строке с ошибкой на
Go to security configuration screen and change it.
- В глобальных настройках безопасности ищем:
- Раздел "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
. Эта команда указана третьей в списке способов запуска узла.
Обратите внимание, что команда
-noCertificateCheck
не указана в Jenkins. Мы её указываем для обхода проверки сертификатов
После успешного запуска узла в cmd, в результате должен появиться в новый узел левой колонке с master узлом, и под ним должны отображаться сборщики с подписью "В ожидании"
Можно посмотреть видео с создаем узла и разъяснением что к чему.
В случае перезагрузки сервера Jenkins потребуется ручной запуск узла. Для этого достаточно последнее действие:
В папке с
agent.jar
выполнить команду cmd:java -jar agent.jar -jnlpUrl https://jenkins:8080/computer/<YoursNodeName>/jenkins-agent.jnlp -workDir "<DirectionOfYourNode>" -noCertificateCheck
Возможные ошибки и их решения
-
Ошибки при работе 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, при том, что явную ошибку сборщик не выдавал
- При возникновении ошибки
-
Когда репозиторий имеет подмодули (submodule), возможны ошибки при сборке, указывающие на не найденный файл (файлы). Обратите внимание на
Jenkinsfile
, вероятно в нем не указаны параметрыcheckout
.
Представляю здесь рабочий вариант процедуры
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]
]
]
Ссылки на документацию
В начало | Страница Home | Страница с руководством по установке и настройке Jenkins
Редактировать текущую страницу