CI/CD ASP.NET Core com GitHub Actions e Azure
Tags: aspnetcore, braziliandevs, github, azure
Published: 2023-09-10 00:53:53

## Introdução
A implantação contínua (CI/CD) é uma prática essencial no desenvolvimento de software moderno. Ela permite automatizar o processo de construção, teste e implantação de aplicativos, garantindo atualizações rápidas e confiáveis. Neste artigo, vamos explorar como configurar um pipeline de CI/CD para um aplicativo ASP.NET Core, usando o GitHub Actions e implantando-o no Serviço de Aplicativo do Azure.

## O que é o GitHub Actions?
O GitHub Actions é um serviço de automação oferecido pelo GitHub para ajudar os desenvolvedores a automatizar seus fluxos de trabalho de desenvolvimento de software. Ele permite que você crie, teste e implante seu código diretamente no GitHub. O melhor de tudo é que o GitHub Actions é gratuito para repositórios públicos e oferece uma generosa quantidade de minutos de execução para repositórios privados.

## Pré-requisitos
Antes de começarmos, certifique-se de ter o seguinte:
- Uma conta no GitHub.
- Um repositório contendo um aplicativo ASP.NET Core.
- Uma conta no Azure com acesso para criar um Serviço de Aplicativo.

## Configurando o Pipeline

A seguir, veremos como configurar um pipeline de CI/CD para uma aplicação ASP.NET Core usando o GitHub Actions e implantá-la no Serviço de Aplicativo do Azure.

### Etapa 1: Adicione um arquivo de configuração para o GitHub Actions

1. Acesse o seu repositório no GitHub.
2. No menu superior do seu repositório, clique na guia "Actions".
3. Na página "Actions", você verá uma opção chamada "Set up a workflow yourself" no lado direito. Clique nela.
4. Você será direcionado para um editor de código. Substitua todo o conteúdo por este código YAML de exemplo:

```yaml
name: Publish

on:
  workflow_dispatch:
  push:
    branches:
    - main

env:
  AZURE_WEBAPP_NAME: exemplo-api

jobs:
  publish:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup .NET
        uses: actions/setup-dotnet@v3
        with:
          dotnet-version: '7.0.x'
          
      - name: Restore
        run: dotnet restore ./Exemplo/Exemplo.sln

      - name: Build
        run: dotnet build ./Exemplo/Exemplo.sln --configuration Release --no-restore

      - name: Publish
        run: dotnet publish ./Exemplo/Exemplo.sln --configuration Release --no-build --property PublishDir=${{env.DOTNET_ROOT}}/myapp

      - name: Deployment
        uses: azure/webapps-deploy@v2
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
          package: ${{env.DOTNET_ROOT}}/myapp
```
### Etapa 2: Configure o ambiente de implantação no Azure

No Portal do Azure, crie um Serviço de Aplicativo (Web App) onde você deseja implantar seu aplicativo ASP.NET Core. Como essa etapa não é o foco deste tutorial, deixarei alguns artigos de referência para ajudar nesse processo.  Entretanto precisamos baixar o Perfil de Publicação para continuar a configuração no GitHub.

Para esta etapa, na página do Serviço de Aplicativo criado, no menu superior, clique em “Baixar Perfil de Publicação”. O perfil de publicação será baixado como um arquivo XML. Salve esse arquivo em um local seguro no seu computador.

![Perfil de Publicação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tc0qnqe0uzvprb03jqwm.png)

### Etapa 3: Configure o Perfil de Publicação no Github Secrets
Volte para o GitHub e acesse o seu repositório. Vá para as "Settings" (Configurações) do repositório e clique em "Secrets and variables" e depois em “Actions”. Adicione um novo segredo chamado `AZURE_PUBLISH_PROFILE` e, como valor, insira o conteúdo do arquivo XML que você baixou (o conteúdo do perfil de publicação).

**IMPORTANTE**: Nunca compartilhe ou exponha o Perfil de Publicação do Azure publicamente. Ele contém informações sensíveis de autenticação e autorização que podem comprometer a segurança do seu aplicativo e dos seus recursos no Azure. Mantenha-o em um local seguro e restrito, acessível apenas para aqueles que realmente precisam dele para fins de implantação.

### Etapa 4: Realizando o Deploy
Agora, com seu pipeline de CI/CD configurado, você pode monitorar seu funcionamento e fazer ajustes conforme necessário. O GitHub Actions se encarregará de construir, testar e implantar seu aplicativo no Azure sempre que houver um push na branch `main`.

Na barra de navegação superior do repositório, você verá a guia "Actions". Clique nela para acessar a página de ações. Você verá uma lista de todos os workflows (fluxos de trabalho) configurados para esse repositório. Os workflows são organizados por nome e exibem o status atual de execução. Você verá informações como o nome do workflow, a data da execução mais recente e o status (por exemplo, sucesso, falha, em execução).

![Workflows](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7b62nop8i0ox6p9cmoj2.png)

Para obter mais informações sobre uma execução específica, clique no número da execução na lista. Isso o levará a uma página com detalhes completos sobre a execução, incluindo logs de cada etapa executada. Dentro dos detalhes da execução, você pode acessar os logs de cada etapa individual do workflow. Isso permite que você veja informações detalhadas sobre o que aconteceu em cada etapa da execução.

![Detalhe do Workflow](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uu1zrof0dk7f6gboxpt2.png)

No Azure, na página do Serviço de Aplicativo, é possível verificar o log de implantações. Para isso, acesse o menu "Centro de Implantação" e, em seguida, clique em "Logs".

![Centro de Implantação](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1906igc7tjvb3q7vdg4j.png)

## Conclusão

Configurar um pipeline de CI/CD para um aplicativo ASP.NET Core com o GitHub Actions é uma maneira eficaz de automatizar o processo de construção, teste e implantação. Isso permite que você entregue atualizações mais rapidamente e com mais confiança. Com as configurações e ajustes corretos, você pode criar um fluxo de trabalho robusto que melhora a qualidade e a eficiência do seu desenvolvimento de software.

Lembre-se de que as configurações e os ambientes de implantação podem variar de acordo com suas necessidades específicas, mas este guia serve como um ponto de partida para configurar seu próprio pipeline de CI/CD com o GitHub Actions.

## Referências
- [Documentação do Github Actions](https://docs.github.com/pt/actions)
- [Criar um Serviço de Aplicativo Azure em Asp.Net Core](https://learn.microsoft.com/pt-br/azure/app-service/quickstart-dotnetcore?tabs=net70&pivots=development-environment-azure-portal)
- [Repositório do Github - Rodrigo Schemes Bitencourt](https://github.com/rodrigo-schemes/aspnetcore-github-actions)
- [Youtube - Milan Jovanovic](https://www.youtube.com/watch?v=QP0pi7xe24s&list=PLYpjLpq5ZDGu8RXq5HoLqTll3YLBr3PNY&index=3)