Заметки консультанта

Шамрай Александр Владимирович

Как синхронизировать GIT репозитории между TFS, VSTS и GitHUB

Posted by Shamrai Alexander на Январь 17, 2018

<< Перейти в раздел «Team Foundation Version Control FAQ»

Интересная статья по синхронизации TFS 2015, VSTS и GitHub через сервис сборки: https://blogs.microsoft.co.il/leonj/2017/01/24/synchronizing-tfs-2015-and-vsts-with-github/

Реклама

Posted in Microsoft, Team Foundation Server FAQ, Version Control FAQ, Visual Studio | Отмечено: , , , | Leave a Comment »

Salma for Word v2.0.4

Posted by Shamrai Alexander на Декабрь 21, 2017

Выпустил очередное обновление для  Salma for Word: https://github.com/ashamrai/Salma/releases/tag/v2.0.4

Что нового:

1. Отказ от использования TFS Object Model в сторону Microsoft Team Foundation Server Extended Client. Это позволило обеспечить простую поддержку Visual Studio Team Services.

2. Добавлена функция для «устаревания» рабочих элементов. Очень часто возникает вопрос: что делать, если требование устарело? С точки зрения TFS/VSTS можно выполнить следующие шаги:

  • Просто перевести требование из закрытого состояния в активное. Но это в свою очередь «подтягивает» все ссылки, которые есть в требовании, допустим, уже закрытые работы, что будет потом отображаться в планах.
  • Можно выполнить копирование требования стандартными функциями, но в этом случае, если была декомпозиция требования на дочерние, связи не будут перенесены. А также необходимо как-то пометить требование источник, что оно уже не актуально.

Поэтому из инструмента можно выполнить:

  • Копирование требования со всем содержимым в новое требование.
  • Перенести или скопировать необходимые ссылки в новое требование.
  • Пометить старое требование в его наименовании и/или с помощью тега.
  • Сохранить ссылку на требование источник.

obs_req

3. Автоматически связывать требование и документ. Если документ, находится в сетевом доступе, то можно выполнить настройку, чтоб при создании нового требования, автоматически вставлял ссылка на документ, в котором это требование «родилось». Соответственно, из требования всегда можно открыть документ-источник и просмотреть его контекст.

Posted in Microsoft, Team Foundation Server, Visual Studio | Отмечено: , , , , | Leave a Comment »

Вебинар «Организация конвейера по производству ПО на основе VSTS» — Видео

Posted by Shamrai Alexander на Декабрь 13, 2017

Видео

Презентация

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , | Leave a Comment »

Быстрое создание проектов VSTS с подготовленной инфраструктурой в Azure

Posted by Shamrai Alexander на Ноябрь 15, 2017

Подготовка инфраструктуры для каждого нового проекта разработки ПО зачастую включает в себя рутинные и типовые шаги, которые можно выделить в определенную последовательность и автоматизировать. По этому пути и пошли разработчики Microsoft, и создали мастер создания проектов DevOps. Т.е. если мы имеем подписку в Azure, то каждый новый проект уже может в себя первичную инфраструктуру в виде проекта в VSTS, настроенной сборки непрерывной интеграции, непрерывного развертывания и т.д. Шаги как это можно сделать:

1. Найти в Azure необходимый сервис, который пока в режиме предварительной работы:

2. Выбрать создание нового проекта

3. Далее выбираем базу, на основе которой будет создано приложение.

4. Выбрать тип необходимого решения

5. Выбрать платформу, на основе которой будет в дальнейшем выполняться развертывание нашего решения:

6. Ну и на заключительном шаге мы указываем необходимые данные об учетной записи и записи VSTS, а также где разворачивать ресурсы и название проекта.

Что мы в результате получаем?

1. Сразу после окончания мастера нам открывается некая цифровая панель DevOps проекта, которая содержит сводную информацию и быстрые ссылки.

2. В учетной записи VSTS появляется новый командные проект с первым приложением, которое по необходимости мы можем развивать или удалить и создать новое.

3. Также появляется сборка с настроенной непрерывной интеграцией:

4. Дополнительно создается определение релиза, которое уже связанно со сборкой для обеспечения непрерывного развертывания.

5. Также данное определение релиза имеет предварительно указанные и готовые шаги (шаг) для развертывания решения в необходимой среде:

6. При этом сразу выполняется первый прогон всей цепочки – комит, сборка и развертывание.

7. Само же решение мы также можем найти в своей подписке Azure.

8. Ну а также уже присутствует интеграция с Application Insights, которое позволяет нам отслеживать, как работает наше решение, какие запросы оно делает, какие «летят» исключения и тд.

Posted in Microsoft, visual studio team services | Отмечено: , , , | Leave a Comment »

Ссылки на рабочие элементы в Wiki

Posted by Shamrai Alexander на Октябрь 3, 2017

Октябрьское обновление для vsts содержит новую интересную возможность для страниц Wiki, которая позволяет ссылаться на конкретные рабочие элементы в проекте. Т.е. это позволяет быстро формировать заметки к выпускаемым релизам со списком попавших в него новых возможностей и исправлений, можно также использовать в обзоре итерации, а также любых других документах, например, онлайн руководствах, для того, чтобы было понятно почему они изменились (добавилась или была удалена какая-то возможность на основе запроса от заинтересованного лица). Использовать такую возможность просто, нужно ввести символ # и добавить идентификатор рабочего элемента. При этом появляется список, который позволяет выбрать необходимый рабочий элемент:

Результирующий вид будет примерно следующим:

При этом вставленные элементы являются кликабельными, чтобы можно было посмотреть детали интересующего рабочего элемента. Конечно, было б еще полезным добавить возможность указать поле, которое я хочу видеть в wiki. Это позволило б сформировать какую-то спецификацию требований, например, в виде списка или таблицы названий требования и их текста. Но будем надеяться, что это появится в будущем.

Кроме этого, не забываем, что такие же ссылки можно использовать в обсуждениях на форме рабочего элемента:

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , , , , | Leave a Comment »

Определение устаревших ветвей в хранилище версионного контроля GIT в VSTS

Posted by Shamrai Alexander на Сентябрь 7, 2017

Количество создаваемых ветвей в проекте может быть разным. Зависит это от количества участников проекта и декомпозиции на команды, от количества поддерживаемых возможностей разрабатываемого продукта, частоты выпуска и длительности поддержки новых версий. Когда создается много ветвей, рано или поздно встанет вопрос: а нужны ли они все, которые сейчас существуют? Как мне быстро понять, какие ветки «пополнялись» новыми возможностями и исправлениями? В VSTS (а скоро и в TFS) появилась новая возможность – вкладка устаревшие ветви для репозитория GIT, в которой отражаются ветви, не изменявшиеся более 30 дней. Найти это можно здесь:

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , , , , | Leave a Comment »

Как получить список команд проекта и их настройки через API

Posted by Shamrai Alexander на Август 9, 2017

Для получения необходимой информации воспользуемся nuget пакетом Microsoft.TeamFoundationServer.ExtendedClient, который обеспечивает необходимые .Net библиотеки для работы как с Team Foundation Server, так и с Team Services. Если говорить о последовательности, который необходимо выполнить, то это можно представить следующими шагами:

  • Подключиться к коллекции проектов через класс TfsTeamProjectCollection:

TfsTeamProjectCollection _tpc = new TfsTeamProjectCollection(new Uri(«http://server:8080/Collection&#187;))

  • Получить сервис работы с рабочими элементами для выбранной коллекции:

WorkItemStore _wistore = _tpc.GetService<WorkItemStore>();

  • Получить сервис для работы с командами для выбранной коллекции:

TfsTeamService _teamService = _tpc.GetService<TfsTeamService>();

  • Набор все команд можно запросить через метод QueryTeams() сервиса работы с командами. Команды реализуются через класс TeamFoundationTeam:

var _teams = _teamService.QueryTeams(pProject.Uri.ToString());

  • Список участников команды можно получить через метод GetMembers класса TeamFoundationTeam.
  • Для работы с настройками команды (итерации, пути области и т.д.) используется также отдельный сервис TeamSettingsConfigurationService:

var _teamConfig = _tpc.GetService<TeamSettingsConfigurationService>();

  • В свою очередь настройки для команды можно получить через метод GetTeamConfigurations сервиса работы с настройками команд:

var _configs = _teamConfig.GetTeamConfigurations(new Guid[] {pTeam.Identity.TeamFoundationId});

Полный пример кода можно посмотреть ниже:

static List<TeamFoundationTeam> ListTeams(TfsTeamProjectCollection pTpc, Project pProject)

{

TfsTeamService _teamService = pTpc.GetService<TfsTeamService>();

var _teams = _teamService.QueryTeams(pProject.Uri.ToString());

return (from t in _teams select t).ToList();

}

static bool GetTeamsSettings(TfsTeamProjectCollection pTpc, TeamFoundationTeam pTeam)

{

try

{

var _teamConfig = pTpc.GetService<TeamSettingsConfigurationService>();

var _configs = _teamConfig.GetTeamConfigurations(new Guid[] { pTeam.Identity.TeamFoundationId });

Console.WriteLine(«============={0}==================», pTeam.Name);

Console.WriteLine(«Team Members: «);

foreach (var _member in pTeam.GetMembers(pTpc, MembershipQuery.Expanded))

Console.WriteLine(«Display Name: » + _member.DisplayName + » || Is active: » + _member.IsActive);

foreach( var _config in _configs)

{

Console.WriteLine(«Team current iteration: » + _config.TeamSettings.CurrentIterationPath);

Console.WriteLine(«Team selected iterations:»);

foreach (var _iteration in _config.TeamSettings.IterationPaths)

Console.WriteLine(_iteration);

Console.WriteLine(«Team selected areas:»);

foreach (var _area in _config.TeamSettings.TeamFieldValues)

Console.WriteLine(«Area path: » + _area.Value + » || Include children: » + _area.IncludeChildren.ToString());

}

Console.WriteLine(«===============================»);

}

catch (Exception)

{

return false;

}

return true;

}

static void Main(string[] args)

{

string _teamProject = «VSTSAgile»;

try

{

TfsTeamProjectCollection _tpc = new TfsTeamProjectCollection(new Uri(«http://server:8080/Collection&#187;));

WorkItemStore _wistore = _tpc.GetService<WorkItemStore>();

var _teams = ListTeams(_tpc, _wistore.Projects[_teamProject]);

foreach (var _team in _teams) GetTeamsSettings(_tpc, _team);

}

catch (Exception ex)

{

Console.WriteLine(«Error: » + ex.Message);

Console.WriteLine(ex.StackTrace);

}

}

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , , , , | Leave a Comment »

Развертывание решения с помощью Docker, Azure Container Registry и Visual Studio Team Services

Posted by Shamrai Alexander на Июль 5, 2017

Данная публикация показывает, как можно настроить среду развертывания и тестирования с использованием Docker в Visual Studio Team Services. Общий процесс можно просмотреть здесь: https://www.youtube.com/watch?v=yrqy5PKrNao

Краткое описание тестируемого решения

Для тестирования процедуры используется следующее демонстрационное решение. Решение позволяет выполнять произвольные запросы к двум тестовым базам данных через консольное приложение-клиент. При этом префикс ‘TST1=>’ и ‘TST2=>’ маршрутизирует запрос к соответствующей базе.

Решение состоит из следующих проектов:

  1. FirstServiceApp – решение, которое запускает первый само-размещаемый WCF сервис. При этом запуск сервиса выполняется через nugget пакет TopShell.
  2. SecondServiceApp – решение, которое запускает второй само-размещаемый WCF сервис.
  3. WcfFirstService – первый WCF сервис, который работает с первой базой данных.
  4. WcfSecondService – второй WCF сервис, который работает со второй базой данных.
  5. WcfWebApp – основной WCF сервис, который размещается на IIS и взаимодействует с первым и вторым WCF сервисами, предоставляя соответствующие методы.
  6. WcfWebAppClient – клиентское приложение для основного WCF сервиса.

Архитектура решения следующая:

Рисунок 1. Архитектура решения

Последовательность использования решения на месте разработчика

Особенностью использования в данном режиме является то, что вся среда настроена на работу в сети NAT локального компьютера.

Примечание. Шаги приведены с учетом, что использует рабочее место в ажуре на основе Windows Server 2016 with containers, на котором развернуты VS 2015 и SQL Server 2016. Для работы сервисов необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»

Шаги развертывания и запуска решения:

  • Распаковать архив решения в необходимо место.
  • Обновить информацию о сетевых настройках.
    • Выполнить команду получения информации о сети:

docker network inspect nat

  • Получить информацию о используемой подсети и шлюзе. Пример части ответа предыдущей команды:


«IPAM»: {

«Driver»: «windows»,

«Options»: null,


«Config»: [

{

«Subnet»: «172.25.16.0/20»,

«Gateway»: «172.25.16.1»

}

]

},

  • Открыть разархивированный проект.
  • Обновить эту информацию в файлах hosts_dev.bat в проекте WcfWebAppClient и каталоге DockerCompose.

  • Обновить информацию в файле «docker-compose.yml».

  • Далее необходимо пересобрать проект, что создаст структуру для запуска контейнеров в каталоге «C:\DockerCompose»

  • На следующем шаге необходимо опубликовать веб-сайт из проекта «WcfWebApp».

  • Открыть командную строку и перейти в каталог «DockerCompose»

cd c:\DockerCompose

  • Запустить команду «docker-compose» для сборки образов:

docker-compose build

  • Запустить команду «docker-compose» для запуска сервисов:

docker-compose up -d

  • Проверить работоспособность сервисов можно через команду «docker-compose ps»

  • Чтобы подключиться к сервисам и проверить работу необходимо запустить решение WcfWebAppClient из сборки отладочного каталога (bin/Debug). При этом нужно проверить ip-адрес подключения к основному сервису в файле настройки, чтоб он соответствовал подсети, которая настроена для сети nat (шаг 2).

Последовательность использования решения при непрерывной интеграции

Общая архитектура решения отражена на рисунке ниже:

Описание решения:

  1. Исходный код размещается на Visual Studio Team Services в репозитории GIT или TFVC.
  2. Разработчик подключается VSTS и изменяет исходный код.
  3. После регистрации изменений выполняется автоматический запуск процесса сборки на сервере Build Server. На сервере сборки выполняется:
    1. Сборка исходного кода/выполнение модульных тестов.
    2. Сборка образов для контейнеров.
    3. Публикация образов на приватном сервере реестра контейнеров Azure Registry Server.
  4. (Данный шаг может выполняться в режиме непрерывного развертывания) Разработчик выполняет создание нового релиза, что запускает выполнение следующих шагов:
    1. Скачивание образов из приватного сервера реестра
    2. Запуск сервисов на Stage Server.

Примечание. Шаги приведены с учетом, что:

  1. Создан проект в Visual Studio Team Services. https://www.visualstudio.com/en-us/docs/setup-admin/create-team-project
  2. Установлен агент сборки: https://www.visualstudio.com/en-us/docs/build/concepts/agents/agents
  3. Build и Stage Server развернуты в ажуре на основе Windows Server 2016 with containers.
  4. На Build и Stage Server необходима утилита docker-compose, которую можно скачать здесь https://github.com/docker/compose/releases и разместить здесь: «C:\Program Files\Docker\docker-compose.exe»
  5. На Build Server развернута VS 2015
  6. На Stage Server развернут SQL Server 2016 и развернуты базы TestDB и TestDB1.

Шаги развертывания и запуска решения:

  • Решение для примера распаковывается и ставить под версионный контроль проекта в Visual Studio Team Services.
  • На Stage Server необходимо просмотреть настройки сети и обновить их в файлах «hosts.bat» и «docker-compose_prod.yml». См. Раздел 3.2, шаг 2.
  • Настраивается новая сборка для решения, в которой настраиваются следующие шаги:
    • Шаг непосредственной сборки решения:

  • Публикация сайта с сервисом в запакованном zip архиве

Аргументы: /p:OutDir=$(build.stagingDirectory)/package /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true

  • Копирование результатов сборки решения.

  • Копирование результатов сборки сайта в общий каталог результатов

  • Копирование результатов сборки сайта в рабочий каталог для формирования контейнера.

  • Запуск скрипта для обновления информации настроек Application Insights и докера.

  • Публикация результатов сборки на сервер TFS.

  • Запуск скрипта для сборки контейнеров и публикации на приватный реестр.

  • Для сборки настраиваются переменные для подключения к приватному реестру контейнеров. Имя сервера нужно обновить в самом файле «publish.bat»:

  • Настраивается релиз, который на основе сборки формирует контейнеры с сервисами. Пример шагов для среды развертывания:
    • Копирование исходного файла настройки «docker-compose_src.yml» для запуска сервисов.

  • Запуск скрипта для генерирования правильного конфигурационного файла для контейнеров.

  • Запуск командной строки для подключения к удаленному реестру контейнеров.

  • Запуск командной строки для сборки и запуска набора контейнеров

Posted in Microsoft, Team Foundation Server, Visual Studio, visual studio team services | Отмечено: , , , | Leave a Comment »

Создание альтернативной Kanban доски в TFS на основе Report Server

Posted by Shamrai Alexander на Июнь 14, 2017

Не всегда есть желание «пускать» внешних Заказчиков в свой проект, т.к. в нем может быть информация, которая к нему может не относиться, а также нет желания отображать всю внутреннюю коммуникацию. Для таких целей можно использовать Report Server. В этом случае для Заказчика нет необходимости докупать лицензии, а также уделять внимание административным функциям. Ниже приведены детальные шаги для создания отчета на основе Report Server для проекта TFS. Итак, приступим:

  • Запускаем построитель отчетов

  • В мастере создания отчетов нажимаем отмена для дальнейшей его конфигурации.
  • Открываем Параметры приложения.

  • Указываем путь к серверу отчетов, который в дальнейшем будет использоваться по умолчания для новых отчетов и поиска существующих.

  • Добавляем новый источник данных для отчета, из которого будем получать необходимые данные.

  • В появившемся окне вводим наименование источника данных и нажимаем Обзор для выбора необходимого подключения к данным:

  • Выбираем источник данных, в нашем случае мы будем работать с кубом, и нажимаем кнопку Ок в окне выбора источника данных и мастера.

  • Выбираем создание нового набора данных, который будет использоваться для построения отчета

  • В появившемся окне указываем наименование набора данных и выбираем пункт Использовать набор данных, внедренных в отчет.

  • На данном шаге выбираем источник данных и нажимаем кнопку конструктор запросов.

  • В окне конструктора запросов выбираем куб командного проекта.

  • Перетаскиваем в область запрос измерение Количество рабочих элементов.

  • Перетаскиваем также следующие поля в область отчета (Идентификатор, Название, Кому назначено, Тип рабочего элемента):

  • Устанавливаем также следующие значения для фильтра:

  • Нажать Ок в конструкторе и потом в создании набора данных.
  • Выбираем вставку новой таблицы, которая будет отражать наши тикеты для новых рабочих элементов:

  • Удаляем лишний столбец, т.к. мы будем использовать только два. Один столбец будет содержать цвет тикета, второй детальную информацию

  • Выбрать свойства табликса и указываем набор данных.

  • И сохраняем свойства.
  • Добавить еще три строки внутри группы, которые будут содержать детали тикетов.

  • Выполняем следующее форматирование и установливаем следующие поля:

  • Выбираем свойства боковой свободной строки данных:

  • Переключиться на заливку и выбрать указание функции.

  • Указываем следующее выражение, которое будет переключать цвет тикета в зависимости от типа рабочего элемента. Если ошибка, то красный цвет, для других элементов будет зеленый цвет. (=IIf(Fields!System_WorkItemType.Value=»Ошибка», «Red», «LimeGreen»)):

  • Выполнить настройку для следующих ячеек:

  • Далее сделаем так, чтоб при нажатии на идентификатора открывалось новое окно браузера с соответствующим рабочим элементом. Для этого необходимо выбрать свойство поля идентификатора.
  • В окне свойств переходим на вкладку Действие, выбрать пункт Перейти по URL адресу нажать кнопку функции.

  • Делаем также подчеркивание для шрифта поля идентификатора.
  • Также нам необходимо, чтоб для значения «Нет данных», если поле не имеет значения в TFS, в ячейке было просто пусто. Для этого для поля Кому назначено указываем следующее выражение в качестве значения (=IIf(Fields!System_AssignedTo.Value=»Нет данных»,»»,Fields!System_AssignedTo.Value)):

  • Указываем параметр единого отчета в свойствах табликса, чтоб отчет не разбивался на множество страниц.

  • Проверить работу отчета.

  • Создаем дополнительные наборы данных для состояний:
    • Активно
    • Разрешено
    • Закрыто

  • Копируем существующий табликс несколько раз (для каждого нового состояния) и изменяем заголовки на соответствующие состояния.

  • Выбираем свойства каждого табликса и указываем имя соответствующего набора данных.

  • Выбираем сохранение отчета и сохраняем его в любом проекте в каталоге отчетов Управления проектом

  • Открыть Visual Studio или портал проектов в веб-браузере и переходим к отчетам необходимого проекта.

  • Проверяем работу отчета

Posted in Microsoft, Team Foundation Server, Visual Studio | Отмечено: , , | Leave a Comment »

Отображение формы рабочего элемента TFS/VSTS в Visual Studio 2017

Posted by Shamrai Alexander на Май 8, 2017

<< Перейти в раздел «Team Foundation Work Item Tracking FAQ»

По умолчанию формы в Visual Studio не отображаются в самой IDE, когда мы просматриваем результаты работы запроса по рабочим элементам. Т.е. при двойном нажатии на строку результата нас «перебрасывает» на веб-форму на веб-сайте проекта TFS/VSTS:

При этом открывается запрос, который был открыт в Visual Studio, и выделение позиционируется на соответствующий рабочий элемент. Если нет желания использовать такой метод, то можно вернуться к старому механизму работы. Для этого необходимо перейти в настройки Visual Studio (ToolsàOptionsàWork Items) и выбрать в пункте Open work items in пункт Visual Studio (compatibility mode):

В результате таких действий и результат запросов по рабочим элементам, и сами рабочие элементы будут отрываться непосредственно в Visual Studio.

Posted in Microsoft, Team Foundation Server FAQ, Visual Studio, Work Item Tracking FAQ | Отмечено: , , , , | Leave a Comment »

 
%d такие блоггеры, как: