-
Notifications
You must be signed in to change notification settings - Fork 18
jenkins ci
Используйте Более полное описание в новой статье
jenkins-ci - сервер непрерывной интеграции. Определение "непрерывной интеграции" прекрасно описано в википедии. До недавнего времени об использовании систем непрерывной интеграции не было слышно, конечно частные способы, такие как "Автоматическая проверка конфигураций" или расширенная проверка конфигурации и ее запуск в пакетном режиме конфигуратора существовала и ранее. Но вот про комплексный подход, я не слышал. Итак сервер непрерывной интеграции jenkins нам необходим для запуска тестов, с помощью такого проекта 1CUnit. От себя хотелось бы добавить, что на неискушенный взгляд jenkins представляет собой запускалку каких-либо команд, с возможностью указания периодичности запуска и показа результатов выполнения данных команд. В мире 1С ближайшая аналогия - это БСП и запуск регламентными заданиями каких-либо обработок, с последующим анализом их работы(успешно/не успешно).
Установка проста и лаконична, главное соблюсти зависимости:
в отличии от официальных рекомендаций я использую запуск jenkins не в качестве сервиса, а просто запуск через bat файл. Поэтому скачиваю не инсталятор, а простой war файл. Запуск произвожу с помощью bat файла. В bat файле определяем переменную JENKINS_HOME - путь к каталогу, где у нас будет хранится все настройки и данные наших задач. По умолчанию в данном каталоге и будут находится наши выполняемые задачи и данные, для этих задач, так называемые job's workspace.
cd /d D:\work\jenkins
set JENKINS_HOME=D:\work\jenkins
start /MIN java -jar jenkins.war
rem java -jar jenkins.war
Вот такой простой bat файл, позволяет вам добавить в автозагрузку запуск сервера jenkins. По умолчанию запускается на 8080 порте, в любом браузере переходим по адресу localhost:8080 .
Первое, что попросит у вас jenkins, настроить права, для этого необходимо: Зайти в Настроить Jenkins, будет самая первая кнопка "Настройка безопасности", тут фантазия может ваша развернуться как угодно. Если в локальной сети доверяете всем и всё, можно выбрать "Anyone can do anything", хотим все таки авторизироваться, тогда читаем официальную справку. Основной момент, на который потратил время - в справке неправильный скриншот, но текст правильный. Поэтому выбираем "Jenkins's own user database", обязательно ставим "Разрешить регистрацию пользователей"("Allow users to sign up"), выбираем "Матричное распределение прав"("Matrix-based security") повторяем галочки как на скриншоте. Обязательно добавляем пользователя с любым наименованием и проставляем ему админские права. После сохранения настроек основная "магия" состоит в том, что вам необходимо зарегистрировать нового пользователя , вот тут как раз и пишем то имя пользователя (shenja) и желаемый пароль, после этого вы будете зарегистрированным пользователем. Если не получилось, удаляем все файлы в каталоге с jenkins и повторяем по шагам.
Второе, что надо сделать - это установить плагины. Для установки плагинов необходимо зайти в настройки, Управление плагинами, справа вверху пишем в поле "filter" необходимое наименование и устанавливаем галочки. Совет: используйте кнопку "Download now and install after restart", перезапуск производиться с помощью закрытия java окна или перезапуском сервера jenkins(если установили в качестве сервиса) , минимальный набор который вам необходим будет это:
- FSTrigger Plugin - служит для определения изменения файлов и запуска задач, при изменении, в частности использую для определения, что в базе данных хранилища, что поменялось и необходимо запустить синхронизацию;
- Copy Artifact Plugin - для копирования файлов между проектами, например, одна задача проверяет изменения файлов и копирует их, вторая задача копирует эти же файлы не по сети, а с локального жесткого диска;
- Multiple SCMs Plugin - для возможности в одном сборочном каталоге располагать несколько репозитариев;
- JUnit - для парсинга результатов тестов и вывода их.
- Git plugin - собственно если планируете использовать git.
Повторюсь: отметили галочками необходимые плагины, нажали кнопку "Download now and install after restart"; перезапустили jenkins; обновили плагины - это тот случай когда обновление полезно.
После установки плагинов, можно приступать к автоматизации различных задач.
- доступ к файлу базы данных хранилища;
- наличие установленной 1С версии 8.3;
- наличие установленного git;
Все задачи, которые мы в дальнейшем будем настраивать в jenkins - это по факту автоматизация рутинных дейсти и порядка выполнения определенных задач и группировка их под определенным имененем. В результате нам с вами не надо запускать последовательно 3-5 задач, а запустить 1 под определенным именем, которая сама запустит необходимые действия, проследит за их выполнением и предоставит итоговый результат.
Давайте рассмотрим необходимые действия для запуска из под jenkins синхронизации хранилища 1С и git. Если бы мы с вами вручную выполняли, то нам бы понадобилось:
- Нулевой шаг, я бы назвал его подготовительным, выполняем один раз:
- Подготовить репозиторий git, инициализировать проект git, добавить служебные файлы AUTHORS и VERSION их описание в wiki. Файл AUTHORS можно на первых порах оставить пустым и наполнять в дальнейшем по мере необходимости.
- Создать пустую, так называемую "сервисную" базу , я использую на базе "Инструменты разработчика", с одним пользователем "admin" и паролем "1".
- Определяем рабочую папку, в терминах jenkins назовем ее workspace , в данную папку нам необходимо склонировать наш репозиторий git в папку src .
- Склонировать v83unpack c github или же с локального диска - это вам решать.
- Запустить сервисную базу, в данной базе запустить внешнюю обработку ВыгрузкаКонфигураций.epf
- указать путь к папке src с исходными кодами, если помним, то у нас там пока кроме двух служебных файлов ничего нет, в поле "Каталог выгрузки" .
- указать путь к файлу базы данных хранилища.
- запустить конфигурацию, обработке прийдется выполнить следующие действия:
- Экспортировать из файла хранилища таблицу versions
- Определить какая версия у нас находиться в репозитарии git из файла version.xml, в случаии отличия запустит процедуру получения из хранилища необходимой следующией версии.
Для полной синхронизации достаточно указатьв в файле verions.xml 0 или же если не целесообразно тащить тысячи версий можно записать необходимый номер версии и с этого номера пойдет синхронизация.
в файле VERSION храниться соответствие между версией в git и версией в хранилищем
-
после получения файла конфигурации необходимой версии, запускаем создание пустой базы данных на основании cf файла.
-
запускаем выгрузку из вновь созданной базы.
-
в исходном каталоге git удаляем все файлы и каталоги кроме служебных.
-
копируем в человекочитаемую структуру выгруженные ранее с помощью 8.3 файлы.
-
выполняем коммит в git (вызов "git commit -m "Сообщение")
Внимание: на этом шаге может все остановиться. Обязательным условием для помещения в git является наличие коментария и указание автора. Проблема в синхронизации 1С и git, в том что те имена авторов которые в хранилище совершенно не подходят для git и нам необходимо в файле authors прописывать необходимые соответствия. На данном этапе, если не нашли автора, тогда покажем ошибку пользователю. С выводом в окно сообщений те uuid авторов, для которых нет соответствия. Ваши действия, отредактировать файл authors и сделать коммит.
-
Повторяем предыдущие итерации пока последняя версия хранилища не сравняетса с версией в git репозитории.
- После всех шагов, в локалном каталоге src у вас находися синхронизированная копия хранилища, ваша задача отправить изменения на сервер или в ту папку которая будет доступна другим разработчикам. Выполнить git push .
- Скопировать существующий проект git, для этого необходимо знать путь к проекту.
- Скопировать файл базы данных хранилища 1cv8ddb.1CD. Если хранилище и jenkins на одном компьютере можно и не копировать.
- Запустить одну командную строку и дождаться завершения. Примеры командной строки можно посмотреть на github , в частности смотрим на пример команды для синхронизации:
"C:\Program Files\1cv82\8.2.15.319\bin\1cv8.exe" ENTERPRISE /F"C:\Users\admin\.jenkins\workspace\runTest1C\build\ibService" /Nadmin /P1 /DisableStartupMessages /Execute"C:\Users\admin\temp\ВыгрузкаКонфигураций.epf" /C"sync1ctogit;patchRepo;C:\1c8ddb.1cd;patchOut;C:\repo\git\src;auto;out;C:\Users\admin\.jenkins\workspace\runTest1C\outExport.txt;"
Если внимательно посмотреть на пример команды, то можно увидеть, что у нас есть неопределенность с некоторыми путями:
Execute"C:\Users\admin\temp\ВыгрузкаКонфигураций.epf"
Путь к внешней обработке. Решается очень просто, в настройках задачи в разделе "Multiple SCMs", добавляем новую запись с видом git, указываем путь https://github.com/pumbaEO/v83unpack.git
после настройки "Branches to build" есть кнопка "Расширенные", нажимаем и указываем в поле "Local subdirectory for repo (optional)" наименование папки, у меня v83unpack , в результате работы в папке workspace будет создана папка v83unpack с самой последней версией v83unpack. Теперь путь можно указать как :
Execute"%WORKSPACE%\v83unpack\ВыгрузкаКонфигураций.epf"
Переменная %WORKSPACE% содержит в себе полный путь к папке с рабочим каталогом в котором будет происходить вся работа.
-
Дополнительно нам необходимо определить каталог с исходным кодом разобранной 1С конфигурации. Для этого в разделе "Multiple SCMs" добавляем еще один проект git и указываем путь к нашей папке, например по пути "r:\git\testsync1ctoGit" я предварительно создал git репозиторий. Указываю путь
r:\git\testsync1ctoGit
в "Local subdirectory for repo (optional)" указываю папкуsrc
-
В результате получается такая строка запуска:
C:\Program Files\1cv82\8.2.15.319\bin\1cv8.exe ENTERPRISE /F"%WORKSPACE%\build\ibService" /Nadmin /P1 /DisableStartupMessages /Execute"%WORKSPACE%\v83unpack\ВыгрузкаКонфигураций.epf" /C"sync1ctogit;patchRepo;%WORKSPACE%\1c8ddb.1cd;patchOut;%WORKSPACE%\src;auto;out;%WORKSPACE%\outExport.txt;"
-
Вспоминаем, у нас сейчас добавлено 2 репозитария, один служебный v83unpack и наш репозитарий для синхронизации в папках v83unpack и src . Для успешного запуска нам необходимо указать путь к базе хранилища 1С , полный путь
patchRepo;%WORKSPACE%\1c8ddb.1cd
, в моем нашем случаи мы предварительно копируем ***.1cd файл в каталог с проектом. Так же необходимо указать путь к сервисной базе. Сервисная база необходима только для запуска внешней обработки, я использую файловый вариант, созданный на основании "Инструменты разработчика". -
Итак все готово, для запуска. Итоговая командная строка получилась:
chcp 1251
C:\Program Files\1cv82\8.2.15.319\bin\1cv8.exe ENTERPRISE /F"%WORKSPACE%\build\ibService" /Nadmin /P1 /DisableStartupMessages /Execute"%WORKSPACE%\v83unpack\ВыгрузкаКонфигураций.epf" /C"sync1ctogit;patchRepo;%WORKSPACE%\1c8ddb.1cd;patchOut;%WORKSPACE%\src;auto;out;%WORKSPACE%\outExport.txt;
в jenkins добавляем "Добавить шаг сборки" из выпадающего списка выбираем "Выполнить команду windows" и вставляем полученную строчку. Сохраняем, можно пробовать запускать задание.
Таким образом, с вызовом определенных команд в дальнейшем можно настраивать периодичность запуска и т.д.