Compartilhar via


Tutorial: Implantar um aplicativo Java em um conjunto de dimensionamento de máquinas virtuais

Azure DevOps Services

Um conjunto de dimensionamento de máquinas virtuais permite implantar e gerenciar máquinas virtuais de dimensionamento automático idênticas.

VMs são criadas conforme necessário em um conjunto de escala. Você define regras para controlar como e quando as VMs são adicionadas ou removidas do conjunto de dimensionamento. Essas regras podem ser disparados com base em métricas como carga de CPU, utilização de memória ou tráfego de rede.

Nesse tutorial, você cria um aplicativo Java e o implanta em um conjunto de dimensionamento de máquinas virtuais. Você aprenderá como:

  • Criar um conjunto de dimensionamento de máquinas virtuais
  • Criar uma imagem de computador
  • Implantar uma imagem personalizada em um conjunto de dimensionamento de máquinas virtuais

Pré-requisitos

Antes de começar, você precisa de:

Configurar o pipeline do Java

  1. Entre na organização do Azure DevOps e acesse seu projeto.

  2. Vá para Pipelines e selecione Novo pipeline ou Criar pipeline se estiver criando seu primeiro pipeline.

  3. Percorra as etapas do assistente selecionando primeiro o GitHub como o local do código-fonte.

  4. Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.

  5. Quando a lista de repositórios for exibida, selecione o repositório.

  6. Você poderá ser redirecionado ao GitHub para instalar o aplicativo do Azure Pipelines. Se sim, selecione Aprovar e instalar.

Quando a guia Configurar for exibida, selecione Maven.

Personalizar o pipeline

  1. Quando o novo pipeline for exibido, observe o YAML para ver o que ele faz. Ao final, selecione Salvar e executar.

    Save and run button in a new YAML pipeline

  2. Você será solicitado a confirmar um novo arquivo azure-pipelines.yml em seu repositório. Depois de ficar satisfeito com a mensagem, selecione Salvar e executar novamente.

    Se você quiser inspecionar seu pipeline em ação, selecione o trabalho de compilação.

    Você acabou de criar e executar um pipeline que criamos automaticamente para você, pois seu código parecia ser uma boa correspondência para o modelo do Maven.

    Agora você tem um pipeline YAML funcional (azure-pipelines.yml) em seu repositório que está pronto para personalização!

  3. Quando estiver pronto para fazer alterações no pipeline, selecione-o na página Pipelines e Edite o arquivo azure-pipelines.yml.

Adicionar as tarefas Copiar Arquivos e Publicar Artefato de Compilação

  1. Atualize o pipeline para incluir a tarefa CopyFiles@2. Isso criará um artefato que você pode implantar no conjunto de dimensionamento de máquinas virtuais.

      trigger: none
    
      pool:
        vmImage: 'ubuntu-latest'
    
      steps:
    - task: Maven@4
      inputs:
        mavenPomFile: 'pom.xml'
        mavenOptions: '-Xmx3072m'
        javaHomeOption: 'JDKVersion'
        jdkVersionOption: '1.8'
        jdkArchitectureOption: 'x64'
        publishJUnitResults: true
        testResultsFiles: '**/surefire-reports/TEST-*.xml'
        goals: 'package'
    
    - task: CopyFiles@2
      displayName: 'Copy File to: $(TargetFolder)'
      inputs:
        SourceFolder: '$(Build.SourcesDirectory)'
        Contents: |
          **/*.sh 
          **/*.war
          **/*jar-with-dependencies.jar
        TargetFolder: '$(System.DefaultWorkingDirectory)/pipeline-artifacts/'
        flattenFolders: true  
    

Criar uma imagem personalizada e carregá-la no Azure

Você precisará de um grupo de recursos, uma conta de armazenamento e uma galeria de imagens compartilhadas para sua imagem personalizada.

  1. Crie um grupo de recursos com az group create. Esse exemplo cria um grupo de recursos chamado myVMSSResourceGroup no local eastus2:

    az group create --name myVMSSResourceGroup --location eastus2
    
  2. Criar uma conta de armazenamento. Esse exemplo cria uma conta de armazenamento, vmssstorageaccount.

    az storage account create \
      --name vmssstorageaccount \
      --resource-group myVMSSResourceGroup \
      --location eastus2 \
      --sku Standard_LRS 
    
  3. Crie uma galeria de imagens compartilhadas.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  4. Crie uma nova galeria de imagens no recurso myVMSSGallery. Confira Criar um Galeria de Imagens Compartilhadas do Azure usando o portal para saber mais sobre como trabalhar com galerias de imagens.

    az sig create --resource-group myVMSSResourceGroup --gallery-name myVMSSGallery
    
  5. Criar uma definição de imagem. Copie o id da nova imagem que se parece com /subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage.

    az sig image-definition create -g myVMSSResourceGroup --gallery-name myVMSSGallery --gallery-image-definition MyImage --publisher GreatPublisher --offer GreatOffer --sku GreatSku --os-type linux
    

Criar uma identidade gerenciada

  1. Crie uma identidade gerenciada em seu grupo de recursos.

    az identity create -g myVMSSResourceGroup -n myVMSSIdentity
    
  2. Na saída, copie o id. O id será parecido com /subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>.

  3. Abra sua galeria de imagens na galeria e atribua à myVMSSIdentity a função Colaborador. Siga estas etapas para adicionar uma atribuição de função.

Criar o agente personalizado

Para criar uma imagem personalizada, você pode usar a Tarefa DevOps do Construtor de Imagens de VM do Azure.

  1. Adicione a tarefa AzureImageBuilderTask@1 ao arquivo YAML. Substitua os valores de <SUBSCRIPTION ID>, <RESOURCE GROUP>, <USER ASSIGNED IDENTITY NAME> pelos seus próprios. Verifique se os valores de galleryImageId, managedIdentity e storageAccountName estão precisos.

    - task: AzureImageBuilderTask@1
      displayName: 'Azure VM Image Builder Task'
      inputs:
        managedIdentity: '/subscriptions/<SUBSCRIPTION ID>/resourcegroups/<RESOURCE GROUP>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<USER ASSIGNED IDENTITY NAME>'
        imageSource: 'marketplace'
        packagePath: '$(System.DefaultWorkingDirectory)/pipeline-artifacts'
        inlineScript: |
          sudo mkdir /lib/buildArtifacts
          sudo cp  "/tmp/pipeline-artifacts.tar.gz" /lib/buildArtifacts/.
          cd /lib/buildArtifacts/.
          sudo tar -zxvf pipeline-artifacts.tar.gz
          sudo sh install.sh
        storageAccountName: 'vmssstorageaccount2'
        distributeType: 'sig'
        galleryImageId: '/subscriptions/<SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP>/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'
        replicationRegions: 'eastus2'
        ibSubscription: '<SUBSCRIPTION ID>'
        ibAzureResourceGroup: 'myVMSSResourceGroup'
        ibLocation: 'eastus2'
    
  2. Execute o pipeline para gerar sua primeira imagem. Talvez seja necessário autorizar recursos durante a execução do pipeline.

  3. Vá para a nova imagem no portal do Azure e abra Visão geral. Selecione Criar VMSS para criar um novo conjunto de dimensionamento de máquinas virtuais a partir da nova imagem. Defina Nome do conjunto de dimensionamento de máquinas virtuais como vmssScaleSet. Confira Criar um conjunto de dimensionamento de máquinas virtuais no portal do Azure para saber mais sobre como criar conjuntos de dimensionamento de máquinas virtuais no portal do Azure.

Implantar atualizações no conjunto de dimensionamento de máquinas virtuais

Adicione uma tarefa da CLI do Azure ao pipeline para implantar atualizações no conjunto de dimensionamento. Adicione a tarefa no final do pipeline. Substitua <SUBSCRIPTION ID> por sua ID da assinatura.

- task: AzureCLI@2
  inputs:
    azureSubscription: '`YOUR_SUBSCRIPTION_ID`' #Authorize and in the task editor
    ScriptType: 'pscore'
    scriptLocation: 'inlineScript'
    Inline: 'az vmss update --resource-group myVMSSResourceGroup --name vmssScaleSet --set virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/<SUBSCRIPTION ID>/resourceGroups/myVMSSResourceGroup/providers/Microsoft.Compute/galleries/myVMSSGallery/images/MyImage/versions/0.0.$(Build.BuildId)'

Limpar os recursos

Vá para o portal do Azure e exclua seu grupo de recursos, myVMSSResourceGroup.

Próximas etapas