diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..c8be102 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,56 @@ +name: CI-CD +on: + push: + branches: ["main"] + workflow_dispatch: + +jobs: + CI: + runs-on: ubuntu-latest + steps: + - name: Checkout do código fonte + uses: actions/checkout@v4.1.7 + + - name: Login no Docker Hub + uses: docker/login-action@v3.2.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Construção da Imagem Docker e Envio para o Docker Hub + uses: docker/build-push-action@v6.3.0 + with: + context: ./src + push: true + file: ./src/Review-Filmes.Web/Dockerfile + tags: | + xenxem/review-filmes:v${{ github.run_number }} + xenxem/review-filmes:latest + CD: + runs-on: ubuntu-latest + needs: [CI] + steps: + - name: Checkout do código fonte + uses: actions/checkout@v4.1.7 + + - name: Configuração do AWS CLI + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Configuração do Kubeconfig + run: aws eks update-kubeconfig --name eksAula + + - name: Deploy no Kubernetes + uses: Azure/k8s-deploy@v5.0.0 + with: + manifests: | + ./k8s/deployment.yml + images: | + xenxem/review-filmes:v${{ github.run_number }} + + - name: Passo 01 + run: echo "Deploy da aplicação" + diff --git a/2024-07-04 (3).png b/2024-07-04 (3).png new file mode 100644 index 0000000..6e6b3dc Binary files /dev/null and b/2024-07-04 (3).png differ diff --git a/2024-07-04 (4).png b/2024-07-04 (4).png new file mode 100644 index 0000000..276a924 Binary files /dev/null and b/2024-07-04 (4).png differ diff --git a/README-DESAFIO.md b/README-DESAFIO.md new file mode 100644 index 0000000..b8d7928 --- /dev/null +++ b/README-DESAFIO.md @@ -0,0 +1,31 @@ +1 - processo de build da imagem +docker build -t xenxem/review-filmes:v1 -f src/Review-Filmes.Web/Dockerfile src/ + +2 - subida da imagem para meu docker hub +docker push xenxem/review-filmes:v1 + +3 - aplicação do manifesto para criação do cluster com os objetos +kubectl apply -f k8s/deployment.yml + +4 - listagem dos elementos +kubectl get pod + +5 - acesso da aplicação em localhost porta 30000 + +6 - escolha de um pod qualquer para exclusão para testar a resiliência +reviewfilmes-54789cf48f-wwqr5 + +7 - listagem com kubectl get pod para verificar + +8 - alteração do header para v2 em shared/\_Layout.cshtml + +9 - geração da imagem para v2 +docker build -t xenxem/review-filmes:v2 -f src/Review-Filmes.Web/Dockerfile src/ + +10 - push da imagem para o meu docker hub +docker push xenxem/review-filmes:v2 + +12 - aplicação do manifesto +kubectl apply -f k8s/deployment.yml + +13 - atualizando a aplicação no browser para verificar se a descrição mudou conforme imagem v2 diff --git a/k8s/deployment.yml b/k8s/deployment.yml new file mode 100644 index 0000000..878c062 --- /dev/null +++ b/k8s/deployment.yml @@ -0,0 +1,89 @@ +#toda vez que for criar um objeto no kubernetes +#tenho que especificar esses 4 campos apiVersion, kind, metadata, spec + +# deployment de meu pod postgre +apiVersion: apps/v1 +kind: Deployment +metadata: #metadados do objeto: nome, labels, + name: postgre +spec: # especificações do objeto (deployment), tudo que precisa ter e ser configurado + replicas: 1 + selector: # critério de selção dos pods e replicaset que vai gerenciar + matchLabels: # minha regra - labels precisam bater + app: postgre + template: # estrutura do pod + metadata: #metadados do objeto (template): nome, labels, + labels: + app: postgre # identificação do pod + spec: #especificação do pod + containers: + - name: postgre + image: postgres:13.1 + env: + - name: POSTGRES_PASSWORD + value: Passw0rd2024! + - name: POSTGRES_USER + value: reviewfilmes + - name: POSTGRES_DB + value: reviewfilmes + ports: + - containerPort: 5432 +--- +apiVersion: v1 +kind: Service +metadata: + name: postgre +spec: + selector: + app: postgre + ports: + - port: 5432 +--- + + +# deployment web +apiVersion: apps/v1 +kind: Deployment +metadata: #metadados do objeto: nome, labels, + name: reviewfilmes +spec: # especificações do objeto (deployment), tudo que precisa ter e ser configurado + replicas: 1 + selector: # critério de selção dos pods e replicaset que vai gerenciar + matchLabels: # minha regra - labels precisam bater + app: reviewfilmes + template: # estrutura do pod + metadata: #metadados do objeto (template): nome, labels, + labels: + app: reviewfilmes # identificação do pod + spec: #especificação do pod + containers: + - name: reviewfilmes + image: xenxem/review-filmes:v1 + env: + - name: ASPCORE_HTTP_PORTS + value: "8080" + - name: ConnectionStrings__DefaultConnection + value: "Host=postgre;Database=reviewfilmes;Username=reviewfilmes;Password=Passw0rd2024!" + + ports: + - containerPort: 8080 +--- +apiVersion: v1 +kind: Service +metadata: + name: reviewfilmes +spec: + selector: + app: reviewfilmes + ports: + - port: 80 + targetPort: 8080 + nodePort: 30000 + type: LoadBalancer + + + + + + + \ No newline at end of file diff --git a/src/Review-Filmes.Web/Views/Shared/_Layout.cshtml b/src/Review-Filmes.Web/Views/Shared/_Layout.cshtml index 1de7af7..011d969 100644 --- a/src/Review-Filmes.Web/Views/Shared/_Layout.cshtml +++ b/src/Review-Filmes.Web/Views/Shared/_Layout.cshtml @@ -30,7 +30,7 @@
-

Review de Vídeos

+

Review de Vídeos - v3

Review de Vídeos