CruiseControl.Net: уведомляем о билдах по Skype

в 12:10, , рубрики: .net, continuous integration, skype, Программирование, тестирование, метки: ,

Наверное, многие используют такой замечательный опен-сорсный проект 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

Для того, чтобы написать плагин, достаточно всего лишь зареференсить несколько сборок
image
и отнаследоваться от 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js