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):

Profile do VSTS mostrando o link de segurança

Escolha “Personal access tokens” e então clique em “Add”:

Configuração de Personal Access Tokens (PAT)

Escolha um nome e cliquem em “Create Token”:

Dados de input do PAT

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:

PAT criado

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”.

Variáveis de ambiente AGENT_PAT e VS_TENANT

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:

Agente criado e rodando com docker run

E aqui pode ver também ele criado no VSTS, note nas capabilities a versão do .NET CLI:

Agente disponível no VSTS

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:

Log da criação do agente usando docker-compose

Abaixo, os 2 agentes criados:

Agent pool mostrando os agentes criados com docker-compose

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.