Bem, vamos lá, o runner é quem será o responsável por executar nosso projeto correto? O que acontece é que temos os seguintes tipos de runners:
- Runners específicos: São indicados para trabalhos com requisitos especiais ou para projetos com uma demanda específica;
- Runners de grupo: São indicados quando você tem vários projetos em um grupo e deseja que todos os projetos tenham acesso a um conjunto de runners;
- runners compartilhados: São indicados para tarefas com requisitos semelhantes, entre vários projetos. Em vez de ter vários Runners ociosos para muitos projetos, você pode ter um único ou um pequeno número de Runners que lidam com vários projetos.
Bem, o que usamos durante o curso foi um runner compartilhado, onde precisar que o runner execute os diferentes tipos de tarefas correto? Temos vários estágios, como o de "pre-build", "build", "test", entre outros, isso fica ao seu critério! E isso seria problemático para grandes quantidades de projetos, se não fosse por tags. Assim, como colocamos a tag, o runner só poderá executar os
os trabalhos que estão equipados para executar.
No decorrer do curso você vai entender melhor o porque usamos as tags, mas é o seguinte, note que parar conseguirmos executar a parte de build do docker, ou seja a criação da imagem docker, não precisamos utilizar um runner, apenas precisamos utilizar uma imagem docker base, ou seja a imagem docker:19.03.0-dind
.
Porém no passo seguinte, que é o passo de "build-project", temos que ter essa imagem, feita no passo "build-docker" (a imagem docker:19.03.0-dind
junto com os nossos arquivos) para podermos adicionar um novo serviço, que é o serviço (entenda como outra imagem) do "mysql" e suas variáveis para podermos utilizar o MySQL, e também as variáveis do nosso projeto (que é em python). Nesse momento precisamos utilizar um runner, ou seja uma máquina docker para subir o container da aplicação, juntamente com o container do MySQL.
Até aqui, você pode se achar que ainda não tem necessidade de tags, porém pense que no próximo passo precisamos executar testes automatizados, ou seja é a etapa de "test-project", ou seja precisamos indicar que queremos que o runner, tenha um container docker com nosso projeto, um container MySQL, e nosso runner com a tag "executor-tarefas" já tem isso tudo pronto correto? Então podemos utilizar o mesmo, apenas alterando o script que vamos executar, no caso agora não queremos executar as migrations e sim os testes, então utilizamos a mesma tag (executor-tarefas). Porém se precisarmos utilizar esse runner para um projeto que foi feito em Java, teremos dependências e passos diferentes correto? Podemos destruir tudo e recriar novamente para o projeto Java, mas logo teremos outro projeto em Python, isso começa a ser trabalhoso, o que poderíamos fazer, criar uma outra tag com o nome "executor-tarefas-jar", e assim poderíamos utilizar os dois projetos no mesmo runner, apenas com tags diferentes.
Fala pra gente se você entendeu!