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 ...@@ -4,81 +4,132 @@ Ao final deste roteiro, o aluno terá construído uma pipeline de integração e
## Pré requisitos: ## 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 ## Passo a passo
### Parte 1 - Criação de um modelo de execução > :warning: Repare em qual zona de disponibilidade você está criando sua infraestrutura!
```sh > :question: A notação **< x >** significa que **x** deve ser modificado
#!/bin/bash
### Parte 1 - Criação do nodo para execução do GitLab Runner
# install docker
yum update -y Inicialmente é necessário definir quais portas do nodo estarão expostas na internet:
amazon-linux-extras install docker -y
yum install docker -y 1. Acessar o painel do serviço **EC2** no console da AWS
service docker start 2. No menu lateral, acessar **Security Groups**
usermod -a -G docker ec2-user 3. Clicar em **Create Security Group**
4. Inserir um nome (ex.: `gitlab-runner-sg`), descrição e selecionar a **VPC default**
# run gitlab runner container 5. Na seção **Inbound Rules** acrescentar as seguintes regras:
docker run -d --name gitlab-runner --restart always \ - **type** `SSH` e **origin** `0.0.0.0/0`
-v /srv/gitlab-runner/config:/etc/gitlab-runner \ 6. Clicar em **Create Security Group**
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest Para automatizar a criação do GitLab Runner iremos utilizar um template de execução:
# register gitlab runner 1. Acessar o painel do serviço **EC2** no console da AWS
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \ 2. No menu lateral, acessar **Launch Templates**
--non-interactive \ 3. Clicar em **Create Launch Template**
--url https://tools.ages.pucrs.br/ \ 4. Inserir um nome (ex.: `gitlab-runner-template`) e descrição
--registration-token X6kyNTAx9jyqFdZXWhHU \ 5. Na seção **Amazon Machine Image** selecionar `Amazon Linux 2 AMI (x86)`
--name gitlab-runner \ 7. Na seção **Key pair** clicar em **Create New Key Pair** (caso não tenha criado anteriormente)
--locked \ - Inserir um nome (ex.: `workshop-app`) e clicar em **Create New Key Pair**
--paused \ - :warning: Baixe o arquivo pois a AWS não realiza backup deste certificado!
--executor docker \ 8. Na seção **Network Configuration** selecionar o grupo de segurança criado (ex.: `gitlab-runner-sg`)
--docker-image docker:dind 9. Na seção **Advanced Details** acessar o campo de texto **User Data** e inserir o seguinte *shell scrpit*:
```sh
# configure gitlab runner #!/bin/bash
cat > /srv/gitlab-runner/config/config.toml << EOF
concurrent = 1 # install docker
check_interval = 0 yum update -y
amazon-linux-extras install docker -y
[session_server] yum install docker -y
session_timeout = 1800 service docker start
usermod -a -G docker ec2-user
[[runners]]
name = "gitlab-runner" # run gitlab runner container
url = "https://tools.ages.pucrs.br" docker run -d --name gitlab-runner --restart always \
token = "7Hu-XErZW6f1W_zt21kg" -v /srv/gitlab-runner/config:/etc/gitlab-runner \
executor = "docker" -v /var/run/docker.sock:/var/run/docker.sock \
[runners.custom_build_dir] gitlab/gitlab-runner:latest
[runners.cache]
[runners.cache.s3] # register runner
[runners.cache.gcs] docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
[runners.cache.azure] --non-interactive \
[runners.docker] --url https://tools.ages.pucrs.br/ \
tls_verify = false --registration-token X6kyNTAx9jyqFdZXWhHU \
image = "docker:dind" --name gitlab-runner \
privileged = true --executor docker \
disable_entrypoint_overwrite = false --docker-image docker:dind \
oom_kill_disable = false --docker-privileged
disable_cache = false --docker-volumes "/var/run/docker.sock:/var/run/docker.sock"
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"] --locked
shm_size = 0
EOF # set cronjob for cleanup
``` echo "0 */1 * * * docker system prune -af" | crontab -
```
### Parte 2 - Criação de grupos auto scaling ### 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 ### 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 ### 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 ### Parte 5 - Criação da pipeline de CI/CD
`TODO` `TODO`
Clone repository
  • Dia 1: Frontend, Backend e Git
  • Dia 2: Amazon Web Services (AWS)
  • Dia 3: Containers Docker e CI CD
  • Home