1C+TeamCity+PowerShell. Записки начинающего

После прохождения тренинга “Разработка по промышленным стандартам” начал развертывание у себя в конторе связки TeamCity и 1С. Здесь буду оставлять свои комментарии и проблемы, с которыми столкнулся при автоматизации этой связки. В качестве скриптового движка выбрал 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? Каков вообще у вас типовой сценарий шагов?

Извиняюсь, что долго не отвечал. Был в далеке от компьютера.
Я пока только тренируюсь и пытаюсь сделать “ночные сборки”, которые состоят из следующих шагов:

  1. Выгрузить последнюю cf из репозитория в папку \Projects\NightBuilds<дата_билда>\
  2. Создать по этому cf базу
  3. Пройтись в этой базе встроенным контролем конфигуратора
  4. Запустить тесты (которых пока вообще нет и в этом главная беда)

Почему не делаю “по правильному”: не собираю cf из последних исходников репозитория? На это меня сподвигла 1С со своими подставами. Дело в том, что при загрузки “в ручную” конфигурации из исходных файлов в конце появляется модальное окошко со списком каких-то малозначимых предупреждений, нажав “Продолжить” в котором далее все успешно загружается. Когда все это делаю из командной строки, то ес-но процесс, запущенный из TeamCity тупо висит и ждет. И обойти это я не знаю как.
Также 1С сделала еще одну подлянку: при встроенной проверке (ключ /CheckConfig), если в конфигурации есть запароленные модули, то процесс также залипает, потому что в ручном режиме вываливается модальное окошко с просьбой ввести пароль на модуль. Самое интересное, что при выгрузке конфы в исходные файлы никаких паролей не спрашивает :wink:

На самом деле у меня вопросов больше чем знаний в этом деле )

Еще была небольшая проблема с тем, чтобы устанавливать номер билда = номеру билда 1С. Я нашел только 2 пути как это сделать и оба с помощью Tool1CD:

  1. Выгрузить последнюю cf из репозитория 1С и по имени файла определить текущую версию
  2. Выгрузить табличку Version в XML и из этого файла взять запись с максимальным Vernum
    На моем репозитории получилось, что первая операция занимает меньше времени (у меня больше 5000 помещений, а размер cf ~80 Мб)

А как делаете вы?

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

Я не ставил себе такую цель.
Я сейчас делаю выгрузку cf в гит, потом ночная сборка собирает cf из исходников и прогоняет тесты. В прототипе это работает. Жду, когда нам выделят свой билд сервер, чтобы всё это запустить в реале.

Тут новые приключения подкинула 1С.
Платформа 8.3.5.1248
Конфигурация "Бухгалтерия предприятия, 3.0.37.25"
При выгрузке конфигурации в файлЫ программа аварийно завершает свою работу.

Так что пока сижу без git-исходников. Ошибку в 1С отправил, но ответа пока нет.

dump пока неизвестен ?

Не понял. Как-то поможет дамп падения 1С? Кому? В 1С отправлять?
Ошибка легко воспроизводится.

Извини поторопился: я имел ввиду dump как описание ошибки и способ воспроизведения.

Все как бы просто:

  1. Устанавливаем последнюю платформу 8.3.5.1248
  2. Загружаем последнюю бухгалтерию 3.0.37.25
  3. Выгружаем конфигурацию в файлы.
    Вылет

Появился ответ от 1С?

Вот такое письмо мне прислали 24.12.2014

Здравствуйте!
Ваше обращение зарегистрировано под номером SW891516 / 2.
Пожалуйста, в тексте следующих обращений на эту же тему ссылайтесь на этот номер.

Коллеги, спасибо за сообщение.
Ваше сообщение переадресовано в отдел разработки. Ответ вам будет выслан позже.

На сайте https://bugboard.v8.1c.ru/ поиск ошибки по коду SW891516 говорит, что заявка отклонена. Не знаю что думать. Подождем до конца праздников

Последние новости.
Исправлено в платформе 8.3.5.1400. Но она тестовая. Прогнал у себя, вроде бы не вылетает.
Поставлю ее только для разборки.

По моей 30010599 - насчет загрузки ролей - появилась детализация, что будет исправлено в 8.3.6