Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Create a new issue
  • Jobs
  • Issue Boards
Collapse sidebar
  • workshop-ages-winter-2021
  • wiki
  • Wiki
  • Dia 3: Containers Docker e CI CD

Last edited by Angelo Calebe Araujo da Rocha Jul 22, 2021
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Dia 3: Containers Docker e CI CD

Roteiro de trabalho

Ao final deste roteiro, o aluno terá construído uma pipeline de integração e entrega contínua básica em cima das aplicações apresentadas, que serão executadas em containers cujas imagens serão publicadas no Amazon ECR . Esta pipeline será executada pelo GitLab Runner que será executado sobre uma instância EC2 Spot com escalabilidade automática.

Pré requisitos:

  • O aluno deve possuir uma conta na AWS

  • O aluno deve ter conhecimentos básicos em Docker.

👉 Manual de criar conta

👉 Informações sobre o nível gratuito da AWS

Passo a passo

⚠ Repare em qual zona de disponibilidade você está criando sua infraestrutura!

❓ A notação < x > significa que x deve ser modificado

Parte 1 - Criação do nodo para execução do GitLab Runner

Inicialmente é necessário definir quais portas do nodo estarão expostas na internet:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Security Groups
  3. Clicar em Create Security Group
  4. Inserir um nome (ex.: gitlab-runner-sg), descrição e selecionar a VPC default
  5. Na seção Inbound Rules acrescentar as seguintes regras:
    • type SSH e origin 0.0.0.0/0
  6. Clicar em Create Security Group

Para automatizar a criação do GitLab Runner iremos utilizar um template de execução:

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Launch Templates
  3. Clicar em Create Launch Template
  4. Inserir um nome (ex.: gitlab-runner-template) e descrição
  5. Na seção Amazon Machine Image selecionar Amazon Linux 2 AMI (x86)
  6. Na seção Key pair clicar em Create New Key Pair (caso não tenha criado anteriormente)
    • Inserir um nome (ex.: workshop-app) e clicar em Create New Key Pair
    • ⚠ Baixe o arquivo pois a AWS não realiza backup deste certificado!
  7. Na seção Network Configuration selecionar o grupo de segurança criado (ex.: gitlab-runner-sg)
  8. Na seção Advanced Details acessar o campo de texto User Data e inserir o seguinte shell scrpit:
    #!/bin/bash
    
    # install docker
    yum update -y 
    amazon-linux-extras install docker -y
    yum install docker -y
    service docker start
    usermod -a -G docker ec2-user
    
    # run gitlab runner container
    docker run -d --name gitlab-runner --restart always \
        -v /srv/gitlab-runner/config:/etc/gitlab-runner \
        -v /var/run/docker.sock:/var/run/docker.sock \
        gitlab/gitlab-runner:latest
    
    # register runner
    docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
        --non-interactive \
        --url https://tools.ages.pucrs.br/ \
        --registration-token X6kyNTAx9jyqFdZXWhHU \
        --name gitlab-runner \
        --executor docker \
        --docker-image docker:dind \
        --docker-privileged
        --docker-volumes "/var/run/docker.sock:/var/run/docker.sock"
        --locked
    
    # set cronjob for cleanup
    echo "0 */1 * * * docker system prune -af" | crontab -

Parte 2 - Criação de grupos auto scaling

  1. Acessar o painel do serviço EC2 no console da AWS
  2. No menu lateral, acessar Autoscaling Groups
  3. Clicar em Create Autoscaling Group
  4. Inserir um nome (ex.: gitlab-runner-autoscaling), selecionar o modelo de execução criado (ex.: gitlab-runner-template) e clicar Next
  5. Selecionar Combine buy options and instance types
  6. Em Instance distribution colocar 100% SPOT
  7. Em instance type, selecionar tipo desejado (ex.: t3.medium), dar peso 1, e para as demais colocar pesos maiores que 1
  8. Em subnets selecionar todas
  9. Clicar em Next
  10. Clicar em Next
  11. Em Desired Capacity e Max capacity colocar 1, já em Min capacity colocar 0
  12. Clicar em Next
  13. Clicar em Next
  14. Clicar em Next
  15. Clicar em Create Autoscaling Group
  16. Acessar novamente no painel do serviço EC2 no console da AWS
  17. No menu lateral, acessar Autoscaling Groups
  18. Selecionar o grupo de autoscaling criado e navegar para Automatic Scaling
  19. Em Scheduled Actions clicar em Create Scheduled Action
  20. Inserir um nome (ex.: start-runner) definir Desired, Min e Max como 1, inserir a recorrência desejada e clicar em Create
    1. Inserir um nome (ex.: stop-runner) definir Desired, Min e Max como 0, inserir a recorrência desejada e clicar em Create

Parte 3 - Criação de um repositório no ECR

Para que as imagens possem ser publicadas no repositório da AWS é necessario criar o seu repositório ECR (Elastic Container Registry):

  1. Acessar o painel do serviço ECR no console da AWS
  2. No menu lateral, acessar Repositories
  3. Clicar em Create Repository
  4. Inserir um nome (ex.: my-app)
  5. Clicar em Create Repository

Parte 4 - Configuração no GitLab

Para que a pipeline de CI/CD consiga acessar os serviços da AWS é necessário que se tenha em mãos o seu access key id e secret access key:

  1. Acessar o painel do serviço IAM no console da AWS
  2. No menu lateral, acessar Users
  3. Clicar no seu usuário
  4. Em Security Credentials clicar em Create Acess Key
  5. ⚠ Faça o download do arquivo CSV gerado!

Para que seja possível executar o CI/CD com sucesso é necessário configurar algumas variáveis de ambiente no GitLab:

  1. Acessar o seu GitLab e, em Groups escolher o seu grupo
  2. No menu lateral, em Settings selecionar CI/CD
  3. Expandir Variables e inserir as seguintes variáveis, sempre selecionando a opção Protected:
    • Em key inserir AWS_ACCESS_KEY_ID e em value inserir a access key id criada no IAM
    • Em key inserir AWS_SECRET_ACCESS_KEY e em value inserir a secret access key criada no IAM
    • Em key inserir SSH_PRIVATE_KEY e em value inserir o conteúdo do certificado .pem utilizando o comando cat <nome-do-certificado>.pem

Parte 5 - Criação da pipeline de CI/CD

Por fim, é necessário que a pipeline seja criada no repositório desejado, onde o nome do arquivo deve ser .gitlab-ci.yaml. Abaixo se encontram as pipeline utilizadas no backend e frontend do workshop, porém não são "balas de prata", portanto o aluno deverá ajustá-las de acordo com a sua demanda:

  • Frontend
  • Backend

⚠ Deve-se modificar os repositórios das pipelines:

  1. Acessar novamente o painel do serviço ECR no console da AWS
  2. No menu lateral, acessar Repositories e copiar a URI do repositório
  3. Alterar as ocorrências de 029236691098.dkr.ecr.us-east-2.amazonaws.com/<tag-do-app> pelo seu repositório ECR

Agora todo commit realizado no seu repositório será enviado ao Swarm executando na AWS, parabéns! 🎉 👏 🚀

Referências

TODO

Clone repository
  • Dia 1: Frontend, Backend e Git
  • Dia 2: Amazon Web Services (AWS)
  • Dia 3: Containers Docker e CI CD
  • Home