View on GitHub

aulas-programacao-web

Materiais de Aula - Programação de Computadores com tecnologias Web

CI/CD na nuvem com Azure e GitHub Actions

📽 Veja esta vídeo-aula no Youtube

Nosso objetivo é publicar nossas aplicações na Internet de forma gratuita (por enquanto). Para o frontend não tínhamos problemas, pois o GitHub permite que isso seja feito facilmente usando o serviço GitHub Pages. Para o backend, porém, precisamos de outro provedor. Existem diversas estratégias, e a escolhida aqui será:

Microsoft Azure

Um dos provedores de nuvem mais importantes hoje em dia. Possui uma opção de conta gratuita, que pode ser criada por qualquer um, com US$ 100.00 de crédito válidos por um ano. Os alunos do Centro Paula Souza podem criar sua conta usando o e-mail institucional (@etec.sp.gov.br ou @fatec.sp.gov.br), que terão a vantagem de poder renovar enquanto forem alunos, e não precisarem indicar um cartão de crédito durante o cadastro.

Se você não tem ideia do que é computação em nuvem comece estudando esses materiais introdutórios no Microsoft Learn (aproximadamente 1h de duração, com textos/legendas em português).

Usaremos esta conta para criar nossa infraestrutura e hospedar nossa aplicação.

Preparando a aplicação

Precisamos de uma aplicação. Seu código ficará publicado no GitHub, mas rodará no Azure. O GitHub Actions ficará responsável por, a cada commit no branch master ou main, executar a publicação automaticamente no ambiente do Azure. Chamamos esse processo de Integração Contínua.

Crie uma aplicação do tipo webapi, hospedada no GitHub. Nessa aplicação, vamos fazer algumas configurações:

Configurações de CORS

As configurações de CORS são feitas em Startup.cs, no métodos ConfigureServices e Configure.

Para ativar o CORS, no método Configure adicione:

// ...
    app.UseRouting();       // exatamente após Routing
    app.UseCors();          // adicione essa linha
    app.UseAuthorization(); // exatamente antes de Authorization
// ...

Para configurar as origens permitidas, altere o método ConfigureServices:

// ...
    // adicione as próximas linhas
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(
            builder =>
            {
                builder.WithOrigins(
                    "http://origem-autorizada-1.com",
                    "https://www.origem-autorizada-2.com"
                    // ... quantas forem necessárias
                );
            });
    });

    services.AddControllers(); // exatamente antes dessa linha
// ...

Ou então, permita todos os tipos de requisições externas:

// ...
    // adicione as próximas linhas
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(
            builder =>
            {
                builder
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
            });
    });

    services.AddControllers(); // exatamente antes dessa linha
// ...

Criando o servidor em nuvem usando PaaS

Vamos utilizar o serviço PaaS chamado Serviços de Aplicativo (App Services) que nos entrega uma plataforma pronta para hospedagem de aplicações, sem que nos preocupemos com a instalação e licenciamento do sistema operacional, configuração de rede e afins.

Simulação de custos

Vamos simular os custos utilizando a Calculadora de preço do Azure.

Selecione Serviço de Aplicativo, e role a tela até encontrar o simulador.

Vamos alterar as configurações de forma a conseguir um servidor gratuito.

Como os preços podem variar, no meu caso a configuração escolhida foi:

Escolha o que melhor te atender, sempre se atentando aos custos. Para esse curso, use sempre os planos gratuitos.

Com as configurações e custos já simulados, anote as configurações e vamos criar a infraestrutura em nuvem equivalente.

Criação dos recursos

Estando logado no Portal do Azure, crie um recurso do tipo Serviços de Aplicativos.

💡 Crie um grupo de recursos para cada conjunto que compartilhe o mesmo ciclo de vida, pois ao excluir o grupo, tudo é excluído junto. Isso facilita a gestão de recursos que você não vai mais usar no futuro.

Para este exemplo, vou chamar o grupo de recursos de GrupoRecursoExemploAzure01.

Crie sua instância com o runtime .NET Core 3.1 (LTS), com a configuração simulada na calculadora. Isso indica ao Azure que você executará uma aplicação .NET Core.

Clique em Revisar + criar. Revise e clique em Criar. Aguarde a finalização e clique em Ir para o recurso.

Você já terá acesso ao URL final, que não possui nada pois ainda não foi feita a publicação da sua aplicação. Neste exemplo, a URL é https://testepublicacaoazure.azurewebsites.net.

Configurando a publicação

Vamos indicar ao Azure a forma de implantação da nossa aplicação. Temos que indicar o repositório de código-fonte e solicitar que ele se integre ao GitHub e crie o código para publicação automática via GitHub Actions.

Clique em Centro de Implantação, e depois em GitHub.

Em seguida, clique em Authorize, e na janela que se abrirá, em Authorize ….

Clique em Continue. Selecione GitHub Actions e depois Continue.

Escolha seu repositório e indique a configuração de execução .NET Core. Clique em Continue.

Você verá seu script de implantação do GitHub Actions. Ele será executado automaticamente a cada novo push que altere o branch master ou main no repositório do GitHub. Clique em Finish.

Sua aplicação estará funcionando sempre que o fluxo de implantação for finalizado.

Disponibilidade

No plano gratuito sua aplicação ficará offline até que seja acionada, ligada para atender, e desligada após ficar inativa. Para mantê-la online todo o tempo, será necessário gastar seus créditos. Para esse curso, isso não será necessário.

Excluindo a aplicação

Quando não for mais necessária, exclua os recursos clicando em Excluir na página do recurso, ou no grupo de recursos como um todo. Recursos excluídos não consumirão mais créditos.

Verificando seus créditos disponíveis

Estando logado, você pode visualizar seus créditos disponíveis (check balance) e detalhes de uso (usage details) em Azure Sponsorships.