... | ... | @@ -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/)
|
|
|
|
|
|
## Passo a passo
|
|
|
- O aluno deve ter conhecimentos básicos em [Docker](https://labs.play-with-docker.com/).
|
|
|
|
|
|
### Parte 1 - Criação de um modelo de execução
|
|
|
> :point_right: [Manual de criar conta](https://tools.ages.pucrs.br/modelos/estudos/tutorialFluxoAges/blob/916322335b7bd2fa9fa338ff6e74bcf93bc6bbe0/Criando_sua_conta_pessoal_na_AWS.pdf)
|
|
|
|
|
|
```sh
|
|
|
#!/bin/bash
|
|
|
> :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)
|
|
|
|
|
|
# install docker
|
|
|
yum update -y
|
|
|
amazon-linux-extras install docker -y
|
|
|
yum install docker -y
|
|
|
service docker start
|
|
|
usermod -a -G docker ec2-user
|
|
|
## Passo a passo
|
|
|
|
|
|
# run gitlab runner container
|
|
|
docker run -d --name gitlab-runner --restart always \
|
|
|
> :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 gitlab runner
|
|
|
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register \
|
|
|
# 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 \
|
|
|
--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
|
|
|
```
|
|
|
--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` |