Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Teste-Devops-DataRisk #2

Open
wants to merge 104 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
79900ca
create instance ec2
richardneves Nov 9, 2023
4736874
create files terraform
richardneves Nov 9, 2023
1e98ede
create workflows
richardneves Nov 9, 2023
b79fd68
create more workflos
richardneves Nov 9, 2023
2c0cfea
create more workflos
richardneves Nov 9, 2023
c7896e0
testando workflows
richardneves Nov 9, 2023
668f145
alterando workflow
richardneves Nov 9, 2023
20c2313
teste
richardneves Nov 9, 2023
47947dc
workflow
richardneves Nov 9, 2023
922e017
testando runner
richardneves Nov 9, 2023
a33275f
testando runner
richardneves Nov 9, 2023
54641f2
testando
richardneves Nov 9, 2023
6d49c14
testando
richardneves Nov 9, 2023
dfc749c
removing files actions
richardneves Nov 9, 2023
6545bbd
sending files actions
richardneves Nov 9, 2023
17c98ab
runner
richardneves Nov 9, 2023
ac14ca5
testando runner
richardneves Nov 9, 2023
1584f98
teste runner
richardneves Nov 9, 2023
8c2e93f
testando runner
richardneves Nov 9, 2023
343ce15
runner
richardneves Nov 9, 2023
3cec5ad
runner failed
richardneves Nov 9, 2023
48dd2cb
Update apply-dev.yml
richardneves Nov 9, 2023
0e0be16
Update apply-dev.yml
richardneves Nov 9, 2023
7bde710
Update apply-dev.yml
richardneves Nov 9, 2023
13ef030
Update apply-dev.yml
richardneves Nov 9, 2023
76525e4
Update apply-dev.yml
richardneves Nov 9, 2023
8dd4112
Update apply-dev.yml
richardneves Nov 9, 2023
ea39dd3
Update apply-dev.yml
richardneves Nov 9, 2023
b7b4a3d
Update apply-dev.yml
richardneves Nov 9, 2023
70304ca
Update apply-dev.yml
richardneves Nov 9, 2023
233b5f7
Update apply-dev.yml
richardneves Nov 9, 2023
14ad035
teste
richardneves Nov 9, 2023
463aae7
teste
richardneves Nov 9, 2023
ecc5a58
Update apply-dev.yml
richardneves Nov 9, 2023
d652875
testando runner
richardneves Nov 9, 2023
b9b9667
testando runner novamente
richardneves Nov 9, 2023
e52cb2f
destruindo ec2
richardneves Nov 9, 2023
db5acd4
sending destroy file
richardneves Nov 9, 2023
8aba62b
sending destroy file1
richardneves Nov 9, 2023
886874f
sending destroy file2
richardneves Nov 9, 2023
e62ac2f
sending destroy file3
richardneves Nov 9, 2023
0340a5b
docker file
richardneves Nov 11, 2023
ccf8f32
registry
richardneves Nov 11, 2023
6de4305
testando actions
richardneves Nov 11, 2023
d2eb08d
test files
richardneves Nov 11, 2023
72b6677
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
7845ad1
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
bd6643a
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
46505b8
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
692953f
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
dae01d9
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
3bd4ce8
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
ea95ce4
Update apply-dev.yml
richardneves Nov 11, 2023
4d84f55
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
bb029a0
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
749b6f6
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
102f796
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
ecd12fa
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
8a69864
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
8269b9a
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
899151d
Update push-registry-ghcr.yml
richardneves Nov 11, 2023
d994b9a
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
d42f297
Create Dockerfile
richardneves Nov 12, 2023
a58c237
Update Dockerfile
richardneves Nov 12, 2023
f1a3843
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
14b2377
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
3200557
Update Dockerfile
richardneves Nov 12, 2023
abc79b9
Delete projeto-fsharp/Dockerfile
richardneves Nov 12, 2023
513fd65
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
e01da0b
Create Dockerfile 2
richardneves Nov 12, 2023
a82f45a
Update Dockerfile 2
richardneves Nov 12, 2023
67f34fd
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
2f5dc00
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
66e5747
Update Dockerfile 2
richardneves Nov 12, 2023
066dd4a
Update Dockerfile
richardneves Nov 12, 2023
647d366
Update Dockerfile
richardneves Nov 12, 2023
ac79126
Update Dockerfile
richardneves Nov 12, 2023
98286a2
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
f0c3f08
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
b2b10ee
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
d37ec45
alterando dockerfile
richardneves Nov 12, 2023
12ed4cb
alterando workflow
richardneves Nov 12, 2023
3c85ce8
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
1c010d9
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
cca5bfa
Update push-registry-ghcr.yml
richardneves Nov 12, 2023
d85258a
Update apply-dev.yml
richardneves Nov 12, 2023
4c7368a
alterando terraform
richardneves Nov 12, 2023
e70278a
Merge branch 'master' of github.com:richardneves/Datapi-DevOps-Challenge
richardneves Nov 12, 2023
1346a8e
teste eks
richardneves Nov 12, 2023
9a9bf0a
teste eks1
richardneves Nov 12, 2023
f20351f
teste k3s1
richardneves Nov 12, 2023
983b3c8
teste k3s3
richardneves Nov 13, 2023
79fdd1e
teste k3s4
richardneves Nov 13, 2023
e18984b
teste k3s4
richardneves Nov 13, 2023
d8d6907
teste k3s5
richardneves Nov 13, 2023
01acee4
teste k3s6
richardneves Nov 13, 2023
c3a94c4
teste1
richardneves Nov 13, 2023
3fbff85
teste k3s
richardneves Nov 13, 2023
e328f41
teste k3s2
richardneves Nov 13, 2023
068c24c
Update apply-dev.yml
richardneves Nov 13, 2023
b243372
Update apply-dev.yml
richardneves Nov 13, 2023
4cc12f1
Teste k3s
richardneves Nov 13, 2023
c2060a7
teste k3s 4
richardneves Nov 13, 2023
58124fb
teste k3s 5
richardneves Nov 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions .github/workflows/apply-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Apply terraform resources dev

on: [workflow_dispatch]

env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

jobs:
apply-dev:
name: 'terraform apply dev'
runs-on: ubuntu-latest
env:
TF_WORKING_DIR: 'terraform'

defaults:
run:
shell: bash
working-directory: ${{ env.TF_WORKING_DIR }}

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 0.15.5

- name: Terraform fmt
id: fmt
run: terraform fmt

- name: Terraform Init
id: init
run: terraform init

- name: Terraform Validate
id: validate
run: terraform validate -no-color

- name: Terraform Apply
run: terraform apply -auto-approve


45 changes: 45 additions & 0 deletions .github/workflows/destroy-apply.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: Destroy terraform resources on the given folder

on:
workflow_dispatch:
inputs:
dir:
description: 'Directory with resources to be destroyed'
required: true
default: 'terraform'

env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

jobs:
destroy-dev:
name: 'terraform destroy dev'
runs-on: ubuntu-latest
env:
TF_WORKING_DIR: ${{ github.event.inputs.dir }}

defaults:
run:
shell: bash
working-directory: ${{ env.TF_WORKING_DIR }}

steps:
- name: Checkout
uses: actions/checkout@v2

- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
terraform_version: 0.15.5

- name: Terraform Init
id: init
run: terraform init

- name: Terraform Validate
id: validate
run: terraform validate -no-color

- name: Terraform Destroy
run: terraform destroy -auto-approve
53 changes: 53 additions & 0 deletions .github/workflows/push-registry-ghcr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# name: Docker Image GHCR

# on:
# workflow_dispatch

# jobs:
# build_and_publish:
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v3
# - name: GitHub Docker registry
# uses: matootie/[email protected]
# with:
# accessToken: ${{secrets.GH_PAT}}
# tag: latest
# tag_with_ref: true
# tag_with_sha: true

# # Dockerfile 2

name: build-and-publish-container-image

on: [workflow_dispatch]

jobs:
build-and-publish-container-image:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Build and tag Docker image
run: |
short_commit=$(git rev-parse --short HEAD)
cd projeto-fsharp
docker build . -t ghcr.io/richardneves/projeto-fsharp:latest -t ghcr.io/richardneves/projeto-fsharp:${short_commit}

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GH_PAT }}

- name: Push Docker image
run: |
short_commit=$(git rev-parse --short HEAD)
docker push ghcr.io/richardneves/projeto-fsharp:${short_commit}
docker push ghcr.io/richardneves/projeto-fsharp:latest
36 changes: 36 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Local .terraform directories
**/.terraform/*
/.terraform/*

# .tfstate files
*.tfstate
*.tfstate.*

# Crash log files
crash.log

# Ignore any .tfvars files that are generated automatically for each Terraform run. Most
# .tfvars files are managed as part of configuration and so should be included in
# version control.
#
# example.tfvars

# Ignore override files as they are usually used to override resources locally and so
# are not checked in
override.tf
override.tf.json
*_override.tf
*_override.tf.json

# Include override files you do wish to add to version control using negated pattern
#
# !example_override.tf

# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
# example: *tfplan*

.idea
*.zip
node_modules
.terraform
.DS_STORE
36 changes: 15 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,24 @@
# Datapi DevOps Challenge

Para melhor entendermos o seu nível técnico, nós preparamos este desafio como parte do nosso processo de contratação. Por isso, tenha em mente que não é necessário cumprir com todos os pontos mencionados, nem cumpri-los em uma ordem específica.
Documentação do projeto

O importante é entregar o que você conseguir fazer, com a devida documentação.
# Instanciação de Maquina Virtual EC2 AWS:

# Desafios
Foi escolhida a cloud AWS para realização do projeto e Deploy por questão de familiaridade. Porém não afeta no funcionamento do projeto.

Segue abaixo uma lista de desafios abrangendo várias áreas de responsabilidade para um DevOps no time do Datapi. Nossa sugestão é tentar seguir cada item na ordem apresentada, porém você está livre para atuar nos pontos que quiser e tiver mais familiaridade.
Onde é utilizado pelo arquivo apply-dev.yml para deploy na AWS. Utilizando Steps e jobs basicos para entrega da maquina EC2 na AWS

- Instanciar uma VM numa cloud provider. Recomendação: Microsoft Azure.
- Criar a configuração dessa VM usando uma ferramenta de IaC (Infrastructure as Code). Recomendação: Terraform.
- Criar um job de CI (Continuous Integration) para aplicar a configuração da ferramenta de provisionamento. Recomendação: GitHub Actions.
- Adicionar um Dockerfile à aplicação disponibilizada na pasta `projeto-fsharp/` para containerizar o mesmo. Note que foi utilizada a linguagem F# (.NET) para escrever a aplicação. Para facilitar o entendimento do projeto, adicionamos um README.md com instruções de teste e uso do mesmo localmente. Você deverá ser capaz de traduzir essas instruções para a criação do Dockerfile.
- Criar um job de CI para enviar a imagem gerada para um Docker Registry. Recomendação: GitHub Container Registry.
- Criar os manifestos YAML para hospedar a aplicação usando Kubernetes. Nesse ponto os testes podem ser realizados apenas localmente, porém devem ser apresentados os arquivos YAML criados.
* Utilizar IaC para configurar o Kubernetes. Recomendação: Terraform.
* Configurar a hospedagem a partir do registry gerado na tarefa anterior.
* Caso possua mais familiaridade, sinta-se motivado a customizar mais as configurações (secrets, ingress, etc.).
- Adicionar um README ao projeto detalhando o processo e justificando as decisões tomadas. Recomendação: Markdown. Todos os refinamentos adicionados nos tópicos mencionados anteriormente, e demais ideias que possam melhorar o projeto serão considerados na avaliação da solução.
# Dockerfile:

Faça um fork e envie um PR com a sua solução, o tempo de entrega é de no máximo 4 dias e será contabilizado a partir da data do fork.
Foi realizado a construção do Docker file MultiStage onde em primeiro momento é possível baixar a imagem da Microsoft com a versão 6.0 do SDK para o bom teste e funcionamento do projeto, realizar copia dos arquivos e pastas principais para aplicação do restore.sh e criação do build.
Na segunda etapa de build é possível realizar a copia do build e armazenar em uma pasta especifica onde será utiliza o resultado do build a exposição da porta e utilização do arquivo ./Server em ENTRYPOINT inicialização em tempo de execução do container.

## Será avaliado:
O DockerFile é utilizado pelo arquivo de esteira na pasta .github/workflows push-registry-ghcr.yml onde existe um job basico de conexão, build e push da imagem para o registry do github onde é possível localizar em packages do repositorio.

- % do que foi entregue em relação ao que foi pedido.
- Qualidade dos aquivos Terraform.
- Boas práticas de infra e uso do Kubernetes.
- Corretude das tarefas.
- Uso eficiente em relação ao custo de máquina.
# Arquivos Terraform

Arquivos básicos onde fazem a construção da EC2 na AWS e em paralelo também fazem a criação do K3S dentro da EC2 da AWS que é uma opção escolhida ao kubernetes pela praticidade em sua configuração. E é realizado o deploy da aplicação via manifesto com shell script.

# Destroy terraform

Existe o arquivo terraform destroy-apply.yml onde é executado manualmente o "destroy" da aplicação criada pelo terraform.
17 changes: 17 additions & 0 deletions projeto-fsharp/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app

COPY . projeto-fsharp
RUN cd projeto-fsharp && ./restore.sh

RUN cd projeto-fsharp && dotnet fake run build.fsx -t "Build"

FROM mcr.microsoft.com/dotnet/sdk:6.0
LABEL org.opencontainers.image.source="https://github.com/richardneves/Datapi-DevOps-Challenge"
WORKDIR /app

COPY --from=build /app/projeto-fsharp/src/Server/out .

EXPOSE 8085

ENTRYPOINT ["./Server"]
1 change: 0 additions & 1 deletion projeto-fsharp/restore.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
set -ex

dotnet tool restore
dotnet paket install
dotnet paket restore
63 changes: 63 additions & 0 deletions terraform/.terraform.lock.hcl

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions terraform/backend.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
terraform {
backend "s3" {
bucket = "richardneves-tfstate"
key = "dev/tfstate-challenge"
region = "us-east-1"
encrypt = true
}
}
17 changes: 17 additions & 0 deletions terraform/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
data "aws_ami" "ubuntu" {
owners = ["amazon"]
most_recent = true
name_regex = "Ubuntu"
}

resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id
instance_type = var.instance_type
security_groups = ["acesso_geral"]
user_data = file("terraformando.sh")
tags = {
Name = "${var.environment}: App"
Env = var.environment
Type = var.instance_type
}
}
Loading