Pessoal, quero compartilhar com vocês uma experiência que tive recentemente em um cliente. O trabalho consistia na migração do TFS 2008 para o TFS 2010. Para isso inicialmente utilizei a linha de comando TFSConfig import, conseguindo assim migrar todo o histórico de Source Control e Work Item Tracking. Em um segundo momento, já no TFS 2010, fizemos a customização do Process Template, adequando o processo do TFS à realidade desse cliente. Nessa customização, houve a necessidade da criação de grupos para os Team Projects atendendo assim ao cenário proposto.

Com isso, o cliente nos solicitou que todos os Team Projects migrados do TFS 2008 (mais ou menos 100 projetos) recebessem o novo processo desenhado (na migração não conseguimos definir esse cenário). Então veio o desafio: como fazer todos esses 100 projetos receberem de uma só vez todos os novos grupos criados e os novos Work Items?

Para realizar tal atividade, utilizei as linhas de comando do TFS, mais especificamente TFSSecurity para a criação dos grupos e witadmin para a criação dos novos Work Items. A seguir vou mostrar o passo a passo para a realização dessa atividade.

Criação de Grupos nos Team Projects

Para criarmos grupos em todos os Team Projects de uma Collection, utilizei o comando TFSSecurity associado ao comando do FOR do DOS, pois precisava ler um arquivo texto contendo todos os Team Projects e os respectivos grupos a serem criados. Abaixo segue o passo a passo para a execução dessa atividade:

· Criação de arquivo texto – esse arquivo contem todos os Team Projects e os respectivos grupos que serão criados. Para a montagem do mesmo, me conectei ao SQL Server Management Studio e executei a instrução abaixo (conecte-se ao banco de dados com o respectivo nome de sua Collection):

SET NOCOUNT ON

DECLARE @Rows INT

DECLARE @IdCol INT

DECLARE @Project_Id NVARCHAR(512)

SET @Rows = 0

SET @IdCol = 1

CREATE TABLE #Projects

(

idcol INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,

Project_Id NVARCHAR(512)

)

INSERT #Projects

SELECT project_id

FROM tbl_projects

SELECT @Rows = COUNT(*) FROM #Projects

WHILE @IdCol <= @Rows

BEGIN

SELECT @Project_Id = ISNULL(Project_Id,”)

FROM #Projects

WHERE idcol = @IdCol

IF @Project_Id <> ”

BEGIN

PRINT @Project_Id + ‘;Desenvolvimento’

PRINT @Project_Id + ‘;Homologacao’

PRINT @Project_Id + ‘;Qualidade’

END

SET @IdCol += 1

END

A instrução acima percorrerá todos os Team Projects da Collection e criará os grupos Desenvolvimento, Homologacao e Qualidade. Ao executar o comando, salve o resultado em um arquivo texto (C:\grupos.txt).

· Execução da linha de comando TFSSecurity – com o arquivo texto pronto, vamos utilizar a linha de comando TFSSecutiry em associação com o comando FOR do DOS. Para isso execute a linha de comando no prompt de comando do Visual Studio.

FOR /F “tokens=1,2 delims=; ” %i in (C:\grupos.txt) DO TFSSecurity /gc “vstfs:///Classification/TeamProject/%i” %j /collection:[URLCollectionName]

clip_image002

Após a execução do comando acima, vemos o resultado no Team Explorer:

clip_image003

clip_image005

Criação de Work Items nos Team Projects

Para criarmos Work Items em todos os Team Projects de uma Collection, utilizei o comando witadmin associado ao comando do FOR do DOS , pois precisava ler um arquivo texto contendo todos os Team Projects e os respectivos Work Items a serem criados. Abaixo segue o passo a passo para a execução dessa atividade:

· Criação de arquivo texto – esse arquivo contem todos os Team Projects e os respectivos Work Items que serão criados. Para a montagem do mesmo, me conectei ao SQL Server Management Studio e executei a instrução abaixo (conecte-se ao banco de dados com o respectivo nome de sua Collection):

SET NOCOUNT ON

DECLARE @Rows INT

DECLARE @IdCol INT

DECLARE @Project_Name NVARCHAR(512)

SET @Rows = 0

SET @IdCol = 1

CREATE TABLE #Projects

(

idcol INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,

Project_Name NVARCHAR(512)

)

INSERT #Projects

SELECT project_name

FROM tbl_projects

SELECT @Rows = COUNT(*) FROM #Projects

WHILE @IdCol <= @Rows

BEGIN

SELECT @Project_Name = ISNULL(Project_Name,”)

FROM #Projects

WHERE idcol = @IdCol

IF @Project_Name <> ”

BEGIN

PRINT @Project_Name + ‘;Task.xml’

PRINT @Project_Name + ‘;Bug.xml’

PRINT @Project_Name + ‘;Sprint.xml’

END

SET @IdCol += 1

END

A instrução acima percorrerá todos os Team Projects da Collection e criará os Work Items Task, Bug e Sprint. Ao executar o comando, salve o resultado em um arquivo texto (C:\wis.txt).

· Execução da linha de comando witadmin – com o arquivo texto pronto, vamos utilizar a linha de comando witadmin em associação com o comando FOR do DOS. Para isso execute a linha de comando no prompt de comando do Visual Studio.

FOR /F “tokens=1,2 delims=; ” %i in (c:\wis.txt) DO witadmin importwitd /collection:[URLCollectionName] /p:%i /f:”C:\wis\%j” /v

clip_image007

Após a execução do comando acima, vemos o resultado no Team Explorer:

clip_image008

Com isso conseguimos migrar todos os Team Projects do TFS 2008 para o TFS 2010, criamos os novos grupos e atualizamos o Process Template.

Abraços e até a próxima,

Vinicius Moura.

Vinicius Moura

Consultor ALM na empresa Lambda3. Formado em Tecnologia da Informação pela Universidade Presbiteriana Mackenzie. Pós graduado em Gestão de Tecnologia da Informação pela FIAP. Certificação Microsoft 70-512 Visual Studio Team Foundation Server 2010, Administration