3
respostas

Não fica claro pra quer serve os runners

No job "build-docker" usamos o "services: docker:19.03.0-dind" para poder usar comandos docker nesse job. Mas pq não usamos o mesmo no job "build-project"? A "tags" já fez isso pra gente? Então poderiamos usar "services: docker:19.03.0-dind" no lugar de tags?

3 respostas

Olá Erick, tudo bem? Na verdade não Erick, o que acontece é que no job "build-docker" fazemos apenas a criação e o push da imagem para o Docker Hub, e não precisamos executar nada com base nessa imagem que criamos. Já no job seguinte que é o job "build-project" vamos executar a implantação do nosso projeto, e o projeto precisa de algumas coisas para funcionar, como por exemplo, a criação das migrations e tabelas no banco de dados, por isso então colocamos a tag: executor-tarefas, porque nesse ponto precisamos executar o nosso runner com a nossa imagem que criamos no job "build-docker".

Se fossemos utilizar o "services: docker:19.03.0-dind" teriamos que novamente criar a imagem, porém o que desejamos é deixar tudo isso de forma automatizada, logo se no job "build-docker" criamos e subimos a imagem para o Docker Hub então no job "build-project" podemos simplesmente utilizar a imagem no nosso runner em vez de refazer o que já foi feito no job anterior.

Espero ter esclarecido sua dúvida!

Então no job "build-project" precisamos na tag: executor-tarefas para rodar os comandos de migrations certo? Mas pq ao do push acorre o erro "python not found"? A ideia de tags da a entender que você tem o ambiente configurado, nesse caso o python, e não iria necessitar colocar uma imagem nesse job. Bem ainda estou confuso quanto ao uso do runner, ainda não fez sentido colocar ele.

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!