Compartilhar via


Tutorial: Implantar um aplicativo ASP.NET Core e um Banco de Dados em Aplicativos de Contêiner do Azure usando o GitHub Actions

Neste tutorial, você aprenderá a implantar um aplicativo ASP.NET Core e o Banco de Dados SQL nos Aplicativos de Contêiner do Azure usando o Visual Studio e o GitHub Actions. Você também aprenderá a gerenciar migrações do Entity Framework e atualizações de banco de dados no GitHub Actions, embora os conceitos também possam ser aplicados a outras ferramentas e ambientes de CI/CD.

Pré-requisitos

Você precisa do Visual Studio 2022 instalado com a carga de trabalho de ASP.NET e desenvolvimento web e a carga de trabalho de desenvolvimento do Azure.

Se você já instalou o Visual Studio:

  • Instale as atualizações mais recentes no Visual Studio selecionando Ajuda>para verificar se há atualizações.
  • Verifique se as cargas de trabalho de ASP.NET e desenvolvimento da Web e desenvolvimento do Azure estão instaladas selecionando Ferramentas> e Obter Ferramentas e Recursos.

Aviso

Este artigo usa cadeias de conexão. Tenha cuidado ao gerenciar conexões usando nomes de usuário, senhas ou chaves de acesso. Esses segredos não devem ser confirmados no controle do código-fonte nem colocados em locais que não sejam seguros em que possam ser acessados por usuários não intencionais. Durante o desenvolvimento local, você geralmente se conectará a um banco de dados local que não exige o armazenamento de segredos ou a conexão direta com o Azure. Durante a produção, conecte-se ao banco de dados SQL do Azure usando uma abordagem sem uso de segredos, como a Identidade do Microsoft Entra, quando possível.

Configurar o aplicativo de exemplo localmente

Use o aplicativo de exemplo TODO para acompanhar este tutorial. Clone o aplicativo do GitHub usando o seguinte comando:

git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore

Navegue até a pasta do projeto e abra a solução DotNetCoreSqlDb.sln no Visual Studio.

O aplicativo TODO está pronto para ir, mas você precisará estabelecer uma conexão com o localdb SQL Server que está disponível no Visual Studio. A conexão com localdb permitirá que você execute o aplicativo e persista listas de tarefas enquanto trabalha localmente.

  1. Clique com o botão direito do mouse no nó Serviços Conectados no Gerenciador de Soluções do Visual Studio e selecione Adicionar > Banco de Dados do SQL Server.
  2. Na caixa de diálogo Conectar à dependência , selecione SQL Server Express LocalDB (Local) e selecione Avançar.
  3. Na caixa de diálogo Conectar ao SQL Server Express LocalDB (Local), defina os seguintes valores:
    • Nome da cadeia de conexão: Deixe o valor padrão.
    • Valor da cadeia de conexão: Deixe o valor padrão.
    • Salve o valor da cadeia de conexão em: Selecione Nenhum.
    • Selecionar Avançar
  4. Na tela Resumo das alterações , deixe as configurações em seus valores padrão e selecione Concluir para concluir o fluxo de trabalho.

O Visual Studio exibe um resumo das dependências de serviço, incluindo a conexão com LocalDB.

Uma captura de tela mostrando como adicionar uma migração usando o Visual Studio.

Em seguida, você precisará criar uma migração inicial e usá-la para atualizar o banco de dados local com o esquema correto para o aplicativo TODO.

  1. Selecione o ícone ... à direita da lista de dependências de serviço ao lado da LocalDB conexão e escolha Adicionar migração.
  2. Na caixa de diálogo Migrações do Entity Framework , aguarde um momento para que o Visual Studio localize a DbContext classe incluída no projeto. Depois que os valores forem carregados, selecione Concluir.
  3. O Visual Studio gera uma pasta Migrations no projeto e cria uma classe de migrações iniciais. Essa classe pode ser usada para atualizar o banco de dados com o esquema correto.
  4. Selecione o ícone ... ao lado do LocalDB serviço novamente e selecione Atualizar banco de dados.
  5. Na caixa de diálogo Migrações do Entity Framework , aguarde um momento para que o Visual Studio localize a DbContext classe novamente e escolha Concluir. O Visual Studio executa a migração e cria o esquema para o banco de dados no servidor LocalDB.

Inicie o projeto selecionando o botão executar DotNetCoreSqlDb na parte superior do Visual Studio.

Quando o aplicativo for carregado, verifique se o banco de dados está funcionando corretamente inserindo um novo TODO. A TAREFA pendente aparece no modo de exibição de lista principal na home page do aplicativo.

Explorar a configuração de inicialização do aplicativo

O aplicativo de exemplo inclui o seguinte código no arquivo Program.cs:

if(builder.Environment.IsDevelopment())
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
}
else
{
    builder.Services.AddDbContext<MyDatabaseContext>(options =>
        options.UseSqlServer(Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")));
}

Esse código aplica as seguintes configurações:

  • Quando o aplicativo é executado localmente, a cadeia de conexão localdb é extraída do arquivo appsettings.json e fornecida ao Entity Framework. Essa configuração permite que a cadeia de conexão localdb seja verificada no controle do código-fonte para que outros desenvolvedores possam se conectar facilmente a um banco de dados local durante o desenvolvimento. Ele também permite que as migrações do Entity Framework sejam executadas localmente. Por padrão, o Entity Framework não descobrirá cadeias de conexão armazenadas na variável de ambiente ao executar migrações.
  • Quando o aplicativo é executado em fluxos de trabalho do GitHub Actions ou em Produção, a cadeia de conexão é extraída de variáveis de ambiente. As variáveis de ambiente podem impedir que cadeias de conexão seguras de produção sejam verificadas no controle do código-fonte ou incluídas em arquivos de configuração.

Criar os serviços do Azure

O aplicativo exigirá que os seguintes serviços do Azure sejam criados para uma implantação bem-sucedida:

  • Aplicativo de contêiner: Necessário para hospedar e executar o aplicativo implantado.
  • Registro de Contêiner: Armazena o artefato de imagem construída do aplicativo em contêiner.
  • Banco de Dados SQL: Um banco de dados SQL do Azure para armazenar os dados do aplicativo.

Os recursos de publicação do Visual Studio podem lidar com a criação desses recursos para você.

Criar o Aplicativo de Contêiner do Azure e o Registro de Contêiner do Azure

  1. No Gerenciador de Soluções do Visual Studio, clique com o botão direito do mouse no nó de projeto de nível superior e selecione Publicar.

  2. Na caixa de diálogo de publicação, selecione o Azure como o destino da implantação e selecione Avançar.

  3. Para o destino específico, selecione Aplicativos de Contêiner do Azure (Linux) e selecione Avançar.

  4. Crie um novo aplicativo de contêiner para o qual implantar. Selecione o botão + Criar novo para abrir uma nova caixa de diálogo e insira os seguintes valores:

    Uma captura de tela mostrando como criar um aplicativo de contêiner.

    • Nome do aplicativo de contêiner: Deixe o valor padrão ou insira um nome.
    • Nome da assinatura: Selecione a assinatura na qual implantar.
    • Grupo de recursos: Selecione Novo e crie um novo grupo de recursos chamado msdocs-app-db-ef.
    • Ambiente de aplicativos de contêiner: Selecione Novo para abrir a caixa de diálogo de ambiente de aplicativos de contêiner e insira os seguintes valores:
      • Nome do ambiente: Mantenha o valor padrão.
      • Localização: Selecione um local próximo a você.
      • Workspace do Azure Log Analytics: Selecione Novo para abrir a caixa de diálogo do workspace do Log Analytics.
        • Nome: Deixe o valor padrão.
        • Localização: Selecione um local próximo a você e selecione Ok para fechar a caixa de diálogo.
      • Selecione Ok para fechar a caixa de diálogo de ambiente de aplicativos de contêiner.
    • Selecione Criar para fechar a caixa de diálogo de aplicativos de contêiner original. O Visual Studio cria o recurso de aplicativo de contêiner no Azure.
  5. Depois que o recurso for criado, verifique se ele está selecionado na lista de aplicativos de contêiner e selecione Avançar.

  6. Você precisará criar um Registro de Contêiner do Azure para armazenar o artefato de imagem publicado para seu aplicativo. Selecione o ícone verde + na tela do Registro de Contêiner .

    Uma captura de tela mostrando como criar um novo registro de contêiner.

  7. Deixe os valores padrão e selecione Criar.

  8. Depois que o registro de contêiner for criado, verifique se ele está selecionado e selecione o próximo.

  9. Na tela Tipo de implantação , selecione CI/CD usando fluxos de trabalho do GitHub Actions (gera arquivo yml) e escolha Concluir. Se o Visual Studio solicitar que você habilite o usuário administrador a acessar o contêiner publicado do Docker, selecione Sim.

O Visual Studio cria e exibe o perfil de publicação. A maioria das etapas de publicação e detalhes são descritos no arquivo GitHub Actions .yml , que pode ser exibido clicando no botão Editar fluxo de trabalho na exibição de resumo do perfil de publicação. Esse arquivo é abordado com mais profundidade posteriormente no artigo.

Criar o Banco de Dados SQL do Azure

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nó Serviços Conectados e selecione Adicionar > Banco de Dados do SQL Server.
  2. Na caixa de diálogo Conectar à dependência , selecione o Banco de Dados SQL do Azure e escolha Avançar.
  3. Selecione + Criar Novo para adicionar um novo banco de dados.
  4. Na caixa de diálogo Banco de Dados SQL do Azure , insira os seguintes valores:
    • Nome do banco de dados: Deixe o valor padrão.
    • Nome da assinatura: Selecione a mesma assinatura que anteriormente.
    • Grupo de Recursos: Selecione o mesmo msdocs-app-db-ef grupo criado anteriormente.
    • Servidor de Banco de Dados: Selecione Novo... e insira os seguintes valores no novo POP-up:
      • Nome do servidor de banco de dados: Insira um nome de servidor exclusivo ou acrescente números aleatórios ao final do nome gerado automaticamente.
      • Localização: Selecione um local próximo a você.
      • Nome de usuário do administrador: Insira um valor de sua escolha.
      • Senha do administrador: Insira um valor de sua escolha.
      • Senha do administrador (confirme): Insira a mesma senha para confirmar. Selecione OK para fechar a caixa de diálogo do SQL Server
    • Selecione Criar para criar o SQL Server e o banco de dados.
    • Quando a operação for concluída, selecione o servidor na lista e escolha Avançar
  5. Na caixa de diálogo Conectar ao Banco de Dados SQL do Azure, deixe os valores padrão, mas verifique se Nenhum está selecionado na parte inferior para a opção 'Salvar valor da cadeia de conexão em'.
  6. Selecione Concluir e o Visual Studio criará os recursos do SQL.

Conectar o aplicativo de contêiner ao SQL do Azure

  1. Na página de visão geral do Aplicativo de Contêiner que você criou, selecione Conector de Serviço (versão prévia) na navegação à esquerda.

  2. Selecione + Criar para criar uma nova conexão.

  3. No submenu Criar conexão , insira os seguintes valores:

    • Recipiente: Selecione o contêiner dotnetcoresqldb que você criou.

    • Tipo de serviço: Selecione Banco de Dados SQL.

    • Subscrição: Selecione a mesma assinatura usada para criar o aplicativo de contêiner.

    • Nome da conexão: Deixe o valor padrão.

    • SQL Server: Selecione o servidor de banco de dados criado anteriormente.

    • Banco de dados SQL: Selecione o banco de dados criado anteriormente.

    • Tipo de cliente: Selecione .NET.

      Uma captura de tela mostrando como usar o conector de serviço.

  4. Selecione Avançar: Autenticação e insira os seguintes valores:

    • Selecione a cadeia de conexão para o tipo de autenticação.
    • Nome de usuário: Insira o nome de usuário usado ao criar o servidor de banco de dados.
    • Senha: Insira a senha usada ao criar o servidor de banco de dados.
  5. Deixe o restante das configurações em seu padrão e selecione Avançar: Rede.

  6. Deixe o valor padrão selecionado e escolha Avançar: Examinar + Criar.

  7. Depois que o Azure validar as configurações, selecione Criar.

Após um momento, a conexão com o banco de dados SQL deve aparecer. Selecione a seta para expandir a conexão e veja o valor AZURE_SQL_CONNECTIONSTRING . Esse nome de conexão corresponde ao nome da cadeia de conexão de variável de ambiente definida no aplicativo de exemplo.

Configurar o fluxo de trabalho do GitHub Actions

O arquivo de fluxo de trabalho do GitHub Actions gerado pelo Visual Studio pode ser usado pelo GitHub para criar e implantar o aplicativo no Azure quando as alterações são enviadas por push. Atualmente, esse processo funcionaria, mas o aplicativo implantado geraria uma exceção. Embora o banco de dados SQL do Azure tenha sido criado, uma etapa deve ser adicionada ao fluxo de trabalho do GitHub Actions para gerar o esquema. A cadeia de conexão do banco de dados SQL do Azure pode ser armazenada com segurança como um segredo no GitHub e recuperada pelo fluxo de trabalho quando ele é executado.

Recuperar a cadeia de conexão e adicioná-la aos segredos do GitHub

  1. No portal do Azure, pesquise o banco de dados que você criou na barra de pesquisa principal e selecione-o nos resultados.

  2. Na página de visão geral do banco de dados, selecione Cadeias de conexão na barra de navegação à esquerda.

  3. Na guia ADO.NET , copie a cadeia de conexão para fora do campo de formulário.

    Uma captura de tela mostrando como recuperar a cadeia de conexão.

  4. Navegue até o repositório GitHub clonado do aplicativo.

  5. Na guia Configurações, selecione Ações secretas > na navegação à esquerda e escolha Novo segredo do repositório.

  6. Na página Novo segredo , insira os seguintes valores:

    • Nome: Insira um nome de DbConnection.

    • Segredo: Cole a cadeia de conexão copiada do Azure. Substitua o espaço reservado de senha na cadeia de conexão pela senha escolhida ao criar o banco de dados.

    • Selecione Adicionar segredo.

      Uma captura de tela mostrando como criar um segredo do GitHub.

A cadeia de conexão agora é armazenada com segurança nos segredos do repositório GitHub e pode ser recuperada usando um fluxo de trabalho do GitHub.

Modificar o fluxo de trabalho do GitHub Actions para habilitar migrações

  1. Abra o arquivo de fluxo .yml de trabalho do GitHub Actions gerado pelo Visual Studio selecionando o botão Editar Fluxo de Trabalho na página de resumo de publicação.

    Uma captura de tela mostrando como editar o fluxo de trabalho.

  2. Acrescente o seguinte yaml ao final do arquivo de fluxo de trabalho:

    - name: Run EF 
      run: | 
        dotnet tool install --global dotnet-ef
        dotnet tool restore
        dotnet ef database update -p DotNetCoreSqlDb --connection '${{ secrets.DBConnection }}'
    

    Esse código instala as ferramentas de linha de comando da estrutura de entidade e executa as migrações de aplicativo. Quando o fluxo de trabalho é executado, o código também usa o parâmetro connection do comando database update para substituir a cadeia de conexão localdb armazenada no arquivo appsettings.json com o valor que foi adicionado aos segredos do GitHub.

Execute o fluxo de trabalho do GitHub Actions e teste a implantação

  1. Confirme as alterações no aplicativo e envie por push para o repositório bifurcado usando o seguinte comando:

    git add --all
    git commit -m "Added GitHub Actions workflow"
    git push
    
  2. Navegue até o repositório GitHub e selecione a guia Ações . Uma execução de fluxo de trabalho deve ter sido disparada automaticamente se o push tiver sido bem-sucedido.

  3. Selecione o fluxo de trabalho ativo para exibir os detalhes do log para cada etapa à medida que elas forem concluídas. A migração é executada por último para atualizar o banco de dados no Azure.

    Uma captura de tela mostrando o fluxo de trabalho de ação do GitHub.

Após a conclusão do fluxo de trabalho, o aplicativo é implantado nos Aplicativos de Contêiner do Azure e conectado ao banco de dados com um esquema atualizado.

Você pode testar a implantação navegando até a home page do aplicativo de contêiner e criando um TODO, assim como fez localmente. Você sempre pode encontrar a URL para seu aplicativo de contêiner na página de visão geral do aplicativo no portal do Azure.