Nos dois primeiros posts sobre os novos agents do TFS e VSTS descreveu-se a instalação e configuração como build agent ou deploy agent.
Porém vários pontos ficaram em abertos, por exemplo, se eu reiniciar a VM na qual o agent está instalado, o que acontece? Quando sair uma próxima versão, como eu atualizo tudo?
Esses pontos e outros, serão vistos neste post, continue lendo!
Boot da máquina com Agent
A máquina de build pode ser reiniciada após a instalação de algum novo componente necessário para build, por exemplo, ou o Windows pode sofrer um boot após a instalação de updates. O Agent voltará a ficar on-line?
Se o Agent foi registrado como serviço é preciso verificar no cadastro de Serviços como está configurado, para isso use Win + X, no menu de contexto escolha Computer Management, e no menu lateral esquerdo Services e Applications > Service. Na relação de serviços encontre os com o prefixo “VSO Agent”.
A coluna Startup Type dos Agents destacados, que são os configurados nos posts anteriores, estão indicando Automatic, ou seja, em um reboot da máquina os serviços vão subir automáticamente.
Deletando um registro de Agent que não existe mais
Aproveitando a janela Computer Management com a relação de serviços, vemos que existe o registro de mais dois Agents, além dos que foram cadastrados anteriormente, e a coluna de Status está em branco.
São registros de Agents que foram feitos, porém, apagados do TFS, no painel de administração e a pasta com o executável já também deletada. Porém o registro do serviço ainda persiste. Para apagá-lo utilize o comando abaixo no console elevado:
sc delete [Service Name]
Para pegar facilmente o nome do serviço, clique com o botão direito do mouse no serviço, e no menu de contexto escolha Properties. A janela que abrirá, já trará o Service Name selecionado, só clicar CTRL + C, veja abaixo.
Depois é só colar no console. Lembre-se de fechar a janela Properties, ou receberá um pequeno alerta de erro quando o serviço for deletado.
Deletando corretamente um Agent
Apagar diretamente a pasta será gerado um erro.
porém é possível forçar a remoção,
A sequência correta para remover um Agent é:
- Parar o serviço do Agent, com o comando
sc stop [Service Name]
- Apagar o registro do serviço
sc delete [Service Name]
- Apagar o registro do Agent no TFS/VSTS
- Por fim apagar a pasta em que o Agent havia sido configurado
Update do Agent
No VSTS o update geral do produto é feito a cada entrega de Sprint, no TFS quando é instalado o pacote de Update. Com isso os Agents podem ser atualizados, ou seja, se for feita uma nova instalação, baixe o ZIP que terá a nova versão. Mas e quanto aos Agents já instalados? É preciso removê-los e re-instalar? Não.
Clicando no menu de contexto do Pool ou da Queue, existe a opção Update All Agents. Que irá forçar uma atualização geral.
Sobre a configuração
Abrindo o arquivo ConfigureAgent.cmd, temos o seguinte código:
@echo off REM For usage, pass /? setlocal if defined VERBOSE_ARG ( set VERBOSE_ARG='Continue' ) else ( set VERBOSE_ARG='SilentlyContinue' ) REM Unblock the files for MEF even if the policy settings don't require it. REM VsoAgent.exe also performs the unblock, so even if configure is performed REM using VsoAgent.exe, the unblock will not be missed. It's better to perform REM the unblock here too in case the policy requires it to run VsoAgent.exe. powershell.exe -ExecutionPolicy Bypass -Command "$VerbosePreference = %VERBOSE_ARG% ; Get-ChildItem -LiteralPath '%~dp0' | ForEach-Object { Write-Verbose ('Unblock: {0}' -f $_.FullName) ; $_ } | Unblock-File | Out-Null ; Get-ChildItem -Recurse -LiteralPath '%~dp0Agent' | ForEach-Object { Write-Verbose ('Unblock: {0}' -f $_.FullName) ; $_ } | Unblock-File | Out-Null" "%~dp0Agent\VsoAgent.exe" /configure %*
A principal parte é que será rodado uma chamada ao Powershell que irá executar alguns comandos para pegar path, arquivos, … mas o que importa é o executável VsoAgent.exe, vamos dar uma olhada no seu help:
VsoAgent.exe /?
Esse executável tem diversos parâmetros, todas as opções que digitamos via configuração podem ser passadas por parâmetro! Diretamente para o ConfigureAgent.cmd, então se temos previamente o Pool, usuário, etc… podemos criar um script e fazer o deploy automatizado de novos Agents de deploy pelo próprio Release do TFS / VSTS!
Emmanuel Brandão