Neste tutorial, mostramos como usar o Azure Pipelines e o Compute Engine para criar um pipeline de (CI/CD) de integração/implantação contínuas para um aplicativo da Web ASP.NET MVC. O aplicativo usa os Serviços de Informações da Internet da Microsoft e é executado no Windows Server.
O canal CI/CD usa dois ambientes separados, um para testes e outro para produção.
No início do pipeline, os desenvolvedores confirmam as alterações no código de exemplo. Essa ação aciona o pipeline para criar o aplicativo, empacotá-lo como um arquivo ZIP e fazer upload dele para o Cloud Storage.
Em seguida, o pacote é lançado automaticamente no ambiente de desenvolvimento por uma atualização gradual. Depois que a versão for testada, um gerente de versão pode promovê-la que ela seja implantada no ambiente de produção.
Este tutorial se destina a desenvolvedores e engenheiros de DevOps. Ele pressupõe que você tenha conhecimento básico sobre .NET Framework, Windows Server, IIS, Azure Pipelines e Compute Engine. Também é preciso ter acesso administrativo a uma conta do Azure DevOps.
Objetivos
- Use grupos de instâncias gerenciadas do Compute Engine para implementar implantações contínuas.
- Configure um canal de CI/CD nos Azure Pipelines para orquestrar os processos de versão, criação e implantação.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Verifique a página de preços do Azure DevOps para ver as taxas aplicáveis ao uso do Azure DevOps.
Antes de começar
Geralmente, é aconselhável usar projetos separados para cargas de trabalho de desenvolvimento e produção, de modo que os papéis e permissões do gerenciamento de identidade e acesso (IAM, na sigla em inglês) possam ser concedidos individualmente. Para simplificar, este tutorial usa um único projeto para os ambientes de desenvolvimento e produção.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Compute Engine and Cloud Storage APIs.
-
Make sure that billing is enabled for your Google Cloud project.
- É necessário ter uma conta Azure DevOps e ter acesso de administrador a ela. Se você ainda não tiver uma conta do Azure DevOps, inscreva-se na página inicial do Azure DevOps.
Criar um projeto do Azure DevOps
Use o Azure DevOps para gerenciar o código-fonte, executar compilações e testes e orquestrar a implantação no Compute Engine. Para começar, crie um projeto na sua conta do Azure DevOps.
- Acesse a página inicial do Azure DevOps (https://dev.azure.com/YOUR_AZURE_DEVOPS_ACCOUNT_NAME).
- Clique em New project.
- Insira um nome de projeto, como
CloudDemo
. - Defina Visibility como Private e clique em Create.
- Depois de criar o projeto, clique em Repos no menu à esquerda.
- Clique em Import para bifurcar o repositório
dotnet-docs-samples
do GitHub e defina os seguintes valores:- Tipo de repositório:
Git
- URL do clone:
https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
- Tipo de repositório:
Clique em Importar.
Quando o processo de importação estiver concluído, você verá o código-fonte do repositório
dotnet-docs-samples
.No menu, clique em Repositórios > Ramificações.
Mova o mouse sobre a ramificação
main
. Um botão ... será exibido à direita.Clique em ... > Definir como ramificação padrão.
Crie continuamente
Agora é possível usar o Azure Pipelines para configurar um pipeline de build. Para cada confirmação enviada para o repositório Git, o Azure Pipelines cria o código, empacota-o em um arquivo ZIP e publica o pacote resultante no armazenamento interno do Azure Pipelines.
Mais tarde, você vai configurar um pipeline de lançamento que usa os pacotes do armazenamento do Azure Pipelines e os implanta no Compute Engine.
Criar uma definição de compilação
Crie uma nova definição de build no Azure Pipelines que use a sintaxe YAML:
- Usando o Visual Studio ou um cliente de linha de comando
git
, clone seu novo repositório Git. - Na raiz do repositório, crie um arquivo chamado
azure-pipelines.yml
. Copie o código a seguir e cole-o no arquivo:
resources: - repo: self fetchDepth: 1 trigger: - main variables: artifactName: 'CloudDemo.Mvc' jobs: - job: Build displayName: Build application condition: succeeded() pool: vmImage: windows-latest demands: - msbuild - visualstudio variables: Solution: 'applications/clouddemo/net4/CloudDemo.Mvc.sln' BuildPlatform: 'Any CPU' BuildConfiguration: 'Release' ArtifactName: 'CloudDemo.Web' steps: - task: NuGetCommand@2 displayName: 'NuGet restore' inputs: restoreSolution: '$(Solution)' - task: VSBuild@1 displayName: 'Build solution' inputs: solution: '$(Solution)' msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"' platform: '$(BuildPlatform)' configuration: '$(BuildConfiguration)' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)/CloudDemo.Mvc.zip' ArtifactName: '$(ArtifactName)'
Confirme as alterações e envie-as para o Azure Pipelines.
Visual Studio
- Abra o Team Explorer e clique no ícone Home.
- Clique em Changes.
- Insira uma mensagem de confirmação como
Add pipeline definition
. - Clique em Confirmar tudo e enviar por push.
Linha de comando
Organize todos os arquivos modificados:
git add -A
Confirme as alterações no repositório local:
git commit -m "Add pipeline definition"
Envie as alterações para o Azure DevOps:
git push
No menu do Azure DevOps, selecione Pipelines e clique em Criar pipeline.
Selecione Azure Repos Git.
Selecione seu Repositório.
Na página Revise o YAML do pipeline, clique em Executar.
Uma nova versão é acionada. O build pode demorar cerca de dois minutos para ser concluído. No final do build, o pacote de aplicativo
CloudDemo.Mvc.zip
, que contém todos os arquivos do aplicativo da Web, fica disponível na área de armazenamento de artefatos interno do Azure Pipelines.
Como implantar continuamente
Agora que o Azure Pipelines cria automaticamente o código para cada confirmação, você pode voltar sua atenção para a implantação.
Ao contrário de outros sistemas de integração contínua, o Azure Pipelines distingue entre criação e implantação e fornece um conjunto especializado de ferramentas chamado Gerenciamento de versões para todas as tarefas relacionadas à implantação.
O Gerenciamento de versões do Azure Pipelines é criado com base nestes conceitos:
- Uma versão se refere a um conjunto de artefatos que compõem uma versão específica do app e que geralmente é o resultado de um processo de compilação.
- Implantação refere-se ao processo de escolher uma versão e implantá-la em um ambiente específico.
- Uma implantação executa um conjunto de tarefas, que podem ser agrupadas em jobs.
- Os estágios permitem segmentar seu pipeline e podem ser usados para orquestrar implantações em vários ambientes, por exemplo, ambientes de desenvolvimento e teste.
Configure o pipeline de versão a ser acionado sempre que uma nova compilação for concluída. O pipeline consiste em três fases:
- Na primeira fase, o pipeline seleciona o pacote do aplicativo da área de armazenamento de artefatos do Azure Pipelines e o publica em um bucket do Cloud Storage para que o pacote possa ser acessado pelo Compute Engine.
- Na segunda fase, o pipeline atualiza o ambiente de desenvolvimento por uma atualização gradual.
- Na fase final, após a aprovação, o pipeline atualiza o ambiente de produção por uma atualização gradual.
Criar um bucket do Cloud Storage para artefatos de build
Crie um bucket do Cloud Storage para armazenar pacotes de aplicativos. Mais tarde, você vai configurar o Compute Engine para que novas instâncias de VM possam extrair automaticamente pacotes de aplicativos desse bucket.
- No Console do Google Cloud, mude para o projeto recém-criado.
Abra o Cloud Shell.
Para economizar tempo, defina os valores padrão de código do projeto e zona do Compute Engine:
gcloud config set project PROJECT_ID gcloud config set compute/zone ZONE
Substitua PROJECT_ID pelo ID do projeto do Google Cloud e ZONE pelo nome da zona que você usará para criar recursos. Se você não tiver certeza sobre qual zona escolher, use
us-central1-a
.Exemplo:
gcloud config set project devops-test-project-12345 gcloud config set compute/zone us-central1-a
Crie um novo bucket do Cloud Storage para pacotes de aplicativos:
gsutil mb gs://$(gcloud config get-value core/project)-artifacts
Se você não quiser manter os pacotes de aplicativos de todos os builds, configure uma regra de ciclo de vida de objeto para excluir arquivos que tenham passado de uma certa idade.
Configurar uma conta de serviço para o Azure Pipelines
Crie uma conta de serviço do Google Cloud que o Azure Pipelines possa usar para acessar seu projeto do Google Cloud.
Crie uma conta de serviço para o Azure Pipelines:
AZURE_PIPELINES_SERVICE_ACCOUNT=$(gcloud iam service-accounts create azure-pipelines --format "value(email)")
Conceda os papéis de IAM de Leitor de objetos do Storage (
roles/storage.objectViewer
) e Criador de objetos do Storage (roles/storage.objectCreator
) à conta de serviçoazure-pipelines
para que o Azure Pipelines possa fazer upload de pacotes de aplicativos para o Cloud Storage:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/storage.objectViewer gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/storage.objectCreator
Conceda o papel de Administrador do Compute (
roles/compute.admin
) à conta de serviçoazure-pipelines
para que o Azure Pipelines possa gerenciar instâncias de VM:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/compute.admin
Gere uma chave de conta de serviço:
gcloud iam service-accounts keys create azure-pipelines-key.json \ --iam-account=$AZURE_PIPELINES_SERVICE_ACCOUNT cat azure-pipelines-key.json | base64 -w 0;echo rm azure-pipelines-key.json
Você precisa da chave da conta de serviço em uma das etapas a seguir.
Configurar o ambiente de desenvolvimento
Antes de poder configurar as etapas no Azure Pipelines para automatizar a implantação, você precisa preparar o ambiente de desenvolvimento. Essa preparação inclui a criação de um grupo de instâncias gerenciadas que gerenciará as instâncias de VM do servidor da Web. Ele também inclui a criação de um balanceador de carga HTTP.
No Cloud Shell, crie uma conta de serviço para o grupo gerenciado de instâncias:
DEV_SERVICE_ACCOUNT=$(gcloud iam service-accounts create clouddemo-dev --format "value(email)")
Conceda o papel IAM de Leitor de objetos do Storage (
roles/storage.objectViewer
) à conta de serviço para que as instâncias de VM possam fazer o download de pacotes de aplicativos do Cloud Storage:gcloud projects add-iam-policy-binding $(gcloud config get-value core/project) \ --member serviceAccount:$DEV_SERVICE_ACCOUNT \ --role roles/storage.objectViewer
Conceda permissão à conta de serviço
azure-pipelines
para usar a conta de serviçoclouddemo-dev
:gcloud iam service-accounts add-iam-policy-binding $DEV_SERVICE_ACCOUNT \ --member serviceAccount:$AZURE_PIPELINES_SERVICE_ACCOUNT \ --role roles/iam.serviceAccountUser
Crie um modelo de instância que use uma imagem padrão do Windows Server 2019 Core. Você usará esse modelo apenas inicialmente, porque cada compilação produzirá um modelo novo.
gcloud compute instance-templates create clouddemo-initial \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account $DEV_SERVICE_ACCOUNT \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backend
Crie uma verificação de integridade HTTP. Como o aplicativo não tem um endpoint de verificação de integridade dedicado, é possível consultar o caminho
/
.gcloud compute http-health-checks create clouddemo-dev-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/
Crie um grupo de instâncias gerenciadas com base no modelo de instância inicial. Para simplificar, os comandos a seguir criam um grupo de instâncias gerenciadas zonais. No entanto, é possível usar a mesma abordagem para grupos de instâncias gerenciadas regionais que distribuem instâncias de VM em mais de uma zona.
gcloud compute instance-groups managed create clouddemo-dev \ --template=clouddemo-initial \ --http-health-check=clouddemo-dev-http \ --initial-delay=2m \ --size=1 && \ gcloud compute instance-groups set-named-ports clouddemo-dev --named-ports http:80
Crie um serviço de back-end do balanceador de carga que use a verificação de integridade HTTP e o grupo de instâncias gerenciadas criados anteriormente:
gcloud compute backend-services create clouddemo-dev-backend \ --http-health-checks clouddemo-dev-http \ --port-name http --protocol HTTP --global && \ gcloud compute backend-services add-backend clouddemo-dev-backend \ --instance-group clouddemo-dev --global \ --instance-group-zone=$(gcloud config get-value compute/zone)
Crie um front-end para o balanceador de carga:
gcloud compute url-maps create clouddemo-dev --default-service clouddemo-dev-backend && \ gcloud compute target-http-proxies create clouddemo-dev-proxy --url-map=clouddemo-dev && \ gcloud compute forwarding-rules create clouddemo-dev-fw-rule --global --target-http-proxy clouddemo-dev-proxy --ports=80
Crie uma regra de firewall que permita que o balanceador de carga do Google envie solicitações HTTP para instâncias anotadas com a tag
gclb-backend
. Posteriormente, você aplicará essa tag às instâncias de VM do serviço da Web.gcloud compute firewall-rules create gclb-backend --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags=gclb-backend --allow tcp:80
Configurar o ambiente de produção
A configuração do ambiente de produção requer uma sequência de etapas semelhante à que configura o ambiente de desenvolvimento.
No Cloud Shell, crie uma verificação de integridade HTTP:
gcloud compute http-health-checks create clouddemo-prod-http \ --check-interval=10s --unhealthy-threshold=10 \ --request-path=/
Crie outro grupo de instâncias gerenciadas com base no modelo de instância inicial criado anteriormente:
gcloud compute instance-groups managed create clouddemo-prod \ --template=clouddemo-initial \ --http-health-check=clouddemo-prod-http \ --initial-delay=2m \ --size=1 && \ gcloud compute instance-groups set-named-ports clouddemo-prod --named-ports http:80
Crie um serviço de back-end do balanceador de carga que use a verificação de integridade HTTP e o grupo de instâncias gerenciadas criados anteriormente:
gcloud compute backend-services create clouddemo-prod-backend --http-health-checks clouddemo-prod-http --port-name http --protocol HTTP --global && \ gcloud compute backend-services add-backend clouddemo-prod-backend --instance-group clouddemo-prod --global --instance-group-zone=$(gcloud config get-value compute/zone)
Crie um front-end de balanceador de carga:
gcloud compute url-maps create clouddemo-prod --default-service clouddemo-prod-backend && \ gcloud compute target-http-proxies create clouddemo-prod-proxy --url-map=clouddemo-prod && \ gcloud compute forwarding-rules create clouddemo-prod-fw-rule --global --target-http-proxy clouddemo-prod-proxy --ports=80
Configurar o pipeline de versão
Crie uma nova definição de versão:
- No menu do Azure DevOps, selecione Pipelines > Versões.
- Clique em New pipeline.
- Na lista de modelos, selecione Job vazio.
- Quando for necessário inserir um nome para o estágio, digite
Publish
. - Na parte superior da tela, nomeie a versão como
clouddemo-ComputeEngine
. - No diagrama de pipeline, ao lado de Artifacts, clique em Add.
Selecione Build e adicione as configurações a seguir:
- Source: selecione o repositório Git que contém o arquivo
azure-pipelines.yml
. - Default version:
Latest
- Source alias:
CloudDemo.Web
- Source: selecione o repositório Git que contém o arquivo
Clique em Adicionar.
Na caixa Artifact, clique em Continuous deployment trigger (ícone de raio) para adicionar um gatilho de implantação.
Em Continuous deployment trigger, defina a chave como Enabled.
Clique em Save.
Insira um comentário, se quiser, e confirme clicando em OK.
O canal agora fica assim:
Publicar no Cloud Storage
Agora que você criou a definição de versão, adicione as etapas para publicar o pacote do aplicativos no Cloud Storage.
- No Azure Pipelines, mude para a guia Tasks.
- Clique em Job do agente e defina as seguintes configurações:
- Pool de agentes: Azure Pipelines
- Especificação do agente: ubuntu-latest
- Ao lado de Job do agente, clique em Adicionar uma tarefa ao job do agente .
- Selecione a tarefa bash e clique em Adicionar.
Clique na tarefa recém-adicionada e defina as seguintes configurações:
- Display name:
Publish to Cloud Storage
- Tipo: inline
Script:
cat << "EOF" > CloudDemo.Mvc.deploy.ps1 $ErrorActionPreference = "Stop" # Download application package from Cloud Storage gsutil cp gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip $env:TEMP\app.zip # Install IIS Enable-WindowsOptionalFeature -Online -FeatureName ` NetFx4Extended-ASPNET45, ` IIS-WebServerRole, ` IIS-WebServer, ` IIS-CommonHttpFeatures, ` IIS-HttpErrors, ` IIS-HttpRedirect, ` IIS-ApplicationDevelopment, ` IIS-HealthAndDiagnostics, ` IIS-HttpLogging, ` IIS-LoggingLibraries, ` IIS-RequestMonitor, ` IIS-HttpTracing, ` IIS-Security, ` IIS-RequestFiltering, ` IIS-Performance, ` IIS-WebServerManagementTools, ` IIS-IIS6ManagementCompatibility, ` IIS-Metabase, ` IIS-DefaultDocument, ` IIS-ApplicationInit, ` IIS-NetFxExtensibility45, ` IIS-ISAPIExtensions, ` IIS-ISAPIFilter, ` IIS-ASPNET45, ` IIS-HttpCompressionStatic # Extract application package to wwwroot New-Item -ItemType directory -Path $env:TEMP\app Add-Type -AssemblyName System.IO.Compression.FileSystem [System.IO.Compression.ZipFile]::ExtractToDirectory("$env:TEMP\app.zip", "$env:TEMP\app") Remove-Item $env:TEMP\app.zip Move-Item -Path $(dir -recurse $env:TEMP\app\**\PackageTmp | % { $_.FullName }) -Destination c:\inetpub\wwwroot\app -force # Configure IIS web application pool and application Import-Module WebAdministration New-WebAppPool clouddemo-net4 Set-ItemProperty IIS:\AppPools\clouddemo-net4 managedRuntimeVersion v4.0 New-WebApplication -Name clouddemo -Site 'Default Web Site' -PhysicalPath c:\inetpub\wwwroot\app -ApplicationPool clouddemo-net4 # Grant read/execute access to the application pool user &icacls C:\inetpub\wwwroot\app\ /grant "IIS AppPool\clouddemo-net4:(OI)(CI)(RX)" EOF gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gsutil cp $(System.ArtifactsDirectory)/CloudDemo.Web/CloudDemo.Web/CloudDemo.Mvc.zip gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).zip gsutil cp CloudDemo.Mvc.deploy.ps1 gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1
Este script faz o seguinte:
- Gera um script de inicialização que configura o IIS.
- Configura a Google Cloud CLI para usar a chave da conta de serviço da variável de ambiente para autenticar no Google Cloud.
- Faz upload do pacote de aplicativos e do script de inicialização para o Cloud Storage.
- Display name:
Alterne para a guia Variables e adicione as seguintes variáveis.
Nome Valor Secret ServiceAccountKey
Chave da conta de serviço criada para azure-pipelines-deployer
anteriormente.Sim CloudDemo.ProjectId
ID do projeto do Google Cloud. CloudDemo.Zone
A zona que você especificou anteriormente ao executar gcloud config set compute/zone
(por exemplo,us-central1-a
)Clique em Save.
Insira um comentário se quiser e clique em OK para confirmar.
Implantar o ambiente de desenvolvimento
Agora é possível adicionar as etapas para iniciar uma implantação gradual no ambiente de desenvolvimento.
- No Azure Pipelines, mude para a guia Pipeline.
- Na caixa Estágios, selecione Adicionar > Novo estágio.
- Na lista de modelos, selecione Job vazio.
- Quando for necessário inserir um nome para o estágio, digite
Dev
. - Clique no ícone de raio, referente ao cenário recém-criado.
Defina as configurações a seguir:
- Select trigger:
After stage
- Stages:
Publish
- Select trigger:
Mantenha o mouse sobre a guia Tarefas e clique em Tarefas > Dev.
Clique em Job do agente e defina as seguintes configurações:
- Pool de agentes: Azure Pipelines
- Especificação do agente: ubuntu-latest
Ao lado de Job do agente, clique em Adicionar uma tarefa ao job do agente
.Selecione a tarefa bash e clique em Adicionar.
Clique na tarefa recém-adicionada e defina as seguintes configurações:
- Display name:
Rolling deploy
- Tipo: inline
Script:
INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId) gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gcloud compute instance-templates create $INSTANCE_TEMPLATE \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account clouddemo-dev@$(CloudDemo.ProjectId).iam.gserviceaccount.com \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backend \ --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \ --project $(CloudDemo.ProjectId) \ gcloud compute instance-groups managed set-instance-template clouddemo-dev \ --template $INSTANCE_TEMPLATE \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone) gcloud compute instance-groups managed rolling-action start-update clouddemo-dev \ --version template=$INSTANCE_TEMPLATE \ --type proactive \ --max-unavailable 0 \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone)
Este script faz o seguinte:
- Configura a Google Cloud CLI para usar a chave da conta de serviço da variável de ambiente para autenticar no Google Cloud.
- Cria um novo modelo de instância que usa o script de inicialização gerado pelo estágio anterior.
- Atualiza o grupo de instâncias atual para usar o novo modelo de instância. Observe que esse comando ainda não faz nenhuma das VMs existentes ser substituída ou atualizada. O que ele faz é garantir que qualquer VM futura nesse grupo de instâncias seja criada a partir do novo modelo.
- Inicia uma atualização gradual, fazendo com que o grupo de instâncias atual substitua as VMs atuais por novas VMs de modo gradual.
- Display name:
Clique em Save.
Insira um comentário, se quiser, e confirme clicando em OK.
Implantar o ambiente de produção
Por fim, você precisa configurar a implantação no ambiente de produção.
- No Azure Pipelines, mude para a guia Pipeline.
- Na caixa Estágios, selecione Adicionar > Novo estágio.
- Na lista de modelos, selecione Job vazio.
- Quando for necessário inserir um nome para o estágio, digite
Prod
. - Clique no ícone de raio, referente ao cenário recém-criado.
Defina as configurações a seguir:
- Select trigger:
After stage
- Stages:
Dev
- Pre-deployment approvals: (ativadas)
- Approvers: selecione seu próprio nome de usuário
- Select trigger:
Mantenha o mouse sobre a guia Tarefas e clique em Tarefas > Prod.
Clique em Job do agente e defina as seguintes configurações:
- Pool de agentes: Azure Pipelines
- Especificação do agente: ubuntu-latest
Ao lado de Agent job, clique em Add a task to agent job
para adicionar uma etapa à fase.Selecione a tarefa bash e clique em Adicionar.
Clique na tarefa recém-adicionada e defina as seguintes configurações:
- Display name:
Rolling deploy
- Tipo: inline
Script:
INSTANCE_TEMPLATE=clouddemo-$(Build.BuildId)-$(Release.ReleaseId) gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) gcloud compute instance-templates create $INSTANCE_TEMPLATE \ --machine-type n1-standard-2 \ --image-family windows-2019-core \ --image-project windows-cloud \ --service-account clouddemo-prod@$(CloudDemo.ProjectId).iam.gserviceaccount.com \ --scopes https://www.googleapis.com/auth/devstorage.read_only \ --tags gclb-backend \ --metadata sysprep-specialize-script-url=gs://$(CloudDemo.ProjectId)-artifacts/CloudDemo.Mvc-$(Build.BuildId)-$(Release.ReleaseId).deploy.ps1 \ --project $(CloudDemo.ProjectId) \ gcloud compute instance-groups managed set-instance-template clouddemo-prod \ --template $INSTANCE_TEMPLATE \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone) gcloud compute instance-groups managed rolling-action start-update clouddemo-prod \ --version template=$INSTANCE_TEMPLATE \ --type proactive \ --max-unavailable 0 \ --project $(CloudDemo.ProjectId) \ --zone $(CloudDemo.Zone)
- Display name:
Clique em Save.
Insira um comentário, se quiser, e confirme clicando em OK.
execute o pipeline
Agora que você configurou o pipeline inteiro, é possível testá-lo executando uma alteração no código-fonte:
- No computador local, abra o arquivo
applications\clouddemo\net4\CloudDemo.Mvc\Views\Home\Index.cshtml
no repositório Git que você clonou anteriormente. - Mude o valor de
ViewBag.Title
deHome Page
paraThis app runs on GKE
. Confirme as alterações e envie-as para o Azure Pipelines.
Visual Studio
- Abra o Team Explorer e clique no ícone Home.
- Clique em Changes.
- Insira uma mensagem de confirmação como
Change site title
. - Clique em Confirmar tudo e enviar por push.
Linha de comando
Organize todos os arquivos modificados:
git add -A
Confirme as alterações no repositório local:
git commit -m "Change site title"
Envie as alterações para o Azure Pipelines:
git push
No menu do Azure DevOps, selecione Pipelines.
Um build é acionado.
Após a conclusão do build, selecione Pipelines > Versões. Um processo de versão será iniciado.
Clique em Release-1 para abrir a página de detalhes e aguarde até que o status do stage Dev mude para Succeeded.
No console do Google Cloud, selecione Serviços de rede > Balanceamento de carga > clouddemo-dev.
Anote o endereço IP do front-end.
Abra uma nova janela do navegador e acesse este endereço:
http://IP_ADDRESS/clouddemo/
em que
IP_ADDRESS
é o endereço IP do front-end.Observe que o aplicativo foi implantado e está usando o título personalizado.
Você pode ver um erro no início porque o balanceador de carga leva alguns minutos para ficar disponível.
No Azure Pipelines, clique no botão Approve abaixo do cenário Prod, para promover a implantação no ambiente de produção.
Se você não encontrar o botão, talvez seja necessário aprovar ou rejeitar uma versão anterior.
Insira um comentário, se quiser, e clique em Approve para confirmar.
Aguarde o status do ambiente Prod passar para Succeeded.
No console do Google Cloud, selecione Serviços de rede > Balanceamento de carga > clouddemo-prod.
Anote o endereço IP do front-end.
Abra uma nova janela do navegador e acesse este endereço:
http://IP_ADDRESS/clouddemo/
em que
IP_ADDRESS
é o endereço IP do front-end.Observe que o aplicativo foi implantado e está usando o título personalizado.
Limpeza
Para evitar custos adicionais depois de concluir este tutorial, exclua as entidades criadas.
Excluir o projeto do Azure Pipelines
Para excluir o projeto do Azure Pipelines, consulte a documentação de serviços do Azure DevOps. A exclusão do projeto do Azure Pipelines faz com que todas as alterações no código-fonte sejam perdidas.
Excluir os projetos de desenvolvimento e produção do Google Cloud
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Leia sobre as práticas recomendadas para gerenciar imagens.
- Saiba como implantar um grupo do SQL Server altamente disponível no Compute Engine.
- Leia sobre o .NET no Google Cloud Platform.
- Instale o Cloud Tools para Visual Studio
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.