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

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

Archive for Июль 2015

Руководство по настройке шаблона процесса TFS. Сценарий 5 – Клонирование типов рабочих элементов с использованием PowerShell

Posted by Шамрай Александр на Июль 24, 2015

Краткий обзор бизнес-проблемы

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

Например, одна из причин клонирования рабочего элемента – это частые изменения настроек типа рабочего элемента, которые необходимо применять для более чем одного командного проекта. Этот сценарий обычно случается, когда вы хотите перенести ваши настройки из тестовых проектов в промышленные.

Что в этом руководстве?

  • Обновление существующих командных проектов

Обновление существующих командных проектов

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

1. С помощью приложения Windows PowerShell ISE или Блокнота откройте файл CloneWIT.ps1, который является частью данного руководства.

Рисунок 45 – CloneWIT.ps1 загруженный в Windows PowerShell ISE

ПримечаниеWindows PowerShell Integrated Scripting Environment (ISE) является основным приложением для Windows PowerShell. В Windows PowerShell ISE можно запускать команды, писать, тестировать и отлаживать сценарии в едином Windows ориентированном графическом пользовательском интерфейсе с многострочным редактированием, завершением табуляции, расцветкой синтаксиса, выборочным выполнением, контекстно-зависимой справкой и поддержка языков справа налево. Пункты меню и сочетания клавиш можно использовать для выполнения многих одинаковых задач, которые необходимо выполнить в консоли Windows PowerShell. Например, при отладке сценариев в Windows PowerShell ISE, чтобы задать точку останова в скрипте, щелкните правой кнопкой мыши на строке кода и выберите команду Переключить точку останова.

Дополнительные сведения о приложении Windows PowerShell Integrated Scripting Environment (ISE) можно найти в Интернете.

 

2. Сценарий начинается с загрузки модуля PowerShell, содержащий команды утилиты, которые используются для взаимодействия с Team Foundation Server.

# load the TFS.psm1 PowerShell module located in the same location as this script.

$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path

Import-Module (Join-Path $ScriptDirectory TFS.psm1)

Исходный код 11 – Модуль загрузки утилит Team Foundation Server

3. После загрузки этой функции, сценарий загружает функцию Clone-WorkItemType, которая будет выполнять операцию клонирования типа рабочего элемента

function Clone-WorkItemType

{

param (

[psobject] $SourceProject,

[psobject] $DestinationProject,

[string] $WorkItemTypeName,

[Switch] $includeGlobalLists

)

# get the work item type xml from the source project.

$WorkItemType =
$SourceProject.WorkItemTypes[$WorkItemTypeName]

$sourceXml = $WorkItemType.Export($includeGlobalLists)

$definition =
$sourceXml.InnerXml

try

{

# verify against target, may raise an exception

[Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemType]::Validate($DestinationProject, $definition)

# import the work item type definition xml into the dest. project

# if no exceptions, then clone was successful.

$DestinationProject.WorkItemTypes.Import($definition)

Write-Host «Clone succeeded.»

}

catch [System.Xml.XmlException]

{

Write-Error «Xml Exception: \n\n$($_.Message)»

}

catch [System.Xml.Schema.XmlSchemaValidationException]

{

Write-Error «Xml Schema Validation Exception: \n\n$($_.Message)»

}

}

Исходный код 12 – Функция PowerShell Clone-WorkItemType

4. Затем сценарий определяет набор переменных, которые определяют командные проекты для типа рабочего элемента, из которого и в который он будет импортироваться. В нашем случае источник и целевой командные проекты находятся в одной и той же коллекции проекта. Измените значения этих переменных согласно ваших потребностей.

# source and target tfs project collections and team projects

$sourceCollectionName =
«DefaultCollection»

$sourceProjectName =
«PlaygroundAgile50»

$destinationCollectionName =
«DefaultCollection»

$destinationProjectName =
«RangersDemo»

Исходный код 13 – Определение источника и целевого проекта для клонирования

5. По умолчанию при вызове функции Get-Tfs используется имя локального компьютера. Если вы выполняете сценарий CloneWIT.ps1 не на сервере уровня приложений TFS, то вам нужно будет изменить этот параметр на путь к вашему серверу TFS.

# connect to TFS

$tfs = Get-Tfs «http://$env:COMPUTERNAME`:8080/tfs»

Исходный код 14 – Подключение к Team Foundation Server

6. Далее сценарий получает сведения о командных проектах от сервера TFS, используя импортированную команду утилиты Get-TfsCollection.

# create connection to both source and target team projects

$sourceCollection = ($tfs | Get-TfsCollection -Name $sourceCollectionName)

$sourceProject =
$sourceCollection.WIT.Projects[$sourceProjectName]

$destinationCollection = ($tfs | Get-TfsCollection -Name $destinationCollectionName)

$destinationProject = $destinationCollection.WIT.Projects[$destinationProjectName]

Исходный код 15 – Определение источника и целевого проекта для клонирования

7. Затем вызывается функция Clone-WorkItemType с параметрами имени типа рабочего элемента и значением, которое указывает следует ли также копировать глобальные списки. Настройте WorkItemTypeName и includeGlobalLists под ваши потребности.

# call the clone work item type function

Clone-WorkItemType
`

-SourceProject $sourceProject `

-DestinationProject $destinationProject `

-WorkItemTypeName «Bug»

Исходный код 16 – Вызов функции Clone-WorkItemType

8. Сохраните и выполните сценарий, нажав F5 в приложении Windows PowerShell ISE или открыв командную строку и выполнив следующую команду:

powershell.exe -File «C:\HOL\TFS Process Template Customization Guidance\PowerShell\CloneWIT.ps1» false

Исходный код 17 – Выполнение сценария клонирования типа рабочего элемента

ПримечаниеПо умолчанию PowerShell запрещает выполнение сценария на компьютере. Администратор может изменить политику или вы можете добавить параметр -ExecutionPolicy с другим значением такими как Bypass или RemoteSigned.

Дополнительные сведения о политике выполнения PowerShell можно найти, введя

Get-Help about_Execution_Policies

в консоли PowerShell или в PowerShell ISE.

Дополнительные сведения о Windows PowerShell Integrated Scripting Environment (ISE) можно найти в Интернете.

 

9. Сценарий должен завершить со счастливым сообщением; Clone succeeded. Если вы обнаружите ошибку, то она может быть связана с безопасностью или введением неправильных значений в шагах 4, 5 или 7.

Рисунок 46 – Удачное выполнение операции клонирования

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

Руководство по настройке шаблона процесса TFS. Сценарий 4 – Деактивация типа рабочего элемента

Posted by Шамрай Александр на Июль 23, 2015

Краткий обзор бизнес-проблемы

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

Одной из таких причин может быть миграция рабочих элементов в Team Foundation Server (возможно, из другого инструмента), например, для типа рабочего элемента Defect. По той или иной причине в дальнейшем будет использоваться тип Bug внутри Team Foundation Server, и вы хотите предотвратить создание новых рабочих элементов Defect, однако оставаться в состоянии использовать те, что были первоначально мигрированы.

Что в этом руководстве?

  • Настройка шаблона процесса
  • Деактивация типа рабочего элемента
  • Реализация и развертывание

Настройка

Этот документ представляет два решение для этого сценария из реальной жизни, но с разными результатами:

  • Решение 1 – Создание поля DeactivatedType для рабочего элемента
ПримечаниеС этим решением пользователь не сможет больше создавать новый или изменять существующий рабочий элемент определенного типа.
  • Решение 2 – Деактивация первого перехода для типа рабочего элемента
Примечание
С помощью этого решения пользователь не сможет больше создавать новый рабочий элемент определенного типа, но все еще сможет обновлять существующие рабочие элементов этого типа.

Шаги

Решение 1 – Создание поля DeactivatedType для рабочего элемента

Шаг Описание Сделано
1 Экспортировать тип рабочего элемента, который вы ходите деактивировать в определенном командном проекте [ ]
2 Открыть файл типа рабочего элемента для настройки [ ]
3 Создать поле DeactivatedType со специальными правилами [ ]
4 Добавить новое поле DeactivatedType на форму типа рабочего элемента [ ]

Таблица 6 – Решение 1

Решение 2 – Деактивация первого перехода для типа рабочего элемента

Шаг Описание Сделано
1 Экспортировать тип рабочего элемента, который вы ходите деактивировать в определенном командном проекте [ ]
2 Открыть файл типа рабочего элемента для настройки [ ]
3 Добавить атрибут NOT в первую транзакцию секции жизненного цикла [ ]
4 Протестировать изменения, выполнив импорт отредактированного типа рабочего элемента обратно и открытие существующего рабочего элемента или создание нового рабочего элемента данного типа [ ]

Таблица 7 – Решение 2

Реализация и развертывание

Решение 1 – Создание поля DeactivatedType для рабочего элемента

Деактивация выполняется через создание поля DeactivatedType для рабочего элемента с определенными правилами.

1. Первым шагом является экспорт типа рабочего элемента, который вы хотите отключить из определенного командного проекта. Для этого примера мы будем использовать тип Defect.xml.

Чтобы выполнить это, мы можем использовать программу witadmin:

Перейдите в Пуск-> Microsoft Visual Studio 2012-> Visual Studio Tools и откройте Developer Command Prompt

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

witadmin exportwitd /collection:http://tfsserver:8080/tfs/CollectionName /p:TeamProjectName /f:WorkItemTypePathName.xml /n:WorkItemTypeName

2. Откройте файл типа рабочего элемента для настройки, например:


Рисунок 36 – Тип рабочего элемента Defect

3. Создайте поле рабочего элемента DeactivatedType со следующими двумя правилами COPY и PROHIBITEDVALUES

Рисунок 37 – Поле рабочего элемента DeactivatedType

<FIELD name=«Deactivated Type» refname=»Demo.DeactivatedType» type=»String»>

<COPY from=«value» value=»THIS WORK ITEM TYPE HAS BEEN DEACTIVATED» />

<PROHIBITEDVALUES>

<LISTITEM
value=«THIS WORK ITEM TYPE HAS BEEN DEACTIVATED» />

</PROHIBITEDVALUES>

</FIELD>

Исходный код 9 – Поле DeactivatedType

Заметьте, что правило COPY используется запрещенное значение для поля, и пользователь не сможет более создать новый или изменить существующий рабочий элемент этого типа

4. Добавьте поле DeactivatedType на форму рабочего элемента.

Рисунок 38 – DeactivatedType добавленное на форму

<Control FieldName=«Demo.DeactivatedType» Type=»FieldControl» ControlFontSize=»large» Label=»[ WARNING ] : » LabelPosition=»Left» ReadOnly=»True» />

Исходный код 10 — DeactivatedType добавленное на форму

5. Как раз время протестировать изменения с помощью импорта отредактированного типа рабочего элемента в командный проект. В командной строке Visual Studio:

Вы можете проверить определение XML перед его импортом в командный проект:

witadmin importwitd /collection:http://tfsserver:8080/tfs/CollectionName /f:WorkItemTypePathName.xml /p:TeamProjectName /v

Выполните следующую команду импорта:

witadmin importwitd /collection:http://tfsserver:8080/tfs/CollectionName /f:WorkItemTypePathName.xml /p:TeamProjectName

6. Теперь попробуйте открыть существующий рабочий элемент. Должно отображаться предупреждение THIS WORK ITEM TYPE HAS BEEN DEACTIVATED. С этого момента существующие рабочие данного типа не будут доступны для редактирования.

Рисунок 39 – Существующий рабочий элемент не может быть изменен

Если вы попробуете создать новый рабочий элемент Defect, то не сможете этого сделать. При попытке сохранения появится сообщение с ошибкой.

Рисунок 40 – Новый рабочий элемент не может больше создан

Т.к. этот вид настройки типа рабочего элемента выполняется для проекта, но если у вас есть желание отключить этот тип для будущих командных проектов, необходимо обновить ваш шаблон процесса, отключив требуемый тип.

Решение 2 – Деактивация первого перехода для типа рабочего элемента

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

Деактивация реализуется через добавление атрибута not=»[Global]\Project Collection Valid Users» в первый переход секции жизненного цикла типа рабочего элемента.

1. Первым шагом является экспорт типа рабочего элемента, который вы хотите отключить из определенного командного проекта. Для этого примера мы будем использовать тип Defect.xml.

Чтобы выполнить это, мы можем использовать программу witadmin:

Перейдите в Пуск-> Microsoft Visual Studio 2012-> Visual Studio Tools и откройте Developer Command Prompt

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

witadmin exportwitd /collection:http://tfsserver:8080/tfs/CollectionName /p:TeamProjectName /f:WorkItemTypePathName.xml /n:WorkItemTypeName

2. Откройте файл типа рабочего элемента для настройки, например:


Рисунок 41 – Тип рабочего элемента Defect

3. Добавьте следующий атрибут NOT в первую транзакцию в секции жизненного цикла, как указано ниже

Рисунок 42 – Атрибут перехода NOT

4. Как раз время протестировать изменения с помощью импорта отредактированного типа рабочего элемента в командный проект. В командной строке Visual Studio:

Выполните следующую команду импорта:

witadmin importwitd /collection:http://tfsserver:8080/tfs/CollectionName /f:WorkItemTypePathName.xml /p:TeamProjectName

5. Теперь протестируйте решение, создав новый рабочий элемент. Появится сообщение об ошибке, теперь создание рабочих элементов Defect невозможно.

Рисунок 43 – Новый рабочий элемент не может быть создан

Однако существующие рабочие элементы Defect могут быть изменены, поэтому это решение будет лучше, если необходимо продолжать редактировать существующие рабочие элементы.

Рисунок 44 – Существующие рабочие элементы могут быть изменены

Т.к. этот вид настройки типа рабочего элемента выполняется для проекта, но если у вас есть желание отключить этот тип для будущих командных проектов, необходимо обновить ваш шаблон процесса, отключив требуемый тип.

Итог

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

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

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