Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD


Вы все еще тестируете свои конфигурации 1С вручную? Да вы просто тратите жизнь впустую! В данном туториале попробуем скрестить ADD и jenkins для автоматического запуска тестов.

Переводим рутину ручного тестирования 1C на рельсы Jenkins-а и ADD

Регулярные читатели инфостарта должны уже слышать ( и не по наслышке знать) про Vanessa Behavior и его новых отпрысков – ADD и Vannessa Automation. Оба фреймворка – это замечательное воплощение идей удобного тестирования функциональности на 1С. Мы составляем cценарные тесты(или «фичи») на специальном языке gherkin, описывающим поведение пользователя в интерфейсе 1С Предприятия, а затем вручную прогоняем тесты на запускалке – внешней обработке 1С и узнаем, что у нас работает, а что не очень. Если вы еще не пробовали рай автоматического BDD тестирования, то данный туториал будет максимально полезен: мы сразу убъем двух зайцев – на практическом примере узнаем, что это такое и научимся его правильно готовить.

Под правильной готовкой мы будем понимать не запуск тестов вручную (желающим в руки достаточно «плотный» материал про Ванессу), а создание переиспользуемого пайплайна тестирования в Jenkins. Пайплайн, который будет сам автоматически по расписанию запускать тесты. Пайплайн, который не будет ломать вам рабочие базы. Пайплайн, который даст удобный allure отчет. Наконец, пайплайн, который принесет уверенность в завтрашнем дне!

Звучит хорошо, не правда ли? Но сбавим градус пафоса, господа… и перейдем от теории сразу к практике. Все действия будут выполняться под Windows.

Для наших практических экспериментов потребуется следующий софт:

  • Jenkins
  • One script и либы (Спасибо EvilBeaver)
  • ADD 6.0.0 (Спасибо SilverBulleters)
  • Серверная платформа 1С с развернутой серверной базой не ниже 8.3.10

На картинках конечный результат будет выглядеть вот так:

Статистика сборок

Отчет о сборке

Как будет работать наш пайплайн:

Весь смысл пайплайна в том, чтобы прогнать тесты на желаемой базе (или базах). И чтобы не портить саму эталонную тестовую базу (далее просто эталонная), мы будем работать исключительно с копией. Копирование баз выполняется средствами sql. Давайте разберем последовательность этапов, который выполняет этот мега-пайплайн:

  1. Удаляет копию эталонной базы из кластера (если она там была) и очищает клиентский кеш 1с
  2. Делает sql бекап эталонной базы, которую нужно загружать в копию.
  3. Загружает sql бекап эталонной базы в копию
  4. Создает копию в кластере 1С с префиксом test_
  5. Обновляет копию из хранилища 1С (если есть хранилище)
  6. Запускает внешнюю обработку 1С на копии, которая очищает базу от всплывающего окна с тем, что база перемещена при старте 1С
  7. Запускает внешнюю обработку ADD на копии и прогоняет тесты
  8. По результатам тестов формирует отчет allure

Итак, приступаем к установке.

1. Установка GIT

GIT — наверное уже известная всем система контроля версий кода, которая все больше входит в жизнь 1С-ков. Она нам потребуется для того, чтобы дженкинс смог работать со скриптами нашего пайплайна, которые расположены в экспериментальном репозитории https://github.com/ripreal/erp_features (данный репозиторий подойдет, чтобы выполнить туториал, но для разворачивания на продакшене рекомендуется завести свой, например путем форка моего). Для этого:

2. Установка и настройка Jenkins-а.

Jenkins – бесплатная среда для автоматического запуска всех скриптов нашего пайплайна по расписанию. Установка и первичная настройка дженкинса не принесет никаких проблем.

  1. Скачиваем дистрибутив JRE 1.8 и устанавливаем
  2. Скачиваем последний дистрибутив Jenkins (на момент статьи это 2.141) и устанавливаем как сервис. Все настройки оставляем по-умолчанию.
  3. Меняем стандартную кодировку дженкинса на UTF-8. Это важный этап, чтобы в веб-интерфейсе дженкинса все русские символы отображались корректно. Для этого добавляем параметр -Dfile.encoding=UTF8 в тег <arguments> в файле Jenkins.xml, расположенном в корневом каталоге установки дженкинса. Итоговая строка должна выглядеть примерно так:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -jar "%BASE%jenkins.war" --httpPort=8080 --webroot="%BASE%war"</arguments>

  1. Перезапускаем службу Jenkins в диспетчере задач Windows и проверяем, что все прошло хорошо, открыв веб-интерфейс дженкинса по адресу http://localhost:8080. Если у вас порт 8080 занят другим приложением, то необходимо будет его перенастроить, например как написано здесь

3. Настройка shared-libraries

Эта удобная функция позволяет писать и складывать скрипты в отдельные библиотеки для их переиспользования в дальнейшем. Мы будем использовать эти библиотеки постоянно.

  1. В веб-интерфейсе дженкинса переходим в меню Manage Jenkins (Настроить Jenkins) => Configure System (Конфигурация системы) => Global Pipeline Libraries
  2. Нажимем Add и заполняем поля:

4. Настройка Allure

Аллюр позволит генерировать красивые отчеты прямо в дженкинсе по результатам тестирования в ADD.

  1. Устаналиваем плагин allure. В веб-интерфейсе дженкинса переходим в меню Manage Jenkins (Настроить Jenkins) => Manage plugins (Управление плагинами) => Available (Доступные), ищем в списке Allure и устанавливаем его
  2. Устанавливаем сам дистрибутив allure. В веб-интерфейсе переходим Manage Jenkins (Настроить Jenkins) => Global Tool Configuration (Конфигурация глобальных инструментов) => Allure Commandline installations => Add Allure Commandline. Заполняем появившиеся поля следующим образом

5. Настройка окружения ADD

Переходим к установке непосредственно самих утилит, нужных для работы вспомогательных административных скриптов и самого инструмента ADD.

  1. Скачиваем последний дистрибутив OneScript и устанавливаем.
  2. Устанавливаем библиотеку vannessa-runner для OneScript. Для этого выполняем команду:

opm install vanessa-runner

  1. Таким же образом устанавливаем библиотеку add

  2. Также у вас уже должны быть установлены sqlcmd (поставляется вместе с MS SQL Server) и powershell (с включенной Windows политикой беспрепятственного запуска скриптов. Как включить на WIndows 10

6. Создание и настройка пайплайна в Jenkins

Теперь самое интересное — создать и настроить пайплайн, который и будет запускать по расписанию весь процесс сборки, начиная с копирования эталонных баз и заканчивая их тестированием и очисткой.

  1. В Веб-интерфейсе дженкинса переходим в меню New Item (Создать Item), заполняем произвольное имя в поле Enter an item name (Введите имя Item’а), я выбрал erp_features, выбираем тип скрипта — pipeline и нажимаем ОК
  2. В новом окне открывается конфиг пайплайна. Переходим к группе pipeline, в котором мы введем настройки подключения к репозиторию, в котором хранятся все исходники. Заполняем поля следующим образом:
  • Definition — pipeline script from SCM
  • SCM — git
  • Repository URL — https://github.com/ripreal/erp_features.git (или свой)
  • В группе Additional Behaviours нажимаем кнопку add и выбираем clean before checkout, чтобы автоматически очищать директорию сборки от предыдущих результатов.
  1. Все остальные параметры оставляем по-умолчанию и нажимаем Save

7. Первый запуск пайплайна

На самом деле мы не полностью настроили конфиг пайплайна, т.к. часть параметров конфига хранятся в Jenkinsfile — скрипте в удаленном репозитории,который мы указали в п.6. Поэтому чтобы донастроить пайплайн необходимо выполнить пробный запуск. Для этого:

  1. В Веб-интерфейсе дженкинса на главной странице переходим в наш пайплайн erp_features
  2. В открывшемся окне нажимаем Build (Собрать сейчас) в левой командной панели и наблюдаем процесс сборки. Сборка должна будет упасть — это нормально.
  3. Обновляем браузер через f5 и видим, что теперь у нас вместо кнопки Build появится другая кнопка Build with parameters (Собрать с параметрами) — это как раз то, что нам нужно.

8. Второй запуск пайплайна

Теперь самое время перейти в реальному запуску пайплайна. Для этого в меню с пайплайном erp_features нажимаем кнопку Build with parameters (Собрать с параметрами), которая появилась вместо Build (Собрать) и видим список параметров со значениями NULL, которые нам нужно заполнить. В качестве тестовой базы я выбрал серверную демобазу ERP. Рекомендую последовать моему примеру, т.к. пробный feature тест (здесь) написан для этой конфигурации. Отметим, что значения всех введенных параметров будут сохранены для следующих запусков пайплайна. Примечание — обязательно уберите из всех параметров значение NULL, иначе сборка при запуске будет ругаться. Если параметр не хотите заполнять, то оставьте его просто пустым:

  • jenkinsAgent — Нода дженкинса, на которой запускать пайплайн. Рекомендую на первое время ставить master. По умолчанию также стоит master
  • server1c — Имя сервера 1с, по умолчанию localhost
  • server1cPort — Порт рабочего сервера 1с. По умолчанию 1540. Не путать с портом агента кластера (1541)
  • serverSql — Имя сервера MS SQL. По умолчанию localhost
  • admin1cUser — Имя администратора с правом открытия внешних обработок (!) и с отключенной защитой от опасных действий для базы тестирования 1с. Должен быть одинаковым для всех баз.
  • admin1cPwd — Пароль администратора базы тестирования 1C. Должен быть одинаковым для всех баз
  • sqlUser — Имя администратора сервера MS SQL. Если пустой, то используется доменная авторизация
  • sqlPwd — Пароль администратора MS SQL. Если пустой, то используется доменная авторизация
  • templatebases — Список баз для тестирования через запятую. Например work_erp,work_upp
  • storages1cPath — Необязательный. Пути к хранилищам 1С для обновления копий баз тестирования через запятую. Число хранилищ (если указаны), должно соответствовать числу баз тестирования. Например D:/temp/storage1c/erp,D:/temp/storage1c/upp
  • storageUser — Необязательный. Администратор хранилищ 1C. Должен быть одинаковым для всех хранилищ
  • storagePwd — Необязательный. Пароль администратора хранилищ 1c

Теперь запускаем сборку и ждем ее полного выполнения. В идеале сборка должна выполниться успешно и отобразиться зеленым цветом. Если сборка упадет на каком-то из промежуточных шагов, то лезем в логи по кнопке Console Output (Вывод консоли) в левой панели, которая доступна, если провалится в саму сборку. Если пайплайн зависает на этапе запуска 1С-ых обработок (Этапы "Запуск 1с обработки на test_temp" и "Тестирование ADD"), то скорее всего внутри 1С всплыло какое-то модальное окошко, блокирующее дальнейшую работу.  Чтобы это проверить, запустите в 1С созданную в пайплайне копию базы в режиме предприятия и проследите, чтобы не всплывало никаких блокирующих окон.

Меняемся к лучшему 1 — Настройка slave ноды дженкинса

После установки дженкинса мы получаем одну master ноду, запущенную как системный процесс. Но в приличном jenkins обществе принято использовать master ноду только в качестве менеджера slave агентов, а не ка запускалку пайплайнов. Поэтому чтобы не создавать на нее лишнюю нагрузку и не вешать ее в случае какого-либо неоптимального кода, заводятся slave ноды.

Для нас необходимость второй ноды обсусловлена еще и сугубо утилитарными нуждами — для правильной работы нашего пайплайна требуется нода, запущенная не как служба, а как консольное приложение. Дело в том, что ADD запускается в среде 1С со всем полагающимся графическим интерфейсом. Если мы будем запускать ADD под master нодой, то мы просто не увидим процесс выполнения ADD тестов на нашей машине (хотя это не помешает успешному выполнению тестов) Для простоты развернем slave на той же машине, на которой запущен и master. Итак, наши шаги будут следующими:

  1. Разрешаем запуск слейв агентов в качестве консольных приложений. Для этого в веб-интерфейсе дженкинса переходим в меню Manage Jenkins (Настроить Jenkins) => Configure Global Security (Глобальные настройки безопасности) => Agents и в поле TCP port for JNLP agents меняем переключатель на Fixed (Статичный) и указываем порт, например 10001.
  2. Добавляем ноду. Для этого переходим в меню Manage Jenkins (Настроить Jenkins) => Manage Nodes (Управление средами сборки) и в левой командной панели нажимаем New Node (Новый узел), вводим имя, активируем переключатель Permanent Agent и жмем ок.
  3. Вводим параметр ноды:
  • Name — имя хоста (компьютера)
  • Remote root directory (Корень удаленной ФС) — произвольный путь к каталогу, в котором дженкинс будет выполнять пайплайны, например D:jenkins
  • Labels (Метки) — произвольное имя, по которому будем ссылаться на ноду в пайплайне. Рекомендую ставить такое же, как имя ноды.
  • Launch method (Способ запуска) — выбираем Launch agent via Java Web Start
  1. Жмем save

Теперь нужно поднять ноду:

  • В главном меню дженкинса в левой части должна появится иконка нашей новой ноды.

  • Кликаем на нее и смотрим на последнюю строчку. Это и есть командная строка запуска slave ноды.

  • Копируем командную строку и записываем ее в bat-ник, заодно скачиваем agent.jar по гиперссылке. Все это помещаем в каталог, который мы выделили ранее для slave дженкинса.
  • Добавляем строчку -Dfile.encoding=UTF-8  в строку запуска для правильной кодировки и запускаем bat-ник. Если все сделано правильно, то через пару секунд запустится консольная слейв нода.

  1. Самое время проверить работоспособность слейв ноды на нашем пайплайне. Для этого переходим к вводу входных параметров пайплайна, меняем параметр jenkinsAgent на label, который мы указали во время настройки ноды и запускаем пайплайн. В логах запущенной сборки можно увидеть, что пайплайн запустился на слейве

Меняемся к лучшему 2 — Установка nircmd для скриншотов в отчете allure

Чтобы лицензреть в allure вот такие вот полезные скриншоты при падении шагов теста, нам потребуется установить утилитку nircmd. Возьмем на карандаш также то, что снятие скриншотов будет работать только под slave нодой, запущенной в консольном режиме.

Для этого:

  • Скачиваем архив отсюда http://www.nirsoft.net/utils/nircmd.html
  • Запускаем из архива nircmd.exe под администратором и выбираем copy to windows directory
  • Проверьте, что через cmd.exe у нас появилась новая команда nircmd. Если все ок, то больше никакой настройки в дженкинсе для скриншотов не требуется

Меняемся к лучшему 3 — Создание расписания для пайплайна

Запуск по расписанию — отличная идея для автоматичеких ночных сборок. Так что приступим:

  1. В Веб-интерфейсе дженкинса на главной странице переходим в наш пайплайн erp_features
  2. В левой панели нажимаем Configure (Настройки) и ставим галочку Build periodically (Запускать периодически)
  3. Вводим расписание по формату CRON. Для того, чтобы запускать каждую ночь в 12 часов, достаточно ввести следующее выражение H 00 * * 1-7

Меняемся к лучшему 4 — Копаемся во внутренностях Jenkinsfile-а

Я всячески поощряю залезть в главный исполняемый скрипт нашего пайплайна и посмотреть как это работает своими глазамами. Jenkinsfile находится в корневом каталоге репозитория https://github.com/ripreal/erp_features.git. Скрипты в jenkins пишутся на очень простом процедурном языке groovy — ванильной надстройкой над java. При желании скрипт можно и нужно подтюнить. Подкину пару идей для улучшения:

  1. Сделать пайплайн более масштабируемым — вместо ручного ввода входных параметров, запрашивать их из внешних key-value storage-ов
  2. Добавить smoke тесты — делается аналогично шагу "Тестирование ADD"
  3. Отправлять уведомления и результаты выполнения сборок на почту или в корпоративный чат
  4. Добавит CD — финальным шагом пайплайна не просто запускать тесты, но и делать автосборку файла поставки проверенной конфигурации.

На этом у меня все. Осталось сказать, что данный туториал может пригодится не просто как средство, чтобы разобраться с автоматизацией ADD, но и как заготовка для построения собственного CI на ваших проектах. Собственно в моей команде мы используем схожий, но сильно продвинутый CI по подобию именно этого пайплайна.

## Благодарности

1. Артем Кузнецов (//infostart.ru/profile/64839/) — за архитектурную идею скрипта для пайплайна дженкинса

86 Comments

  1. morohon

    Подскажите пожалуйста, а java 1.8 обязательное требование? Заведется ли вся сборка на openJDK (учитывая нынешнюю лицензионную политику Oracle)

    Reply
  2. fishca

    Можно было просто ссыль на репу кинуть, зачет!

    Reply
  3. Pr-Mex

    Молодцы!

    Reply
  4. ripreal1

    (1) Я не пробовал, но думаю на openJDK будет также все работать.

    Reply
  5. artbear

    (0) Ух ты, как круто!

    Большое спасибо за статью и применение Ванесса-АДД 🙂

    Reply
  6. artbear

    (0) Одно но — в статье не увидел применение загрузчика пользовательских настроек — из json-файла или CONSUL

    в этом варианте не используете?

    Reply
  7. Somebody1

    Статья неплоха, но… как-то можно обойтись без фраз типа «првоерить работоспособность слейв ноды на нашем пайплайне»? Ну уши ведь в трубочку.

    Reply
  8. artbear

    (7) это обычные термины данной предметной области.

    для тех, кто в контексте Дженкинса или CI, все понятно 🙂

    Reply
  9. ripreal1

    (6) Да, это advanced техника, я не стал ее включать в туториал.

    Reply
  10. TODD22

    (8)

    «првоерить работоспособность слейв ноды на нашем пайплайне»

    «Проверить работоспособность подчинённого узла на нашем конвейере»

    Reply
  11. r2d255

    Что из софта требует именно 8.3.10? можно более ранней обойтись?

    Reply
  12. ripreal1

    (12)

    Требование не жесткое, я тестировал минимум на 8.3.10. Можно поэкспериментировать. Но надо быть готовым к тому, что что-то может пойти не так.

    Reply
  13. sm.artem

    Спасибо за интересный материал.

    У меня почему-то не сработала настройка кодировки UTF8, все-равно выводились «крякозябры».

    В итоге указал параметр через UTF-8 (поставил дефис). — после этого кириллические символы отображаются нормально.

    Не знаю с чем этом может быть связано, может версия Java, может Jenkins

    Reply
  14. ripreal1

    (14)

    Хорошо подмечено, я погуглил UTF-8 более предпочтителен. Поправил в статье.

    Reply
  15. sapervodichka

    Для более простых проверок, можно это использовать https://infostart.ru/public/1056811/

    Reply
  16. agent100

    Делаю по инструкции получаю ошибку https://yadi.sk/i/FGN48vQ0AGinGQ Win10 x64. Помогите понять что не так.

    Reply
  17. ripreal1

    (17)

    Это ошибка в коде пайплайна. Дело в том, что параметр -file, который ведет к скрипту drop_db.ps1 содержит пробелы, поэтому весь путь нужно оборачивать в кавычки, а я не оборачиваю. Я сейчас исправил этот момент в своем репозитории. Можно обновиться из него и должно заработать.

    Reply
  18. agent100

    Пересоздал пайплан, та ошибка ушла. Ругается на ошибку выполнения скрипта https://yadi.sk/i/jdcv9QbjHQvpxg разрешил неподписанные скрипты. Подскажите куда дальше копать.

    Reply
  19. ripreal1

    (19) Нужно разрешить политику запуска ps1 скриптов

    https://www.top-password.com/blog/change-powershell-execution-policy-in-windows-10/

    Reply
  20. agent100

    Получилось спасибо! Судя по сценарию он пытается скачать бэкап базы в рабочий каталог, при этом вываливается ошибка что нельзя создать файл. Как задать корректный каталог сохранения бэкапа базы?

    Reply
  21. ripreal1

    (21)Да, именно так. У каждой сборки в пайплайне есть свой рабочий каталог (WORKSPACE). Каталог бекапа базы задается автоматически и является относительным WORKSPACE/build/. Т.е. его вручную прописывать не надо. То что не создаются бекапы это странно. Возможно у дженкинса нет прав на этот каталог.

    Вообще желательно посмотреть логи

    Reply
  22. artkor

    Здравствуйте! Никак не получается побороть ошибку при создании тестовой базы в кластере

    22:04:56  [2019-06-16T19:04:56.538Z] ИНФОРМАЦИЯ — Creating server base with 1C…
    22:05:35  [2019-06-16T19:05:35.123Z] {Модуль C:Program Files (x86)OneScriptlibv8runnersrcv8runner.os / Ошибка в строке: 1212 / Ошибка создания ИБ: «Ошибка при выполнении операции с информационной базой
    22:05:35  [2019-06-16T19:05:35.123Z] Ошибка СУБД:
    22:05:35  [2019-06-16T19:05:35.123Z] Microsoft SQL Server Native Client 11.0: Login failed for user ‘SERVERUSR1CV8’.
    22:05:35  [2019-06-16T19:05:35.123Z] HRESULT=80040E4D, SQLSrvr: SQLSTATE=28000, state=1, Severity=E, native=18456, line=1
    22:05:35  [2019-06-16T19:05:35.123Z]
    22:05:35  [2019-06-16T19:05:35.124Z] «}

    Почему-то dbcreator.os не читает параметры «логи-пароль» от sql-базы, хотя в параметрах сборки они заданы.

    Когда стираю эти параметры по идее должна виндовая авторизация sql отработать, но сборка на 1-ом же шаге сваливается. Может кто сталкивался с таким?

    Reply
  23. ripreal1

    (23) Я не тестировал скрипт пайплайна, приведенный в статье на работу с windows-ой авторизациией sql сервера со стороны серевера 1С. Одна теоретически все должно работать т.к. у нас в команде в продакшене используется именно такой подход на схожем скрипте

    Чтобы работал пайплайн под доменной авторизацией:

    1) Входные параметры sqlUser и sqlPwd нужно оставить пустыми

    2) Нода дженкинса должна быть запущена под пользователем, имеющим право доменного входа в sql сервер

    3) Базы в кластере 1С должны создаваться без явного прописывания логина и пароля причем под любой машиной (даже если у доменного пользователя этой машины нет права на sql сервер)

    ПРоверьте, чтобы были соблюдены эти 3 условия

    Reply
  24. ms-des

    Возникла проблема с Allure, пайплайн отрабатывает, в логах:

    Report successfully generated to C:Program Files (x86)Jenkinsworkspace estallure-report

    Allure report was successfully generated.

    Creating artifact for the build.

    Artifact was added to the build.

    Но отчет пустой, причем если идти по ссылке 2, адрес будет через localhost(а не имя сервера) и ошибка «Попытка соединения не удалась».

    Правильно ли я понимаю, что за выгрузку отчета в формате Allure отвечает этап «Тестирование ADD» ?

    Reply
  25. ripreal1

    (25) Нет, отчет формируется на последнем этапе «Declarative: Post Actions». Конкретно за формирование отчета отвечает одна строка в Jenkinsfile:

    «allure includeProperties: false, jdk: », results: [[path: ‘build/out/allure’]]»

    Насчет localhost-а непонятно. Сам веб-интерфейс дженкинса (его главная страница и прочие разделы) доступна по имени или тоже через localhost?

    Что можно сейчас сделать — проверить, что в папке build/out/allure (которая находится относительно каталога сборки (см. каталог сборки в логах) была выгрузка папки allure. Если выгрузка есть, то сам отчет сформировался нормально, а проблема в адресе.

    Reply
  26. ms-des

    (26)

    Насчет localhost-а непонятно. Сам веб-интерфейс дженкинса (его главная страница и прочие разделы) доступна по имени или тоже через localhost?

    Веб-интерфейс доступен по имени, захожу с другой машины. А вот ссылка 2 — адрес к localhost.

    В папке build/out/allure есть 3 файла:

    Reply
  27. ms-des

    (27) + проблема с адресом решена, изменил в настройках Jenkins’a

    Reply
  28. agent100

    (22) Вот логи: https://yadi.sk/i/b6fvKgcTzc1b_Q

    Reply
  29. for_sale

    (11)

    Когда англы и саксы вторглись на территорию современных Британских островов, в их язык (ныне — английский) из местной культуры кельтов перешло всего несколько десятков слов. Потому что их культура и быт были богаче кельтов. Здесь то же самое — местное население не внесло в эту отрасль совершенно ничего, всё, что используется, придумано у загнивающих капиталистов. Более того, единственный язык программирования, работающий на местном языке, считается уделом низшей касты и осмеивается труЪ-программистами. Поэтому и терминология тут вся оттуда и ничего не изменится.

    Reply
  30. vlad.frost

    (0) классная статья! Только, похоже, забыли в разделе про настройку подчинённого узла указать, что в батник start.bat в строку запуска agent.jar надо бы добавить ключ

    -Dfile.encoding=UTF-8
    Reply
  31. Viktor_Ermakov

    У меня ошибка подключения куда то:

    22:46:09 [2019-06-27T19:46:09.202Z]

    22:46:09 [2019-06-27T19:46:09.202Z] D:jenkinsworkspaceerp_features>chcp 65001

    22:46:09 [2019-06-27T19:46:09.203Z] Active code page: 65001

    22:46:09 [2019-06-27T19:46:09.203Z]

    22:46:09 [2019-06-27T19:46:09.203Z] D:jenkinsworkspaceerp_features>powershell -file «D:jenkinsworkspaceerp_features/copy_etalon/drop_db.ps1» -server1c localhost -agentPort 1540 -serverSql localhost -infobase test_base_2 -user Администратор -sqluser sa

    22:46:13 [2019-06-27T19:46:13.464Z] server_addr=tcp://localhost:1540 descr=[::1]:1540:10061(0x0000274D): No connection could be made because the target mac

    22:46:13 [2019-06-27T19:46:13.464Z] hine actively refused it. ;

    22:46:13 [2019-06-27T19:46:13.464Z] 127.0.0.1:1540:10061(0x0000274D): No connection could be made because the target machine actively refused it. ;

    22:46:13 [2019-06-27T19:46:13.465Z] line=1056 file=srcDataExchangeTcpClientImpl.cpp

    22:46:13 [2019-06-27T19:46:13.465Z] At D:jenkinsworkspaceerp_featurescopy_etalondrop_db.ps1:28 char:5

    22:46:13 [2019-06-27T19:46:13.465Z] + throw $_.Exception.Message

    22:46:13 [2019-06-27T19:46:13.465Z] + ~~~~~~~~~~~~~~~~~~~~~~~~~~

    22:46:13 [2019-06-27T19:46:13.465Z] + CategoryInfo : OperationStopped: (server_addr=tcp…pClientImpl.cpp:String) [], RuntimeException

    22:46:13 [2019-06-27T19:46:13.465Z] + FullyQualifiedErrorId : server_addr=tcp://localhost:1540 descr=[::1]:1540:10061(0x0000274D): No connection could

    22:46:13 [2019-06-27T19:46:13.465Z] be made because the target machine actively refused it. ;

    22:46:13 [2019-06-27T19:46:13.465Z] 127.0.0.1:1540:10061(0x0000274D): No connection could be made because the target machine actively refused it. ;

    22:46:13 [2019-06-27T19:46:13.466Z] line=1056 file=srcDataExchangeTcpClientImpl.cpp

    22:46:13 [2019-06-27T19:46:13.466Z]

    Reply
  32. Fox-trot

    (32) стишки все писать умеют, ты вопросы лучше задавай

    Reply
  33. ripreal1

    (31)

    Спасибо, дополнил пунктик в статье

    Reply
  34. ripreal1

    (32) Скрипт не может подключиться к кластеру 1С по адресу localhost:1540. Возможно неправильно указан параметры пайплайна server1cPort и server1c.

    Reply
  35. VladCheSH

    Добрый день, скажите пожалуйста, не появляется кнопка «Собрать с параметрами», после обновления страницы.

    Подскажите, в чем может быть проблема?

    Reply
  36. ripreal1

    (36)

    Чтобы кнопка появилась нужно запустить сначала пайплайн по кнопке Собрать а потом обновить страницу. Если это не работает то можно добавить все необходимые параметры вручную в конфиге пайплайна Configure (Настройки) => галочка This project is parameterized (Проект параметризован) => Add parameter (Добавить параметр). Главное — с именами не ошибиться.

    Reply
  37. VladCheSH

    (37) Добрый день, добавил параметры, но сборка падает, не знаете в чем дело?

    hudson.plugins.git.GitException: Command «git.exe fetch —tags —force —progress origin +refs/heads/master:refs/remotes/origin/master —prune» returned status code 128:

    stdout:

    stderr: fatal: couldn’t find remote ref refs/heads/master

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:2042)

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandWithCredentials(CliGitAPIImpl.java:1761)

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.access$400(CliGitAPIImpl.java:72)

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl$1.execute(CliGitAPIImpl.java:442)

    at jenkins.plugins.git.GitSCMFileSystem$BuilderImpl.build(GitSCMFileSystem.java:351)

    at jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:198)

    at jenkins.scm.api.SCMFileSystem.of(SCMFileSystem.java:174)

    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:108)

    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:67)

    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:293)

    at hudson.model.ResourceController.execute(ResourceController.java:97)

    at hudson.model.Executor.run(Executor.java:429)

    Finished: FAILURE

    Reply
  38. ripreal1

    (38)

    Кажется несложная проблема. Указанный в конфиге пайплайна репозиторий на гитхабе либо не существует, либо он пустой, либо у него нет ветки master, либо неправильно указан сам путь к репозиторию

    Reply
  39. VladCheSH

    (39) Спасибо большое, проблема решилась перенастройкой параметров

    Reply
  40. VladCheSH

    (38) Вновь какая-то проблема, зависает, на данном этапе (см.скрин).

    Проверил модальные окна, ничего нет.

    Подскажите пожалуйста, что может быть не так?

    Reply
  41. ripreal1

    (

    (41) Это 100% модальное окно, которое выскакивает в процессе открытия внешней обработки ADD и загрузки фич. Чтобы понять проблему, нужно подключить отдельную слейв ноду дженкинса (в туториале описано), запустить пайплайн на ней и тогда все окна интерфейса 1С будут видимы в процессе запуска тестов и легко можно будет узнать точную проблему.

    Reply
  42. VladCheSH

    (42) Я сейчас добавил базу (test_…) в которую восстанавливается бэкап sql, и она пустая. Следовательно, никакого тестирования ADD не может быть…

    Но почему она пустая?

    Reply
  43. ripreal1

    (43)

    Надо смотреть в логах сборки причины. Логи полностью отработанного скрипта восстановления базы из бекапа выглядят так

    Reply
  44. VladCheSH

    (44) Вот, обрывается, на восстановлении, но без ошибки

    Reply
  45. ripreal1

    (45)

    Насторажет то, что скрипт выполянется в program files. Возможно нет полных прав, чтобы сохранить бекап. Нужно попробовать выполнить всю команду sqlcmd локально из командной строки. Там вывод должен быть более детальным. Если и это не поможет, то нужно будет открыть сам скрипт restore.sql и выполнить его в SQl server studio.

    Как правило один их вариантов позволит установить причину ошибки.

    Reply
  46. Viktor_Ermakov

    Очередная ошибка, не могу довести дело до конца))

    Не понятно почему не хочет соединяться с SQL

    Reply
  47. ripreal1

    (47) Проверку соединения делает скрипт sqlcmd. Открывайте детальные логи и смотрите какая именно команда и с какими параметрами выполняется перед выводом ошибки и пытайтесь ее выполнить через консоль.

    Reply
  48. VladCheSH

    (46)

    Так и не получилось запустить.

    Проверил bdd, в любой базе обработка запускается с ошибкой.

    Произвел opm update -all, но ошибку при открытии bdd, это не решило.

    Подскажите в чем может быть проблема?

    Reply
  49. ripreal1

    (49)

    Ну видно же из скрина — запуск обработки блокируется дурацкой защитой от опасных действий. Вообще при запуске не должно появляться никаких модальных окошек. В данном случае нужно выключить защиту от опасных действий в платформе. Это делает через параметр DisableUnsafeActionProtection=.* файла conf.cfg платформы 1с

    Reply
  50. Viktor_Ermakov

    Да тут вот ничего не понятно)

    Reply
  51. ripreal1

    (51)

    Нужно скопировать строку со скриптом sqlcmd и выполнить ее прямо из консоли виндовс. Тогда вывод консоли будет скорее всего на русском. Если это не помогает, то есть множество сервисов в интернете по распознаванию кривой кодировки

    Reply
  52. VladCheSH

    (50) Скажите пожалуйста, сборка упала, на этапе формирования отчета, со следующей ошибкой.

    Reply
  53. a_n_d_rey

    Зависает на этапе:

    C:Program Files (x86)Jenkinsworkspaceerp_features>oscript one_script_tools/dbcreator.os -server1c DellAndreyB:1541 -serversql DELLANDREYBSQLSERVER -base test_erp_demo2_5

    Созданы системные папки для базы «test_erp_demo2_5», но нет самих таблиц. В чем может быть причина?

    Reply
  54. ripreal1

    (55) Скорее всего нет прав у юзера в sql сервере. А на sql сервер что настроена доменная авторизация? Я бы предпочел использовать для начала самую простую парольную авторизацию с пользователем sa.

    Reply
  55. user1278443

    Здравствуйте, возникает ошибка: Различаются версии клиента и сервера (8.3.13.1690 — 8.3.14.1854). При этом в параметрах сборки указывал сперва 8.3.13.1690, вылетала данная ошибка, потом запускал версию 8.3.14.1854, но ошибка не уходила, как будто мое значение игнорируется, не подскажите с чем это может быть связано?

    Reply
  56. ripreal1

    (57)

    Данный пайплайн использует COM объекты. Ошибка в том, что на клиентской машине зарегистрирована компонента не той версии как на сервере.Нужно через regsvr32 зарегистрировать нужную компоненту comcntr.dll.

    p.s. на пайплайне в проде рекомендую переписать эту часть на RAS

    Reply
  57. user1278443

    (58)

    comcntr.dll

    А можно простыми словами или статейку? я — новичок, плохо понимаю именно часть с comcntr.dll

    Reply
  58. ripreal1

    (59) http://1clenta.ru/pattern/186

    Ох, чувствую Вам будет непросто сделать весь пайплайн зеленым

    Reply
  59. user1278443

    (60)

    спасибо, помогло, еще вопрос — как задать пароль, в котором присутствует %?

    думал можно просто во всех местах кода заменить sqlPwd на «Пар%оль», но он ругается(

    Reply
  60. user1278443

    (61)

    PS #k8SjZc9Dxk%%

    Reply
  61. ripreal1

    (62)

    Т.к. пайплайн использует множество разных скриптов, которые по-разному работают со спец. символами, то лучшая рекомендация — не использовать эти символы вообще. Мы у себя делаем именно так.

    Reply
  62. user1278443

    Как можно вот эту проблему решить?

    Installer «Extract *.zip/*.tar.gz» cannot be used to install «allure» on the node «Jenkins»

    Reply
  63. user1278443

    (63)

    вы же в командную строку записываете пароль => там проблема может возникнуть с интерпретацией cmd, а для нее можно сделать вот так #k8SjZc9Dxk%%. Это так, для будущих поколений

    Reply
  64. ripreal1

    (64) Я не сталкивался с такой проблемой. Гугл в помощь.

    Reply
  65. user1278443

    что можно сделать с ошибкой — неизвестный идентификатор плагина(ЗагрузчикПользоательскихНастроек)? сразу замечу, я гуглил, решение, например, убрать защиту от опасных действий, но толку 0

    Reply
  66. user1278443

    (67)

    config тоже подправил

    Reply
  67. user1278443

    (67)

    ошибка возникает когда открывается менеджер тестирования

    Reply
  68. ripreal1

    (67)

    Проблема в том, что ADD не находит путь к своимх плагинам. Путь к плагинам должен быть прописан в поле Каталог инструментов на вкладке Сервис.

    Скорее всего вручную прописать его не получится (т.к. он и является плагином ЗагрузчикПользоательскихНастроек, который не может загрузиться). Лучше всего сбросить настройки ХранилищаСистемныхНастроек, где их хранить ADD.

    Например, выполнить команду в базе

    ХранилищеОбщихНастроек.Удалить(«VanessaBehaviorUF»,,ИмяПользователя());

    Если не поможет, то лучше использовать другую баузу для тестов

    Reply
  69. Prometeus2011

    Здравствуйте!

    Никогда не интересовался ранее сценарным тестированием, однако, появилась необходимость в оном на обычных формах.

    В этой связи вопрос: среда позволяет производить тестирование на обычных формах или нет (дабы не копать вопрос глубже без необходимости).

    Спасибо!

    Reply
  70. ripreal1

    (71)

    В целом да, но пайплайн приведенный в туториале — нет. Тестирование обычных форм делается через дымовые тесты с помощью обработки xUnitFor1c. Но это большая тема для отдельной статьи.

    Reply
  71. nagaitseff

    День добрый!

    Что только не делал по статье и ссылкам, вывод один и тот же:

    File C:Jenkinsworkspaceerp_featurescopy_etalondrop_db.ps1 cannot be loaded

    The file C:Jenkinsworkspaceerp_featurescopy_etalondrop_db.ps1 is not digitally signed. You cannot run this script on the current system.

    Подскажите как запустить пожалуйста!

    Reply
  72. sapervodichka

    Для простых проверок регулярных тараканов в новых обновлениях ЕРП я этим пользуюсь https://infostart.ru/public/1056811/. Сценарное тестирование делает фокус группа заказчика. Переписывать код своих интеграций в методологию 1С все равно приходится от релиза к релизу, т.к. группу разработчиков предыдущей ветки ЕРП 1С «расстреливает», на её смену приходит другая со своими новыми идеями и новой методологией.

    Reply
  73. ripreal1

    (73)

    Из описание видно, что ошибка связана с запуском powershell скрипта drop_db.ps1 . А точнее с политикой безопасности на компьютере. У меня такой никогда не было, но вопрос легко гуглится

    http://tritoneco.com/2014/02/21/fix-for-powershell-script-not-digitally-signed/

    https://stackoverflow.com/questions/9742775/why-is-my-locally-created-script-not-allowed-to-run-under-the-remotesigned-execu

    Reply
  74. nagaitseff

    (75) делал все вышесказанное и находил все еще вчера, никак.

    Стоит Windows Server R2 2012, доменная политика.

    Reply
  75. nagaitseff

    (75) У нас, как выяснилось, даже имея админскую учетку, не возможно исполнить скрипт, запрещено групповой политикой.

    Попросил админа, он подписал скрипт. Скрипт начал выполнятся, но теперь другая ошибка: Cannot open backup device ‘C:Jenkinsworkspaceerp_features/build/temp_nagerp_b_20191001­000′. Operating system error 3(The system cannot find the path specified.).

    Есть ли возможность самому указать куда делать бэкап и откуда его потом брать? Как это сделать?

    Дело еще в том, что SQL сервер находится на другом класстере!

    Reply
  76. nagaitseff

    (75) добавил свой параметр в файл jenkins, по ветке отравил вам в репозиторий.

    если база находится на другом класстере, то получается он автоматически ищет путь не на машине где дженкинс, а на сервере SQL.

    теперь все работает. Единственно, что путь надо указать с обратным слешем не например: s:BackupSQL, а s:/BackupSQL

    Есть еще вопрос, а как сделать чтобы созданная нами нода автоматически запускалась при начале выполнения pipiline???

    Reply
  77. nagaitseff

    Файлы архивов постоянно накапливаются (по сути они не нужны), как удалять сделанные архивы с помощью ваших инструментов?

    Reply
  78. ripreal1

    (78)

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

    Reply
  79. ripreal1

    (79) Какие архивы? Имеете в виду бекапы баз? У нас на проде используется отдельная функция, которая удаляет бекапы на последнем этапе выполнения пайплайна. Вот такая:

    // Удаляет бекапы из сетевой шары
    //
    // Параметры:
    //  utils — экземпляр библиотеки Utils.groovy
    //  backup_path — путь к бекапам
    //
    def clearBackups(utils, backup_path) {
    echo «Deleting file ${backup_path}…»
    returnCode = utils.cmd(«oscript ${env.WORKSPACE}/one_script_tools/deleteFile.os -file ${backup_path}»)
    if (returnCode != 0) {
    echo «Error when deleting file: ${backup_path}»
    }
    }
    

    Показать

    Но эту функцию я не включил в пайплайн, который в туториале.

    Reply
  80. nagaitseff

    (81)

    ил в пайплайн, который в туториале.

    да все верно, а как ее включить в пайплайн? подскажите пожалуйста, только начал во всем этом разбираться, пока никак не получается толком.

    Интересны еще два шага:

    Отправлять уведомления и результаты выполнения сборок на почту или в корпоративный чат

    Добавит CD — финальным шагом пайплайна не просто запускать тесты, но и делать автосборку файла поставки проверенной конфигурации.

    Как их реализовать?

    Спасибо.

    Reply
  81. nagaitseff

    (80) а если запуск производится по расписанию из Jenkins? Получается сначала должна запустится нода как процесс а потом задание, я правильно понял?

    И почему-то скиншоты только черный квадрат малевича и все.

    Reply
  82. ripreal1

    (82)

    Могу сказать что с дженкинсом все перечисленное можно реализовать. Нужно только почитать пару туториалов по синтаксису groovy в интернете.

    Reply
  83. nagaitseff

    (84) Спасибо, буду копать.

    Подскажите еще вот что, как запустить созданную ноду автоматически?

    Как она будет запускаться, когда например начнет отрабатывать задание Дженкинс?

    И скрины получаются «квадрат малевича», как решить этот ньюанс?

    Reply
  84. ripreal1

    (85) Самый базвый вариант — поместить bat-ник со скриптом запуски ноды в автозагрузку ОС. Нода запуститься при старте ОС и будет активно все время. Ей не нужно отдельно запускаться при старте сборки в дженкинсе.

    С черными скриншотами сталкивались. Чтобы скриншоты работали сборка должна выполняться не на мастере, а на слейв ноде дженкинса. Также по дефолту используется nircmd для снятие скриншотов. Для этой же цели можно использовать и другие утилиты. Подробнее здесь https://infostart.ru/public/1010127/

    Reply
  85. lemonline

    Запускаю сборку. Когда конвейер доходит до выполнения bat-cкрипта зависает намертво.

    В логах примерно такое..

    14:39:10 Running in D:TestsJenkinsslaveworkspaceЕКuild

    [Pipeline] {

    [Pipeline] writeFile

    [Pipeline] }

    [Pipeline] // dir

    [Pipeline] }

    [Pipeline] // script

    [Pipeline] }

    [Pipeline] // timestamps

    [Pipeline] }

    [Pipeline] // stage

    [Pipeline] stage

    [Pipeline] { (Запуск)

    [Pipeline] timestamps

    [Pipeline] {

    [Pipeline] script

    [Pipeline] {

    [Pipeline] parallel

    [Pipeline] { (Branch: updateTask_autotest13)

    [Pipeline] stage

    [Pipeline] { (Загрузка из хранилища autotest13)

    [Pipeline] timestamps

    [Pipeline] {

    [Pipeline] bat — строка где завис

    т.е любой бат-запуск останавливается на этой строке…

    Есть версия почему так происходит?

    Reply
  86. ripreal1

    (87) Причина по логу непонятна. Нужно попробовать запустить этот батник вручную. Параметры запуска можно посмотреть в логе.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *