Skip to content
Сосна Евгений edited this page Feb 26, 2014 · 6 revisions

Статья устарела.

Установка jenkins и его использование с 1С

Введение

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 и повторяем по шагам.

Рисунок с jenkins wiki

Второе, что надо сделать - это установить плагины. Для установки плагинов необходимо зайти в настройки, Управление плагинами, справа вверху пишем в поле "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С с git

Необходимые условия:

  • доступ к файлу базы данных хранилища;
  • наличие установленной 1С версии 8.3;
  • наличие установленного git;

Порядок действий вручную:

Все задачи, которые мы в дальнейшем будем настраивать в jenkins - это по факту автоматизация рутинных дейсти и порядка выполнения определенных задач и группировка их под определенным имененем. В результате нам с вами не надо запускать последовательно 3-5 задач, а запустить 1 под определенным именем, которая сама запустит необходимые действия, проследит за их выполнением и предоставит итоговый результат.

Давайте рассмотрим необходимые действия для запуска из под jenkins синхронизации хранилища 1С и git. Если бы мы с вами вручную выполняли, то нам бы понадобилось:

  1. Нулевой шаг, я бы назвал его подготовительным, выполняем один раз:
    • Подготовить репозиторий git, инициализировать проект git, добавить служебные файлы AUTHORS и VERSION их описание в wiki. Файл AUTHORS можно на первых порах оставить пустым и наполнять в дальнейшем по мере необходимости.
    • Создать пустую, так называемую "сервисную" базу , я использую на базе "Инструменты разработчика", с одним пользователем "admin" и паролем "1".
  2. Определяем рабочую папку, в терминах jenkins назовем ее workspace , в данную папку нам необходимо склонировать наш репозиторий git в папку src .
  3. Склонировать v83unpack c github или же с локального диска - это вам решать.
  4. Запустить сервисную базу, в данной базе запустить внешнюю обработку ВыгрузкаКонфигураций.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 репозитории.

  5. После всех шагов, в локалном каталоге src у вас находися синхронизированная копия хранилища, ваша задача отправить изменения на сервер или в ту папку которая будет доступна другим разработчикам. Выполнить git push .

Порядок действий с помощью jenkins:

  • Скопировать существующий проект 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" и вставляем полученную строчку. Сохраняем, можно пробовать запускать задание.

Таким образом, с вызовом определенных команд в дальнейшем можно настраивать периодичность запуска и т.д.