A Microsoft, seguindo a ideia de que tudo agora é multi-plataforma, possui um agente de build para o VSTS/TFS, multi-plataforma. Ele roda no Windows, Linux e Mac, e é com ele que você vai buildar Node, Java, Ruby, Python, e qualquer coisa não baseada em Windows (ou até mesmo no Windows). Ele ganha, de graça, todo o ambiente em que roda. Por exemplo, no Linux, você tem o bash disponível para as builds (em geral). Até agora, esse agente era escrito em Node.js. Isso está mudando, e o novo vai ser feito usando .NET Core, e pode ser encontrado no Github. Lá tem os mecanismos de instalação para as 3 plataformas.
Mas, mais legal que isso, é usar o Docker pra isso. É isso que vou mostrar aqui.
Obtendo a chave de acesso
Antes de mais nada, você precisa, primeiro, obter uma chave de acesso. Vou mostrar como fazer.
Acesse sua conta do VSTS, clique no seu nome, e escolha “My Security” (clique em qualquer das imagens para ampliar):
Escolha “Personal access tokens” e então clique em “Add”:
Escolha um nome e cliquem em “Create Token”:
Ele vai criar a chave e te mostrar. Copie, porque você só vai vê-la dessa vez, e se você perder esta chave, vai ter que criar outra:
Criando o agente
Já criei um repositório no Github que você pode usar para criar a imagem e estender seu agente, mas você pode usar minha imagem do Docker Hub, se preferir, a imagem se chama giggio/vsts-agent. Vou assumir que foi esse nome que você usou, a partir daqui. Se você preferiu criar a sua imagem, faça isso com:
docker build --tag usuario/nomedaimagem .
Ou, pode usar o docker-compose (note o docker-compose.yml no diretório):
docker-compose build
Você vai precisar definir duas variáveis de ambiente, no mínimo. O AGENT_PAT (Personal Access Token), obtido no passo passado, e ao VS_TENANT, que é o domínio que você usa no VSTS, por exemplo, o meu é “giggio”, porque minha conta é “giggio.visualstudio.com”.
No Linux e no Mac você faz isso com “export AGENT_PAT=foo”.
Você pode ainda definir o nome do do agent pool, com a variável AGENT_POOL.
Então, basta rodar. A linha de comando é:
docker run --name vsts-agent -ti -e VS_TENANT=$env:VS_TENANT -e AGENT_PAT=$env:AGENT_PAT -d giggio/vsts-agent
No Linux ou Mac seria:
docker run --name vsts-agent -ti -e VS_TENANT=$VS_TENANT -e AGENT_PAT=$AGENT_PAT -d giggio/vsts-agent
O nome passado para –name é você quem define, eu escolhi “vsts-agent”.
Abaixo, você pode ver o agente criado:
E aqui pode ver também ele criado no VSTS, note nas capabilities a versão do .NET CLI:
O id do agente seria o mesmo da janela de cima, mas eu recriei enquanto escrevia o post. Seria legal também passar uma política de restart para que quando o daemon do docker subir, o agente inicia junto.
Escalando com Docker compose:
Do jeito que expliquei acima, você consegue criar novos agentes simplesmente rodando um novo “docker run”.
Mais fácil que isso é usar docker-compose para escalar. Com o comando:
docker-compose scale agent=2
Você cria outro agente. O número de agentes é você que decide, se passar “agent=10”, ele vai manter 10 agentes no ar, no total.
É importante deixar claro que nesse caso as variáveis citadas acima devem, obrigatoriamente, estar definidas.
Vejam os logs, como ficam:
Abaixo, os 2 agentes criados:
Conclusão
Não há mais porque sofrer para criar um agente de build do VSTS. Use docker.
No próximo post eu vou mostrar todo ciclo de build e release que estamos usando na Lambda3 para fazer gestão dos nossos projetos baseados em docker.
E aí, o que acha? Vamos usar esse agente de build? Conte aí nos comentários o que você tem feito para criar esse agentes.
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.