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

Dia 3: Containers Docker e CI CD · Changes

Page history
Update Dia 3: Containers Docker e CI CD authored Jul 22, 2021 by Henrique Reis Kops's avatar Henrique Reis Kops
Hide whitespace changes
Inline Side-by-side
Dia-3:-Containers-Docker-e-CI-CD.md
View page @ 5ef03ecb
......@@ -4,81 +4,132 @@ Ao final deste roteiro, o aluno terá construído uma pipeline de integração e
## Pré requisitos:
- O aluno deve possuir uma [conta na AWS](https://aws.amazon.com/pt/free/?trk=ps_a134p0000078Pq7AAE&trkCampaign=acq_paid_search_brand&sc_channel=ps&sc_campaign=acquisition_BR&sc_publisher=google&sc_category=core-main&sc_country=BR&sc_geo=LATAM&sc_outcome=acq&sc_detail=aws&sc_content=Brand%20Core%20AWS_p&sc_matchtype=p&sc_segment=507891927302&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Core-Main|Core|BR|EN|Text|xx|PH&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&ef_id=Cj0KCQjw_8mHBhClARIsABfFgpjy82IrDkpFiF4rg2TmvSVPv9w1kh8VX6-v5vagE2pGyFEFq0qzV1waAjHBEALw_wcB:G:s&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all)
- O aluno deve possuir uma conta na [AWS](https://aws.amazon.com/pt/what-is-aws/)
- O aluno deve ter conhecimentos básicos em [Docker](https://labs.play-with-docker.com/).
> :point_right: [Manual de criar conta](https://tools.ages.pucrs.br/modelos/estudos/tutorialFluxoAges/blob/916322335b7bd2fa9fa338ff6e74bcf93bc6bbe0/Criando_sua_conta_pessoal_na_AWS.pdf)
> :point_right: [Informações sobre o nível gratuito da AWS](https://aws.amazon.com/pt/free/?trk=ps_a134p0000078Pq7AAE&trkCampaign=acq_paid_search_brand&sc_channel=ps&sc_campaign=acquisition_BR&sc_publisher=google&sc_category=core-main&sc_country=BR&sc_geo=LATAM&sc_outcome=acq&sc_detail=aws&sc_content=Brand%20Core%20AWS_p&sc_matchtype=p&sc_segment=507891927302&sc_medium=ACQ-P%7CPS-GO%7CBrand%7CDesktop%7CSU%7CCore-Main%7CCore%7CBR%7CEN%7CText%7Cxx%7CPH&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&ef_id=Cj0KCQjw_8mHBhClARIsABfFgpjy82IrDkpFiF4rg2TmvSVPv9w1kh8VX6-v5vagE2pGyFEFq0qzV1waAjHBEALw_wcB:G:s&s_kwcid=AL!4422!3!507891927302!p!!g!!aws&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all)
## Passo a passo
### Parte 1 - Criação de um modelo de execução
```sh
#!/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 gitlab 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 \
--locked \
--paused \
--executor docker \
--docker-image docker:dind
# configure gitlab runner
cat > /srv/gitlab-runner/config/config.toml << EOF
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "gitlab-runner"
url = "https://tools.ages.pucrs.br"
token = "7Hu-XErZW6f1W_zt21kg"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "docker:dind"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
shm_size = 0
EOF
```
> :warning: Repare em qual zona de disponibilidade você está criando sua infraestrutura!
> :question: 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)`
7. 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**
- :warning: Baixe o arquivo pois a AWS não realiza backup deste certificado!
8. Na seção **Network Configuration** selecionar o grupo de segurança criado (ex.: `gitlab-runner-sg`)
9. Na seção **Advanced Details** acessar o campo de texto **User Data** e inserir o seguinte *shell scrpit*:
```sh
#!/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
`TODO`
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**
21. 20. 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
`TODO`
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
`TODO`
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. :warning: 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
`TODO`
Clone repository
  • Dia 1: Frontend, Backend e Git
  • Dia 2: Amazon Web Services (AWS)
  • Dia 3: Containers Docker e CI CD
  • Home