После прохождения тренинга “Разработка по промышленным стандартам” начал развертывание у себя в конторе связки TeamCity и 1С. Здесь буду оставлять свои комментарии и проблемы, с которыми столкнулся при автоматизации этой связки. В качестве скриптового движка выбрал PowerShell.
1C+TeamCity+PowerShell. Записки начинающего
Русские символы в build log отображаются некорректно
Если в скрипте PowerShell сделать:
echo "Здесь любая строка на кириллице"
и выполнить его в шаге сборке, то в build log можно увидеть примерно такое:
‚лЇ®«ҐЁҐ Є®¬ ¤л Ґў®§¬®¦® ўб«Ґ¤бвўЁҐ б«Ґ¤го饩 ®иЁЎЄЁ: ЌҐ г
Лечится это добавлением в файл настроек агента <TeamCity Agent Home>/conf/buildagent.properties
следующей строчки:
teamcity.runner.commandline.stdstreams.encoding=IBM866
Передача длинных строк из скриптов Powershell в Teamcity через echo (Write-Output)
Как известно из скриптов можно передавать спец. сообщения в Teamcity (устанавливать переменные, выводить ошибки и т.п). Но если делать вывод сообщений из скриптов при помощи метода Write-Output (echo), то могут возникнуть проблемы. Проблемы возникают если строка-параметр в echo будет большая. Например я хотел установить переменной val1 путь к новой сборки:
echo "##teamcity[setParameter name = 'val2' value='e:\Projects\XXX\NightBuilds\v6026.cf"
На что в build log увидел следующее:
[14:31:03][Step 1/1] ##teamcity[setParameter name = 'val2' value='e:\Projects\XXX\NightBuilds\v6026. [14:31:03][Step 1/1] cf']
Т.е. строка разбилась на две и установки переменной не произошло.
Чтобы такого не происходило надо вместо метода Write-Output (echo) использовать Write-Host
А как сообщать процент выполнения задачи? Можно ли в xUnitFor1C для тестов выводить с некоторой периодичностью процент выполненных тестов?
TemCity сам “на основе предыдущего времени выполнения задачи” расчитывает оставшейся время и текущий процент. Он конечно плавает - но ситуацию отражает.
Однако есть хитрость.
Для длинный задач - можно на стороне сборочного скрипта реализовывать блоки сборки обрамляя их сообщениями
##teamcity[progressStart '<message>']
...some build activity...
##teamcity[progressFinish '<message>']
Логическое разделение остается на совести создателя сборочного плана
А были-ли какие-либо подводные камни, не связанные конкретно с Powershell? Возможно, был (есть) сценарий сборки/развертывания, который пришлось воплощать бубном и плясками вокруг TeamCity? Каков вообще у вас типовой сценарий шагов?
Извиняюсь, что долго не отвечал. Был в далеке от компьютера.
Я пока только тренируюсь и пытаюсь сделать “ночные сборки”, которые состоят из следующих шагов:
- Выгрузить последнюю cf из репозитория в папку \Projects\NightBuilds<дата_билда>\
- Создать по этому cf базу
- Пройтись в этой базе встроенным контролем конфигуратора
- Запустить тесты (которых пока вообще нет и в этом главная беда)
Почему не делаю “по правильному”: не собираю cf из последних исходников репозитория? На это меня сподвигла 1С со своими подставами. Дело в том, что при загрузки “в ручную” конфигурации из исходных файлов в конце появляется модальное окошко со списком каких-то малозначимых предупреждений, нажав “Продолжить” в котором далее все успешно загружается. Когда все это делаю из командной строки, то ес-но процесс, запущенный из TeamCity тупо висит и ждет. И обойти это я не знаю как.
Также 1С сделала еще одну подлянку: при встроенной проверке (ключ /CheckConfig), если в конфигурации есть запароленные модули, то процесс также залипает, потому что в ручном режиме вываливается модальное окошко с просьбой ввести пароль на модуль. Самое интересное, что при выгрузке конфы в исходные файлы никаких паролей не спрашивает
На самом деле у меня вопросов больше чем знаний в этом деле )
Еще была небольшая проблема с тем, чтобы устанавливать номер билда = номеру билда 1С. Я нашел только 2 пути как это сделать и оба с помощью Tool1CD:
- Выгрузить последнюю cf из репозитория 1С и по имени файла определить текущую версию
- Выгрузить табличку Version в XML и из этого файла взять запись с максимальным Vernum
На моем репозитории получилось, что первая операция занимает меньше времени (у меня больше 5000 помещений, а размер cf ~80 Мб)
А как делаете вы?
Так вроде при запуске из командной строки есть ключ, подавляющий эти сообщения.
/DisableStartupMessage
Пробовал?
Я не ставил себе такую цель.
Я сейчас делаю выгрузку cf в гит, потом ночная сборка собирает cf из исходников и прогоняет тесты. В прототипе это работает. Жду, когда нам выделят свой билд сервер, чтобы всё это запустить в реале.
Тут новые приключения подкинула 1С.
Платформа 8.3.5.1248
Конфигурация "Бухгалтерия предприятия, 3.0.37.25"
При выгрузке конфигурации в файлЫ программа аварийно завершает свою работу.
Так что пока сижу без git-исходников. Ошибку в 1С отправил, но ответа пока нет.
dump пока неизвестен ?
Не понял. Как-то поможет дамп падения 1С? Кому? В 1С отправлять?
Ошибка легко воспроизводится.
Извини поторопился: я имел ввиду dump как описание ошибки и способ воспроизведения.
Все как бы просто:
- Устанавливаем последнюю платформу 8.3.5.1248
- Загружаем последнюю бухгалтерию 3.0.37.25
- Выгружаем конфигурацию в файлы.
Вылет
Появился ответ от 1С?
Вот такое письмо мне прислали 24.12.2014
Здравствуйте!
Ваше обращение зарегистрировано под номером SW891516 / 2.
Пожалуйста, в тексте следующих обращений на эту же тему ссылайтесь на этот номер.
Коллеги, спасибо за сообщение.
Ваше сообщение переадресовано в отдел разработки. Ответ вам будет выслан позже.
На сайте https://bugboard.v8.1c.ru/ поиск ошибки по коду SW891516 говорит, что заявка отклонена. Не знаю что думать. Подождем до конца праздников
Последние новости.
Исправлено в платформе 8.3.5.1400. Но она тестовая. Прогнал у себя, вроде бы не вылетает.
Поставлю ее только для разборки.
По моей 30010599 - насчет загрузки ролей - появилась детализация, что будет исправлено в 8.3.6