Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Use um pipeline multiestádido do Azure DevOps para dividir o processo de CI/CD em estágios que representam diferentes partes do ciclo de desenvolvimento. Um pipeline de vários estágios dá mais visibilidade ao processo de implantação e facilita a integração de aprovações e verificações.
Neste artigo, você criará duas instâncias do Serviço de Aplicativo e criará um pipeline YAML com três estágios:
Em um cenário real, você pode ter outra fase para a implantação em produção, dependendo do processo de DevOps.
O código de exemplo neste exercício é para um aplicativo da Web .NET para um jogo de espaço imaginado que inclui uma tabela de classificação para mostrar as pontuações mais altas. Você implantará instâncias de desenvolvimento e de preparação do Aplicativo Web do Azure para Linux.
Pré-requisitos
| Produto | Requisitos |
|---|---|
| Azure DevOps | – Uma organização e um projeto do Azure DevOps.
Crie um gratuitamente. - Permissões: – Para conceder acesso a todos os pipelines no projeto: você deve ser membro do grupo Administradores do Projeto. – Para criar conexões de serviço: você deve ter a função Administrador ou Criador para conexões de serviço. – Capacidade de executar pipelines em agentes hospedados pela Microsoft. Você pode comprar um trabalho paralelo ou solicitar uma camada gratuita. |
| GitHub | - Uma conta do GitHub . |
Criar fork do projeto
Faça um fork do repositório de exemplo a seguir no GitHub.
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
Criar as instâncias do Serviço de Aplicativo
Antes de implantar o pipeline, você precisa primeiro criar uma instância do Serviço de Aplicativo para a implantação. Você usará a CLI do Azure para criar a instância.
Entre no portal do Azure.
No menu, selecione Cloud Shell e a experiência Bash.
Gerar um número aleatório que torne exclusivo o nome de domínio do seu aplicativo Web. A vantagem de ter um valor exclusivo é que sua instância do Serviço de Aplicativo não terá um conflito de nome com outros estudantes que estiverem concluindo este tutorial.
webappsuffix=$RANDOMAbra um prompt de comando e use um comando
az group createpara criar um grupo de recursos chamado tailspin-space-game-rg que contenha todas as instâncias do Serviço de Aplicativo. Atualize o valorlocationpara usar sua região mais próxima.az group create --location eastus --name tailspin-space-game-rgUse o prompt de comando para criar um Plano do Serviço de Aplicativo.
az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linuxNo prompt de comando, crie duas instâncias do Serviço de Aplicativo, uma para cada instância (Desenvolvimento e Preparo) com o comando
az webapp create.az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|8.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|8.0"Com o prompt de comando, liste as duas instâncias do Serviço de Aplicativo para verificar se estão sendo executadas com o comando
az webapp list.az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output tableCopie os nomes das instâncias do Serviço de Aplicativo para usá-los como variáveis na próxima seção.
Criar projeto e variáveis do Azure DevOps
Configure seu projeto de Azure DevOps e um pipeline de build. Você também adicionará variáveis para as instâncias de desenvolvimento e preparação.
O pipeline de build:
- Inclui um gatilho que é executado quando há uma alteração de código na branch
- Define duas variáveis,
buildConfigurationereleaseBranchName - Inclui uma fase chamada Compilação que cria o aplicativo Web
- Publica um artefato que será usado em uma fase posterior
Adicione o estágio de Compilação
Em seu projeto do Azure DevOps, selecione Pipelines no menu de navegação à esquerda.
Selecione Novo pipeline ou Criar pipeline se esse pipeline for o primeiro no projeto.
Na tela Onde está o código , selecione GitHub.
Você pode ser redirecionado para o GitHub para então entrar. Nesse caso, insira suas credenciais do GitHub.
Na tela Selecionar um repositório , selecione o repositório em que seu aplicativo .NET está.
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 Pipeline inicial.
Substitua o conteúdo do azure-pipelines.yml por este código.
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: dropAo final, selecione Salvar e executar.
Adicionar variáveis de instância
No Azure DevOps, acesse Pipelines>Biblioteca.
Selecione + Variable group.
Em Propriedades, adicione a Versão para o nome do grupo de variáveis.
Crie duas variáveis para se referir aos nomes dos hosts de desenvolvimento e de preparação. Substitua o valor
1234pelo valor correto para a instância.Nome da variável Valor de exemplo WebAppNameDev tailspin-space-game-web-dev-1234 WebAppNameStaging tailspin-jogo-espacial-web-staging-1234 Selecione Salvar para salvar as variáveis.
Adicionar a fase de Desenvolvimento
Em seguida, você atualizará o pipeline para promover sua compilação para a fase de Desenvolvimento.
No Azure Pipelines, acesse Pipelines>Pipelines.
Selecione Editar no menu de contexto para editar o pipeline.
Atualize o azure-pipelines.yml para incluir uma fase de Desenvolvimento. Na fase de Desenvolvimento, o pipeline irá:
- Ser executado quando a fase de Compilação for bem-sucedida devido a uma condição
- Fazer download de um artefato de
drop - Implantar no Serviço de Aplicativo do Azure com uma conexão de serviço do Azure Resource Manager
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-22.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'Altere a tarefa
AzureWebApp@1para usar sua assinatura.Selecione Configurações para a tarefa.
Atualize o valor
your-subscriptionda Assinatura do Azure para usar sua própria assinatura. Talvez seja necessário autorizar o acesso como parte desse processo. Se você tiver um problema ao autorizar o recurso no editor YAML, uma abordagem alternativa será criar uma conexão de serviço.
Defina o Tipo de aplicativo como Aplicativo Web no Linux.
Selecione Adicionar para atualizar a tarefa.
Salve e execute o seu pipeline.
Adicionar a fase de Preparo
Por fim, você promoverá a fase de Desenvolvimento para a de Preparo. Ao contrário do ambiente de Desenvolvimento, você deseja ter mais controle no ambiente de preparo; para isso, adicione uma aprovação manual.
Criar ambiente de preparo
No Azure Pipelines, selecione Environments.
Selecione Novo ambiente.
Crie um novo ambiente com o nome de preparo e o Recurso definido como Nenhum.
Na página do ambiente de preparo, selecione Aprovações e verificações.
Selecione Approvals.
Em Aprovadores, selecione Adicionar usuários e grupos e, em seguida, selecione a conta.
Em Instruções para aprovadores, escreva Aprovar essa alteração quando ela estiver pronta para o preparo.
Selecione Salvar.
Adicionar nova fase ao pipeline
Você adicionará uma nova fase, Staging ao pipeline que inclui uma aprovação manual.
Edite o arquivo de pipeline e adicione a seção
Staging.trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-22.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '8.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build condition: succeeded() jobs: - deployment: Deploy pool: vmImage: 'ubuntu-22.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-22.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: staging website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'Altere a tarefa
AzureWebApp@1na fase de Preparo para usar sua assinatura.Selecione Configurações para a tarefa.
Atualize o valor
your-subscriptionda Assinatura do Azure para usar sua própria assinatura. Talvez seja necessário autorizar o acesso como parte desse processo.
Defina o Tipo de aplicativo como Aplicativo Web no Linux.
Selecione Adicionar para atualizar a tarefa.
Vá para a execução do pipeline. Observe o build enquanto ele é executado. Quando ele atinge
Staging, o pipeline aguarda a aprovação manual da liberação. Você também receberá um email informando que tem um pipeline pendente de aprovação.
Examine a aprovação e permita que o pipeline seja executado.
Limpar os recursos
Se você não quiser continuar a usar esse aplicativo, exclua o grupo de recursos no portal do Azure e o projeto no Azure DevOps com as seguintes etapas:
Para limpar o grupo de recursos:
Acesse o portal do Azure e entre.
Na barra de menus, selecione Cloud Shell. Quando solicitado, escolha a experiência do Bash.
Execute o comando az group delete a seguir para excluir o grupo de recursos que você usou,
tailspin-space-game-rg.az group delete --name tailspin-space-game-rg
Para excluir seu projeto do Azure DevOps, incluindo o pipeline de build, confira Excluir projeto.