Exercício – Configurar seu ambiente do Azure DevOps

Concluído

Nesta seção, você configurará sua organização do Azure DevOps para continuar com o restante deste módulo e criar um ambiente do Serviço de Kubernetes do Azure (AKS) para implantar o seu aplicativo.

Para atingir esses objetivos, você vai:

  • Adicionar um usuário à sua organização do Azure DevOps.
  • Configurar seu projeto do Azure DevOps.
  • Gerenciar seu fluxo de trabalho com o Azure Boards.
  • Criar recursos do Azure usando a CLI do Azure.
  • Criará variáveis de pipeline no Azure Pipelines.
  • Criar uma conexão de serviço para se autenticar no Azure.
  • Atualizar o manifesto de implantação do Kubernetes.

Adicionar um usuário à sua organização

Para concluir este módulo, é necessário ter uma assinatura do Azure. Comece a usar o Azure gratuitamente.

Embora não seja necessário trabalhar com o Azure DevOps, uma assinatura do Azure é necessária para implantação nos recursos do Azure por meio do Azure DevOps. Para simplificar o processo, use a mesma conta Microsoft para entrar na assinatura do Azure e na organização do Azure DevOps.

Se você entrar no Azure e no Azure DevOps usando diferentes contas Microsoft, ainda poderá prosseguir adicionando um usuário à sua organização do DevOps na conta Microsoft associada à sua assinatura do Azure. Confira Adicionar usuários à sua organização ou ao seu projeto para obter mais detalhes. Ao adicionar o usuário, selecione o nível de acesso Básico.

Depois de adicionar o usuário com o nível de acesso Básico, saia do Azure DevOps e entre nele novamente usando a conta Microsoft associada à sua assinatura do Azure.

Obter o projeto do Azure DevOps

Nesta seção, você executará um modelo para criar o seu projeto no Azure DevOps.

Executar o modelo

Execute o modelo para configurar seu projeto do Azure DevOps para este módulo:

No portal do Gerador de Demonstração do Azure DevOps, execute estas etapas para executar o modelo:

  1. Selecione Entrar e concorde com os termos de uso.

  2. Na página Criar Projeto, selecione sua organização do Azure DevOps e informe um nome de projeto, como Space Game – Web – Kubernetes.

    Screenshot of the Azure DevOps Demo Generator showing the process to create the project.

  3. Selecione Sim, quero bifurcar este repositório e, em seguida, Autorizar. Se uma janela for exibida, conceda permissão para acessar sua conta do GitHub.

    Importante

    A seleção dessa opção é necessária para que o modelo se conecte ao repositório GitHub. Escolha-a mesmo que você já criado um fork do repositório Space Game, pois o modelo usará o fork existente.

  4. Selecione Criar projeto e aguarde até que o modelo termine de ser executado, o que pode levar alguns minutos.

  5. Selecione Navegar até o projeto para acessar seu projeto no Azure DevOps.

Importante

A unidade Limpar seu ambiente do Azure DevOps deste módulo inclui etapas cruciais de limpeza. Recomendamos executar essas etapas para evitar ficar sem minutos de compilação gratuitos. Mesmo que você não conclua o módulo, é importante seguir as etapas de limpeza.

Definir a visibilidade do projeto

Inicialmente, o fork do repositório Space Game no GitHub é definido como público, ao passo que o projeto criado pelo modelo do Azure DevOps é definido como privado. Um repositório público no GitHub pode ser acessado por qualquer pessoa, enquanto um repositório privado só é acessível para você e para as pessoas com quem você escolhe compartilhá-lo. Da mesma forma, no Azure DevOps, os projetos públicos fornecem acesso somente leitura a usuários não autenticados, enquanto projetos privados exigem que os usuários tenham acesso e sejam autenticados para acessar os serviços.

No momento, não é necessário modificar nenhuma dessas configurações para os fins deste módulo. No entanto, em seus projetos pessoais, você precisa determinar a visibilidade e o acesso que deseja permitir às outras pessoas. Por exemplo, se o projeto for de código aberto, você poderá optar por tornar o repositório GitHub e o projeto do Azure DevOps públicos. Se o projeto for proprietário, normalmente, você tornará o repositório GitHub e o projeto do Azure DevOps privados.

Mais adiante você poderá se interessar pelos seguintes recursos para determinar qual opção é melhor para seu projeto:

Mover o item de trabalho para Executando

Nesta etapa, você atribui um item de trabalho a si mesmo no Azure Boards e o move para o estado Em execução. Em cenários do mundo real, você e sua equipe criarão itens de trabalho no início de cada sprint ou iteração de trabalho.

Atribuir itens de trabalho fornece a você uma lista de verificação para trabalhar e dá aos outros membros da equipe visibilidade do seu progresso e do trabalho restante. Também ajuda a impor limites de WIP (trabalho em andamento) para impedir que a equipe assuma muito trabalho ao mesmo tempo.

  1. Navegue até Boards no Azure DevOps e selecione Boards no menu.

    Screenshot of Azure DevOps showing the location of the Boards menu.

  2. Atribua o item de trabalho Criar versão de vários contêineres do site orquestrado com o Kubernetes a si mesmo selecionando a seta para baixo na parte inferior do cartão.

    Screenshot of Azure Boards showing the location of the down arrow.

  3. Arraste e solte o item de trabalho da coluna Lista de tarefas para a coluna Em execução. Você moverá a tarefa para a coluna Concluído no final deste módulo depois de concluí-la.

    Screenshot of Azure Boards showing the card in the Doing column.

Criar o ambiente do Serviço de Kubernetes do Azure

Nesta etapa, você criará os recursos necessários do Serviço de Kubernetes do Azure para implantar a nova versão de contêiner do site.

No módulo anterior, Criar um pipeline de lançamento com o Azure Pipelines, você usou o portal do Azure para criar recursos do Azure. Embora o portal seja útil para explorar as funcionalidades do Azure e executar tarefas básicas, criar componentes como o Serviço de Kubernetes do Azure pode ser um processo demorado.

Neste módulo, você usará a CLI do Azure para criar os recursos necessários para implantar e executar seu aplicativo no Serviço de Kubernetes do Azure. A CLI do Azure pode ser acessada em um terminal ou por meio do Visual Studio Code. No entanto, neste módulo, você acessará a CLI do Azure a partir do Azure Cloud Shell. O Cloud Shell é uma experiência de shell baseada em navegador hospedada na nuvem, que é fornecida pré-configurada com a CLI do Azure para uso com sua assinatura do Azure.

Importante

Para concluir os exercícios neste módulo, você precisará de sua assinatura do Azure.

Iniciar o Cloud Shell

  1. Navegue até o portal do Azure e se conecte.

  2. Selecione a opção Cloud Shell no menu e escolha a experiência Bash quando solicitado.

    Screenshot of the Azure portal showing the location of the Cloud Shell menu item.

Observação

O Cloud Shell exige um recurso de Armazenamento do Azure para manter todos os arquivos que você criar no Cloud Shell. Ao abrir o Cloud Shell pela primeira vez, você precisará criar um grupo de recursos, uma conta de armazenamento e um compartilhamento de Arquivos do Azure. Essa configuração é usada automaticamente para todas as sessões futuras do Cloud Shell.

Selecionar uma região do Azure

Uma região se refere a um ou mais datacenters do Azure localizados em uma área geográfica. Regiões como Leste dos EUA, Oeste dos EUA e Norte da Europa são exemplos dessas áreas. Cada recurso do Azure, incluindo uma instância do Serviço de Aplicativo, é associado a uma região.

Para simplificar a execução de comandos, comece definindo uma região padrão. Depois que você definir uma região padrão, os comandos subsequentes usarão essa região por padrão, a menos que você especifique explicitamente uma região diferente.

  1. No Cloud Shell, execute o seguinte comando para listar as regiões disponíveis na sua assinatura do Azure:

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. Escolha uma região na coluna Nome na saída geograficamente perto de você. Por exemplo, escolha eastasia ou westus2.

  3. Execute o comando a seguir para definir a região padrão. Substitua REGIÃO pelo nome da região que você já escolheu.

    az configure --defaults location=<REGION>
    

    Este exemplo define westus2 como a região padrão.

    az configure --defaults location=westus2
    

Criar variáveis Bash

O uso de variáveis do Bash pode tornar o processo de instalação mais conveniente e menos propenso a erros. Essa abordagem ajuda a evitar erros de digitação acidentais definindo cadeias de texto compartilhadas como variáveis que podem ser usadas em todo o script.

  1. No Cloud Shell, gere um número aleatório para simplificar a criação de nomes globalmente exclusivos para alguns serviços na próxima etapa.

    resourceSuffix=$RANDOM
    
  2. Crie nomes globalmente exclusivos para sua instância de Serviço de Kubernetes do Azure e o Registro de Contêiner do Azure. Observe que esses comandos usam aspas duplas, que instruem o Bash a interpolar as variáveis usando a sintaxe embutida.

    registryName="tailspinspacegame${resourceSuffix}"
    aksName="tailspinspacegame-${resourceSuffix}"
    
  3. Crie outra variável Bash para armazenar o nome do grupo de recursos.

    rgName='tailspin-space-game-rg'
    
  4. Localize a versão mais recente do AKS.

    az aks get-versions
    

    Anote a versão mais recente.

Criar recursos do Azure

Observação

Neste tutorial, as configurações de rede padrão são usadas para fins de aprendizado. Essas configurações permitem que o seu site seja acessado pela Internet. No entanto, na prática, você pode optar por configurar uma rede virtual do Azure que coloca o seu site em uma rede que não é roteável pela Internet e só é acessível por você e a sua equipe. Posteriormente, você poderá reconfigurar a sua rede para disponibilizar o site para os usuários.

  1. Execute o seguinte comando para criar um grupo de recursos com o nome que já foi definido:

    az group create --name $rgName
    
  2. Execute o comando az acr create para criar um Registro de Contêiner do Azure com o nome que já foi definido:

    az acr create \
      --name $registryName \
      --resource-group $rgName \
      --sku Standard
    
  3. Execute o comando az aks create para criar uma instância do AKS com o nome que você definiu anteriormente. Substitua <latest-AKS-version> pela versão que você anotou anteriormente.

    az aks create \
      --name $aksName \
      --resource-group $rgName \
      --enable-addons monitoring \
      --kubernetes-version <latest-AKS-version> \
      --generate-ssh-keys
    

    Observação

    A conclusão da implantação do AKS pode levar de 10 a 15 minutos.

  4. Crie uma variável para armazenar a ID da entidade de serviço configurada para a instância do AKS:

    clientId=$(az aks show \
      --resource-group $rgName \
      --name $aksName \
      --query "identityProfile.kubeletidentity.clientId" \
      --output tsv)
    
  5. Crie uma variável para armazenar a ID do Registro de Contêiner do Azure:

    acrId=$(az acr show \
      --name $registryName \
      --resource-group $rgName \
      --query "id" \
      --output tsv)
    
  6. Execute o comando az acr list para recuperar a URL do servidor de logon da instância do ACR (Registro de Contêiner do Azure):

    az acr list \
     --resource-group $rgName \
     --query "[].{loginServer: loginServer}" \
     --output table
    

    Lembre-se de anotar o servidor de logon do registro de contêiner. Você precisará dessas informações mais tarde ao configurar o pipeline. Veja um exemplo:

    LoginServer                      
    --------------------------------
    tailspinspacegame4692.azurecr.io
    
  7. Execute o comando az role assignment create para criar uma atribuição de função a fim de autorizar o cluster do AKS a se conectar ao Registro de Contêiner do Azure:

    az role assignment create \
      --assignee $clientId \
      --role AcrPull \
      --scope $acrId
    

Importante

A unidade Limpar seu ambiente do Azure DevOps deste módulo inclui etapas cruciais de limpeza. É recomendável executar essas etapas para evitar esgotar os minutos de build gratuitos. Mesmo que você não conclua este módulo, é importante seguir as etapas de limpeza.

Criar um grupo de variáveis

Nesta seção, você adicionará uma variável ao pipeline para armazenar o nome do Registro de Contêiner do Azure. Recomendamos definir o nome da instância do Registro de Contêiner do Azure como uma variável na configuração do pipeline em vez de embuti-lo em código. Isso torna sua configuração mais reutilizável e, caso o nome da instância seja alterado, você pode atualizar com facilidade a variável e disparar o pipeline sem precisar modificar a configuração.

  1. Entre na sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e Biblioteca no painel de navegação à esquerda.

    Screenshot of Azure Pipelines showing the Library menu option.

  3. Escolha Grupos de variáveis e + Grupo de variáveis para adicionar um novo grupo de variáveis.

  4. Na seção Propriedades, insira Versão para o nome do grupo de variáveis.

  5. Na seção Variáveis, selecione Adicionar.

  6. Insira RegistryName para o nome da variável e, para o valor, insira o servidor de logon do Registro de Contêiner do Azure, como tailspinspacegame4692.azurecr.io.

  7. Na parte superior da página, selecione Salvar para salvar a variável do pipeline. Este é um exemplo da possível aparência do grupo de variáveis

    Screenshot of Azure Pipeline showing the variable group. The group contains one variable.

Criar conexões de serviço

A próxima etapa será criar conexões de serviço que permitam que o Azure Pipelines acesse as instâncias do Registro de Contêiner do Azure e do Serviço de Kubernetes do Azure. Criando essas conexões de serviço, o Azure Pipelines pode efetuar push para os contêineres e instruir o cluster do AKS a efetuar pull deles para atualizar o serviço implantado.

Importante

Certifique-se de que você esteja conectado ao portal do Azure e ao Azure DevOps com a mesma conta Microsoft.

Criar uma conexão de serviço do Registro do Docker

  1. Entre na sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Project settings no canto inferior da página.

  3. Selecione Conexões de serviço na seção Pipelines.

  4. Selecione Nova conexão de serviço, escolha Registro do Docker e, em seguida, selecione Próximo.

  5. Próximo à parte superior da página, selecione Registro de Contêiner do Azure e Entidade de Serviço para o tipo de autenticação.

  6. Insira os seguintes valores para cada configuração:

    Configuração Valor
    Subscription Sua assinatura do Azure
    Registro de Contêiner do Azure Selecione o que você criou anteriormente
    Service connection name Conexão do Registro de Contêiner
  7. Verifique se a caixa de seleção Conceder permissão de acesso para todos os pipelines está marcada.

  8. Selecione Salvar ao terminar.

Criar uma conexão do serviço do ARM

Agora você criará uma conexão de serviço do Azure Resource Manager para autenticar com o cluster do AKS. Estamos usando uma conexão de serviço do ARM em vez do Kubernetes, porque os tokens de longa duração deixaram de ser criados por padrão desde o Kubernetes 1.24. Confira esta postagem no blog do DevOps para obter mais detalhes: Diretrizes de conexão de serviço para os clientes do AKS que usam tarefas do Kubernetes.

  1. Selecione Nova conexão de serviço, Azure Resource Manager e Avançar.

  2. Escolha Entidade de Serviço (automática) e Avançar.

  3. Selecione Assinatura para o nível de escopo.

  4. Insira os valores a seguir para cada configuração.

    Configuração Valor
    Subscription Sua assinatura do Azure
    Resource group Selecione o que você criou anteriormente
    Service connection name Conexão de Cluster do Kubernetes
  5. Verifique se a caixa de seleção Conceder permissão de acesso para todos os pipelines está marcada.

  6. Selecione Salvar ao terminar.

Criar um ambiente de pipeline

  1. Selecione Pipelines e Ambientes.

    Screenshot of Azure Pipelines showing the Environments menu option.

  2. Escolha Criar ambiente para criar um ambiente.

  3. No campo Nome, insira Desenvolvimento.

  4. Selecione Nenhum na seção Recurso e Criar para criar o ambiente de pipeline.

Atualizar o manifesto de implantação do Kubernetes

Nesta seção, você atualizará o manifesto do Kubernetes deployment.yml para apontar para o registro de contêiner criado anteriormente.

  1. Navegue até sua conta do GitHub e selecione o repositório bifurcado para este módulo: mslearn-tailspin-spacegame-web-kubernetes.

  2. Abra o arquivo manifests/deployment.yml no modo de edição.

    Screenshot of GitHub showing the location of the edit mode icon.

  3. Altere as referências de imagem de contêiner para usar o servidor de logon do ACR. O manifesto a seguir usa tailspinspacegame2439.azurecr.io como exemplo.

    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: web
      template:
        metadata:
          labels:
            app: web
        spec:
          containers:
            - name: web
              image: tailspinspacegame4692.azurecr.io/web
              ports:
              - containerPort: 80
    
    apiVersion : apps/v1
    kind: Deployment
    metadata:
      name: leaderboard
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: leaderboard
      template:
        metadata:
          labels:
            app: leaderboard
        spec:
          containers:
            - name: leaderboard
              image: tailspinspacegame4692.azurecr.io/leaderboard
              ports:
              - containerPort: 80
    
  4. Confirme as alterações no branch main.