Кто-нибудь управляет непрерывной интеграцией с TeamCity, FinalBuilder и Mercurial (Kiln)?

Возможный дубликат:
непрерывный Стек интеграции в Windows с Mercurial + Mercurial Queues?

Если да, то как выглядит ваш процесс сборки?

Мне трудно (в основном из-за отсутствия у меня опыта/понимания всех трех инструментов) заставить TeamCity запускать мои сценарии FinalBuilder. Прямо сейчас у меня есть FinalBuilder, управляющий всеми проверками системы управления версиями, а TeamCity в основном просто запускает сценарий FinalBuilder и читает результаты теста NUnit, но он не работает из-за ошибок аутентификации при выполнении команд mercurial для печи.


person Jon Erickson    schedule 09.03.2010    source источник


Ответы (2)


Если вы установили Kiln Client на машину, на которой запущен ваш скрипт FinalBuilder, у вас будет доступ к меркуриальному расширению kilnath, которое должно решить эту проблему за вас.

Просто войдите на машину сборки как пользователь, запускающий сценарий FinalBuilder, и вручную выполните одну команду push или pull из репозитория Mercurial, который вы пытаетесь использовать, вам будет предложено пройти аутентификацию. Выполните аутентификацию один раз, и расширения Kiln Client запомнят эту аутентификацию для этого пользователя... и любые последующие запуски скрипта FinalBuilder должны пройти аутентификацию без проблем.

Это решает проблему для вас? Это лучшее решение, поскольку оно не хранит имя пользователя или пароль на вашем компьютере. Очевидно, есть и другие возможности, такие как изменение пути вашего Mercurial для использования формата http://{имя пользователя}:{пароль}@{URL-адрес печи}... но это не так красиво и безопасно, как метод, описанный выше.

Имеет ли это смысл?

person kamens    schedule 10.03.2010
comment
Нам не удалось заставить это работать с TeamCity, но следуя совету jetbrains.net/devnet/ thread/286891, казалось, исправил это... - person Byron Ross; 27.04.2010

Я ничего не знаю о Kiln, но я только начал работать в VSoft и работаю над действием Mercurial для следующей версии FinalBuilder. Надеюсь, что-то из этого поможет.

Вы выполняете аутентификацию через SSH или SSL? Можете ли вы вытащить/направить в репозиторий из командной строки? Почти все, что вы можете заставить работать из командной строки, должно быть возможно с FinalBuilder.

Для аутентификации в BitBucket через SSH я сделал следующее:

  • скачать puttygen и конкурс
  • создайте новый ключ SSH в puttygen
  • добавить закрытый ключ в конкурс
  • добавить открытый ключ в BitBucket

Оттуда я могу успешно

hg push ssh://[email protected]/user/repo

NB, у меня также установлен TortoiseHG, а Mercurial использует TortoisePlink в качестве ssh-клиента.

Если вы используете SSL, вы можете сохранить комбинацию имени пользователя и пароля в своем действии FinalBuilder. Чтобы превратить поле TextEdit в поле пароля, измените свойство PasswordChar с #0 на *. Затем в событии ReadData добавьте что-то вроде

Page.tbPassword.Text = DecryptString(Properties.PropertyAsString("Token"));

а в событии WriteData добавить

Properties.PropertyAsString("Token") = EncryptString(Page.tbPassword.Text);

Когда вы добавляете свойство Token в действие, отметьте параметры Property is Hidden from Action Inspector и Property is Read Only in Action Inspector.

Чтобы сгенерировать строку репозитория, вам нужно сделать что-то подобное в событии GetCommandLine действия:

var repo = Context.Properties.PropertyAsString("Repository");
var username = Context.Properties.PropertyAsString("Username");
var password = DecryptString(Context.Properties.PropertyAsString("Token"));
var repo = "ssh://" + username + ":" + password + "@" + repo;

CommandLine.AddArgument("push", repo, qtNone);

NB, я не тестировал этот код, но, надеюсь, он даст вам представление.

person Ben Hughes    schedule 10.03.2010