Наверное, многие используют такой замечательный опен-сорсный проект CruiseControl.net для реализации практики разработки ПО, называемой «непрерывная интеграция». О том, как его настроить, есть много статей, в том числе и на хабре: тыц, тыц и тыц. После сборки «особых» билдов часто стоит задача уведомления получателей об этом событии, для чего чаще всего используется инструмент CCTray или встроенный Task “email” – я же хочу поделиться туториолом о том, как сделать собственный плагин task на примере посылке сообщения по Skype.
Skype4COM
Нынче, с установкой Skype, на ваш компьютер попадает библиотека Skype4COM (уже зарегистрированная через regsvr32 и лежит, как правило, в C:Program Files (x86)Common FilesSkype). Всё, что нужно сделать, чтобы начать работать со Skype программно — это создать проект и на вкладке Add referenceCOM найти «Skype4COM Type Library 1.0” и добавить. Далее следует код:
Skype = new Skype();
Skype.Attach(6, true); //здесь вы должы в открытом skype разрешить выполнение
Skype.SendMessage(“%skype.name%”, “hello!”);
CC.NET Plugin
Для того, чтобы написать плагин, достаточно всего лишь зареференсить несколько сборок
и отнаследоваться от TaskBase (либо реализовать ITask).
[ReflectorType("skype")]
public class SkypeTask : TaskBase
{
[ReflectorProperty("recipients")]
public string Recipients { get; set; }
[ReflectorProperty("message")]
public string Message { get; set; }
private static readonly Skype Skype = null;
static SkypeTask()
{
Skype = new Skype();
Skype.Attach(6);
}
protected override bool Execute(IIntegrationResult result)
{
Skype = new Skype();
Skype.Attach(6, true);
if (result.Status == IntegrationStatus.Unknown) return false;
result.BuildProgressInformation.SignalStartRunTask(!string.IsNullOrEmpty(Description) ? Description : "Skyping ...");
foreach (var recipient in Recipients.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries))
{
if (!string.IsNullOrEmpty(Message))
{
Skype.SendMessage(recipient, Message);
}
}
return true;
}
}
Это пример самой простой реализации задачи (не забудьте на билд-сервере поставить скайп, завести отдельную учетку и добавить в контакты нужных людей).
После сборки плагина (я собирал с TargetFramework=3.5) его необходимо положить в папку с плагинами, которая по-умолчанию находится в папке server и перезапустить сам сервис CC.NET.
Теперь откроем конфигурацию нашего проекта и добавим такую строку
<skype Message=”Hi, here is a new build of ${Project.Name} ${Project.Version} that can be found here: ${Build.Path}” Recipients=”user1;user2;user3;”/>
И при следующей сборке билда мы получим уведомление по Skype с ссылкой на сам билд (это может быть FTP и т.п.).
Заключение
Вот так быстро можно написать плагины для CC.NET, больше информации о том, как расширить CC.NET можно найти на соответствующем ресурсе. Для примера, я хотел ещё реализовать посылку самого билда через Skype, но к сожалению не нашёл как (можно только инициировать открытие диалога выбора файла).
PS: Если есть интерес — могу более подробно рассказать о том, как настроить CruiseControl.NET + Git + Jira + тестирование на эмуляторе (для Windows Phone).
Автор: Nagg