Основано на идее [ripreal] https://github.com/ripreal/erp_features.git Все действия будут выполняться под Windows. Необходимо установить:
- Jenkins
- Серверная платформа 1С с развернутой серверной базой не ниже 8.3.10
- Блокирум запуск соединений и РЗ
- Выбрасываем пользователей из базы 1С
- Создаём бэкап конфигурации
- Создаём бэкап ИБ
- Создаем файл обновления
- Обновляем ИБ
- Разблокирум запуск соединений и РЗ
GIT нам потребуется для того, чтобы дженкинс смог работать со скриптами нашего пайплайна, которые расположены в экспериментальном репозитории https://github.com/dunkpi/itek_jenkins.git. Для этого:
- Скачиваем последний дистрибутив GIT for Windows и устанавливаем
Jenkins – бесплатная среда для автоматического запуска всех скриптов нашего пайплайна по расписанию. Установка и первичная настройка дженкинса не принесет никаких проблем.
- Скачиваем дистрибутив JRE 1.8 и устанавливаем
- Скачиваем последний дистрибутив Jenkins (на момент статьи это 2.141) и устанавливаем как сервис. Все настройки оставляем по-умолчанию.
- Меняем стандартную кодировку дженкинса на UTF-8. Это важный этап, чтобы в веб-интерфейсе дженкинса все русские символы отображались корректно. Для этого добавляем параметр -Dfile.encoding=UTF8 в тег в файле Jenkins.xml, расположенном в корневом каталоге установки дженкинса. Итоговая строка должна выглядеть примерно так:
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF8 -jar "%BASE%\jenkins.war" --httpPort=8991 --webroot="%BASE%\war"</arguments>
- Перезапускаем службу Jenkins в диспетчере задач Windows и проверяем, что все прошло хорошо, открыв веб-интерфейс дженкинса по адресу http://localhost:8080. Если у вас порт 8080 занят другим приложением, то необходимо будет его перенастроить, например как написано здесь
Эта удобная функция позволяет писать и складывать скрипты в отдельные библиотеки для их переиспользования в дальнейшем.
- В веб-интерфейсе дженкинса переходим в меню Manage Jenkins (Настроить Jenkins) => Configure System (Конфигурация системы) => Global Pipeline Libraries 2.Нажимем Add и заполняем поля:
- Name: shared-libraries
- Default version: master
- Retrieval method: modern SCM
- Source Code Management: Git (не GitHub)
- Poject Repository: https://github.com/dunkpi/itek_jenkins.git
- В Веб-интерфейсе дженкинса переходим в меню New Item (Создать Item), заполняем произвольное имя в поле Enter an item name (Введите имя Item'а), выбираем тип скрипта - pipeline и нажимаем ОК
- В новом окне открывается конфиг пайплайна. Переходим к группе pipeline, в котором мы введем настройки подключения к репозиторию, в котором хранятся все исходники. Заполняем поля следующим образом:
- Definition - pipeline script from SCM
- SCM - git
- Repository URL - https://github.com/dunkpi/itek_jenkins.git
- В группе Additional Behaviours нажимаем кнопку add и выбираем clean before checkout, чтобы автоматически очищать директорию сборки от предыдущих результатов.
- Все остальные параметры оставляем по-умолчанию и нажимаем Save
Часть параметров конфига хранятся в Jenkinsfile - скрипте в удаленном репозитории, который мы указали в п.4. Поэтому чтобы донастроить пайплайн необходимо выполнить пробный запуск. Для этого:
- В Веб-интерфейсе дженкинса на главной странице переходим в наш пайплайн
- В открывшемся окне нажимаем Build (Собрать сейчас) в левой командной панели и наблюдаем процесс сборки. Сборка должна будет упасть - это нормально.
- Обновляем браузер через f5 и видим, что теперь у нас вместо кнопки Buid появится другая кнопка Build with parameters (Собрать с параметрами) - это как раз то, что нам нужно.
В меню с пайплайном нажимаем кнопку Build with parameters (Собрать с параметрами), которая появилась вместо Build (Собрать) и видим список параметров со значениями NULL, которые нам нужно заполнить. Значения всех введенных параметров будут сохранены для следующих запусков пайплайна. Примечание - обязательно уберите из всех параметров значение NULL, иначе сборка при запуске будет ругаться. Если параметр не нужно заполнять, то оставьте его пустым:
- jenkinsAgent - Нода дженкинса, на которой запускать пайплайн. По умолчанию master
- platform1c - Версия платформы 1с, например 8.3.14.1694
- server1c - Имя сервера 1с, по умолчанию localhost
- port1c - Порт сервера 1с. По умолчанию 1540. Не путать с портом агента кластера (1541
- infobases - Список баз для обновления через запятую. Например c83_ack,c83_ato
- user1c - Имя администратора базы 1с Должен быть одинаковым для всех баз
- pass1c - Пароль администратора базы 1C. Должен быть одинаковым для всех баз
- backupDir - Путь для сохранения бэкапов 1c
- repServer1c - Имя сервера 1с базы, подключенной к хранилищу, по умолчанию localhost
- repInfobase - База подключенная к хранилищу
- repUser1c - Имя администратора базы 1с, подключенной к хранилищу
- repPass1c - Пароль администратора базы 1с, подключенной к хранилищу
- repPath - Необязательный. Пути к хранилищам 1С для обновления копий баз тестирования через запятую. Число хранилищ (если указаны), должно соответствовать числу баз тестирования. Например D:/temp/storage1c/ack,D:/temp/storage1c/ato
- repUser - Необязательный. Администратор хранилищ 1C. Должен быть одинаковым для всех хранилищ
- repPass - Необязательный. Пароль администратора хранилищ 1c
- permCode - Необязательный. Код блокировки ИБ при обновлениию. По умолчанию 0000 Теперь запускаем сборку и ждем ее полного выполнения. В идеале сборка должна выполниться успешно и отобразиться зеленым цветом. Если сборка упадет на каком-то из промежуточных шагов, то лезем в логи по кнопке Console Output (Вывод консоли) в левой панели, которая доступна, если провалится в саму сборку.
После установки дженкинса мы получаем одну master ноду, запущенную как системный процесс. Но в приличном jenkins обществе принято использовать master ноду только в качестве менеджера slave агентов, а не ка запускалку пайплайнов. Поэтому чтобы не создавать на нее лишнюю нагрузку и не вешать ее в случае какого-либо неоптимального кода, заводятся slave ноды.
- Разрешаем запуск слейв агентов в качестве консольных приложений. Для этого в веб-интерфейсе дженкинса переходим в меню Manage Jenkins (Настроить Jenkins) => Configure Global Security (Глобальные настройки безопасности) => Agents и в поле TCP port for JNLP agents меняем переключатель на Fixed (Статичный) и указываем порт, например 10001.
- Добавляем ноду. Для этого переходим в меню Manage Jenkins (Настроить Jenkins) => Manage Nodes (Управление средами сборки) и в левой командной панели нажимаем New Node (Новый узел), вводим имя, активируем переключатель Permanent Agent и жмем ок.
- Вводим параметр ноды:
- Name - имя хоста (компьютера)
- Remote root directory (Корень удаленной ФС) - произвольный путь к каталогу, в котором дженкинс будет выполнять пайплайны, например D:\jenkins
- Labels (Метки) - произвольное имя, по которому будем ссылаться на ноду в пайплайне. Рекомендую ставить такое же, как имя ноды.
- Launch method (Способ запуска) - выбираем Launch agent via Java Web Start
- Жмем save. Теперь нужно поднять ноду:
- В главном меню дженкинса в левой части должна появится иконка нашей новой ноды.
- Кликаем на нее и смотрим на последнюю строчку. Это и есть командная строка запуска slave ноды.
- Копируем командную строку и записываем ее в bat-ник, заодно скачиваем agent.jar по гиперссылке. Все это ложим в каталог, который мы выделили ранее для slave дженкинса и запускаем bat-ник. Если все сделано правильно, то через пару секунд запустится консольная слейв нода.
- Самое время првоерить работоспособность слейв ноды на нашем пайплайне. Для этого переходим к вводу входных параметров пайплайна, меняем параметр jenkinsAgent на label, который мы указали во время настройки ноды и запускаем пайплайн. В логах запущенной сборки можно увидеть, что пайплайн запустился на слейве
Запуск по расписанию - отличная идея для автоматичеких ночных обновлений:
- В Веб-интерфейсе дженкинса на главной странице переходим в наш пайплайн
- В левой панели нажимаем Configure (Настройки) и ставим галочку Build periodically (Запускать периодически)
- Вводим расписание по формату CRON. Для того, чтобы запускать каждую ночь в 12 часов, достаточно ввести следующее выражение H 00 * * 1-7