Um bom administrador de um serviço hoje em TI usa console! A UI é importante, funciona para pequenas coisas, mas quando se precisa de automação, ou executar lotes de alterações, nada melhor que o bom e velho console.

No TFS/VSTS não é diferente, a Microsoft por anos focou na UI, porém cada vez mais dá destaque as ferramentas de console, sua linguagem de script Powershell, etc…

Quando precisamos fazer grandes alterações na estrutura de permissionamento do TFS/VSTS, usar a ferramenta TFSSecurity não é uma opção. Ela server tanto para fazer uma pequena alteração, grades, por exemplo, durante realocações de equipes, mudanças na política de acesso da empresa, ou quando como consultor vamos arrumar uma instalação que infelizmente ficou bagunçada com o tempo.

TFSSecurity

Com o TFSSecurity é possível a listar grupos, adicionar usuários ou grupos para outros grupos, remover usuário ou grupo, criar um grupo na TP, criar um grupo no server ou na TPC, deletar grupos do server ou TPC, mudar descrição, renomear o grupo, dar permissões, … Bastante coisa não?

Para aprender mais sobre esta ferramenta nada como executar um exercício. Imagine que o gerente de TI chegou para o Admin do TFS e pediu:

Crie um grupo no TP Fabrikam Fiber, chamado Configuration Manager, a descrição deve ser: “Configuration Manager, admin builds, PR to a Git repo, …”. Este grupo deve ter a permissão de criar builds e pull requests, na Master de cada repositório. Deverá ser adicionado os usuários Jane Doe e John Doe nele.

Lógico, o exemplo é simples… Mas lembre-se, você poderia ter que criar esse mesmo grupo em 30, 50 ou 100 TP’s diferentes… Ou adicionar mais 30 usuários… Etc… Por isso fazer uso de um script, deixa mais tempo para o seu café, ou … uma partidinha de GoW na sala de descompressão da empresa.

Vamos explorar a ferramenta? Para isso, farei uso da VM do Brian… de novo…

Listando grupos

Vamos começar do começo, quero saber quais grupos eu tenho na Fabrikam Fiber Collection:

TFSSecurity /g /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 01_57_56-Developer Command Prompt for VS2015

/g é o parâmetro utilizado para listar grupos

/collection é o endereço do alvo do comando, lembre-se que uma Team Project Collection é a isolação máxima, acima teríamos somente usuários do servidor, como os Administration Console User, que não nos interessam no momento.

O resultado é extenso, para melhor visualização podemos usar o artifício de enviar a saída para um arquivo texto, fica mais agradável a leitura, para isso é só acrescentar ‘> C:[local]GruposDaFFCollection.txt’, ficando:

TFSSecurity /g /collection:http://vsalm:8080/tfs/FabrikamFiberCollection > C:TempGruposDaFFCollection.txt

Listando usuários do Team Project

Vamos verificar quem está no grupo de usuários válidos do TP FabrikamFiber:

TFSSecurity /im “[FabrikamFiber]Project Valid Users” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 02_14_33-Select Developer Command Prompt for VS2015

Somente grupos, provavelmente encontraremos alguém no grupo [FabrikamFiber]Contributors, que é onde cadastramos os desenvolvedores:

TFSSecurity /im “[FabrikamFiber]Contributors” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 02_17_35-Developer Command Prompt for VS2015

Não, somente mais grupos, agora com os Teams. Já que o time “Fabrikam Fiber Leadership Team” é o default vamos ver o que encontramos nele:

TFSSecurity /im “[FabrikamFiber]Fabrikam Fiber Leadership Team” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 02_21_34-Developer Command Prompt for VS2015

Parece que o administrador do TFS criou um grupo chamado DemoUsers e colocou os usuários lá, mas repare que não é um grupo do TP:

TFSSecurity /im “[VSALM]DemoUsers” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 02_26_10-Developer Command Prompt for VS2015

Erro! Esse grupo não está na TP, mesmo colocando corretamente “[VSALM]DemoUsers”, ele não foi encontrado. É que esse grupo é local do Windows, não do TFS! O Admin do TFS parece estar usando a estratégia de adicionar grupos do Windows e quando um novo usuário é cadastrado no AD e corretamente adicionado aos grupos pelo Admin, ele já passa a ter acesso ao TFS.

Criando grupo Configuration Manager

Basicamente é usar o /gc para criar um grupo no escopo do TP, porém tem um pequeno empecilho aqui, se olharmos os parâmetros do comando ele pede além do nome do grupo a ser criado, descrição (é opcional) e a coleção, o escopo, que seria o Team Project, porém em um formato de URI com o GUID do TP e não o seu nome! Esse GUID não é fácil de ser achado, mas agora temos um atalho bem interessante: TFSCmdlets! Não vou entrar em muitos detalhes neste post, pois não é o objetivo. Mas é válido dizer um pouco mais sobre o projeto.

O TFSCmdlets são Cmdlets em Powershell para TFS e VSTS, criados pelo Igor Abade, é um projto Open Source e está disponível para contribuições no Github: https://github.com/igoravl/tfscmdlets. Lendo o README.md você será capaz de começar a utilizar agora mesmo, pois precisaremos dele.

Depois de instalar, abra um console do Powershell e digite:

Connect-TfsTeamProjectCollection http://vsalm:8080/tfs/FabrikamFiberCollection

e

Get-TfsTeamProject

Você estará conectado na TPC do FabrikamFiber, com o primeiro comando, e com o segundo ele irá listar os TP’s da collection conectada. Ao listar trará também algumas informações, uma delas é o Id do TP, que é o que precisamos, mas melhor ainda traz a Uri!! É só copiar e usar.

2016-01-29 03_41_38-Windows PowerShell

Então o nosso comando para criar um grupo ficará assim:

TFSSecurity /gc “vstfs:///Classification/TeamProject/fd6fa263-b3f9-45e3-96af-ad67e75c9ff7” “Configuration Manager” “Configuration Manager, admin builds, PR to a Git repo, …” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 03_58_55-Developer Command Prompt for VS2015

Para validar se o grupo foi criado é só listarmos os grupos do TP:

TFSSecurity /g “vstfs:///Classification/TeamProject/fd6fa263-b3f9-45e3-96af-ad67e75c9ff7” /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

Procure por ele na listagem.

Adicionando usuários

Vamos usar o /g+, como abaixo:

TFSSecurity /g+ “[FabrikamFiber]Configuration Manager” vsalmjaned /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 04_10_02-Developer Command Prompt for VS2015

Para adicionar John Doe é só repetir o comando trocando pelo usuário johnd. Se você tem uma grande quantidade de usuários para adicionar, é interessante usar a técnica descrita pelo Vinicius Moura no post: TFS: Adicionando usuários em Team Projects e grupos existentes.

Ajustando permissões

O comando de permissões já é um pouco mais complexo, vou detalhar os parâmetros para melhor entendimento:

  • Namespace: é o grupo para o qual você quer adicionar permissões, usando o comando TFSSecurity /a é possível listar os namespaces
  • Token: Nome ou GUID do objeto que se quer dar permissão
  • Action: Nome da permissão
  • Identity: Nome do usuário ou grupo com Allow ou Deny
  • Collection, já conhecemos

Então vamos lá, preciso dar permissão de build, vou adicionar como Administrador de Build, portanto a action utilizada será AdministerBuildPermissions e o token será BuildPrivileges, portanto o comando ficará assim:

TFSSecurity /a+ Build BuildPrivileges AdministerBuildPermissions “[FabrikamFiber]Configuration Manager” ALLOW /collection:http://vsalm:8080/tfs/FabrikamFiberCollection

2016-01-29 04_35_52-Developer Command Prompt for VS2015

Bom… e de onde eu tirei o token? Esse é um daqueles parâmetros que são difíceis de se achar, nesse ponto a documentação oficial da Microsoft, falhou.

Eu uso uma tabela compartilhada pelo Rene van Osnabrugge, aqui.

Agora, vou deixar com você, para completar o pedido do gerente, e dar permissão na branch Master do repositório… você consegue?

Emmanuel Brandão