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]
Após a execução do comando acima, vemos o resultado no Team Explorer:
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
Após a execução do comando acima, vemos o resultado no Team Explorer:
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