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.
Serviços do Azure DevOps
Este tutorial mostra como usar o Azure Pipelines para integração contínua e entrega contínua (CI/CD) para criar e implantar um aplicativo Web Python no Serviço de Aplicativo do Azure no Linux. Seu pipeline cria e implanta automaticamente seu aplicativo Web Python no Serviço de Aplicativo sempre que houver uma confirmação para o repositório de código do aplicativo.
Neste tutorial, você:
- Crie um aplicativo Web Python e carregue-o no Serviço de Aplicativo do Azure.
- Conecte seu projeto do Azure DevOps ao Azure.
- Crie um pipeline de build e implantação específicos do Python do Azure Pipelines para seu aplicativo.
- Execute o pipeline para criar, testar e implantar em seu aplicativo Web do Serviço de Aplicativo do Azure.
- Defina um gatilho para executar o pipeline sempre que você se comprometer com seu repositório.
Para entender mais sobre os conceitos do Azure Pipelines, assista ao seguinte vídeo:
Pré-requisitos
| Produto | Requisitos |
|---|---|
| Azure DevOps | - Um projeto do Azure DevOps. – Capacidade de executar pipelines em agentes hospedados pela Microsoft. Você pode comprar um trabalho paralelo ou solicitar uma camada gratuita. – Conhecimento básico do YAML e do Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline. - Permissões: - Para criar um pipeline: você deve estar no grupo Colaboradores e o grupo precisa ter a permissão Criar pipeline de build definida como Permitir. Os membros do grupo Administradores do Projeto podem gerenciar pipelines. – Para criar conexões de serviço: você deve ter a função Administrador ou Criador para conexões de serviço. |
| GitHub | - Uma conta do GitHub . – Uma conexão de serviço do GitHub para autorizar o Azure Pipelines. |
| Azul | Uma assinatura do Azure. |
| Produto | Requisitos |
|---|---|
| Azure DevOps | - Um projeto do Azure DevOps. - Um agente auto-hospedado. Para criar um, consulte Agentes auto-hospedados. – Conhecimento básico do YAML e do Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline. - Permissões: - Para criar um pipeline: você deve estar no grupo Colaboradores e o grupo precisa ter a permissão Criar pipeline de build definida como Permitir. Os membros do grupo Administradores do Projeto podem gerenciar pipelines. – Para criar conexões de serviço: você deve ter a função Administrador ou Criador para conexões de serviço. |
| GitHub | - Uma conta do GitHub . – Uma conexão de serviço do GitHub para autorizar o Azure Pipelines. |
| Azul | Uma assinatura do Azure. |
Configurar um agente auto-hospedado
Não há suporte para o download de versões do Python em agentes de build auto-hospedados. Para usar seu próprio agente auto-hospedado, você precisa configurar o agente para executar o Python.
Para evitar problemas de compatibilidade, corresponda à versão do Python com a versão de runtime em seu aplicativo Web dos Serviços de Aplicativo do Azure, 3.11 nesse caso. Você deve pré-instalar a versão do Python. Use o instalador completo para obter uma versão compatível com pip do Python.
A versão desejada do Python precisa ser adicionada ao cache de ferramentas no agente auto-hospedado para que a tarefa de pipeline possa usá-la. Normalmente, o cache de ferramentas está localizado no diretório _work/_tool do agente. Como alternativa, você pode substituir o caminho com a variável AGENT_TOOLSDIRECTORYde ambiente. No diretório de ferramentas, crie a seguinte estrutura de diretório com base na versão do Python:
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
O número de versão deve seguir o formato 1.2.3. A plataforma deve ser x86 ou x64. Os arquivos de ferramenta devem ser os arquivos de versão Python descompactados.
{platform}.complete deve ser um arquivo de 0 byte que se parece com x86.complete ou com x64.complete, significando apenas que a ferramenta está instalada corretamente no cache.
Por exemplo, para usar o Python 3.11 em um computador Windows de 64 bits, crie a seguinte estrutura de diretório:
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Se o computador que hospeda seu agente já tiver a versão do Python que você deseja usar, você poderá copiar os arquivos para o cache de ferramentas. Se você não tiver a versão do Python, poderá baixá-la no site do Python.
Preparar o aplicativo de exemplo
Faça um fork do repositório de exemplo em https://github.com/Microsoft/python-sample-vscode-flask-tutorial para sua conta do GitHub.
Clone sua bifurcação em seu computador local usando
git clone <your-forked-repository-url>.git.Vá para o clone local usando
cd python-sample-vscode-flask-tutoriale compile e execute o aplicativo localmente para garantir que ele funcione.python -m venv .env source .env/Scripts/activate pip install --upgrade pip pip install -r ./requirements.txt export FLASK_APP=hello_app.webapp flask runPara testar o aplicativo, acesse http://localhost:5000 uma janela do navegador e verifique se você vê o título do Tutorial do Flask do Visual Studio.
Feche a janela do navegador e interrompa o servidor Flask usando Ctrl+C.
Criar e implantar o aplicativo Web do Serviço de Aplicativo
Crie seu aplicativo Web do Serviço de Aplicativo do Azure usando o Cloud Shell no portal do Azure. Para usar o Cloud Shell, entre no portal do Azure e selecione o botão Cloud Shell na barra de ferramentas.
O Cloud Shell será exibido na parte inferior do navegador. Verifique se o Bash está selecionado como o ambiente no menu suspenso. Você pode maximizar a janela do Cloud Shell para dar a si mesmo mais espaço.
Dica
Para colar no Cloud Shell, use Ctrl+Shift+V ou clique com o botão direito do mouse e selecione Colar no menu de contexto.
Criar e implantar o aplicativo Web
No Cloud Shell, clone seu repositório bifurcado no Azure com o comando a seguir, substituindo
<your-forked-repository-url>pela URL do repositório bifurcado.git clone <your-forked-repository-url>Altere o diretório para a pasta do repositório clonado.
cd python-sample-vscode-flask-tutorialExecute o comando az webapp up para provisionar o aplicativo Web do Serviço de Aplicativo e fazer a primeira implantação. Use o
--name <your-web-app-name>parâmetro para atribuir um nome exclusivo no Azure, como um nome pessoal ou de empresa, juntamente com um identificador de aplicativo, como--name <your-name>-flaskpipelines. A execuçãoaz webapp upsem parâmetros atribui um nome de aplicativo Web gerado aleatoriamente que é exclusivo no Azure.az webapp up --name <your-web-app-name>
O az webapp up comando reconhece o aplicativo como um aplicativo Python e executa as seguintes ações:
- Cria um grupo de recursos padrão.
- Cria um plano padrão do Serviço de Aplicativo.
-
Cria um aplicativo Web com o nome atribuído. O aplicativo
URLé<your-web-app-name>.azurewebsites.net. - Implanta todos os arquivos do diretório de trabalho atual em um arquivo zip, com a automação de build habilitada.
- Armazena em cache os parâmetros localmente no arquivo .azure/config para que você não precise especificá-los novamente ao implantar da pasta do projeto com ou outros
az webapp upaz webappcomandos. Os comandos usam os valores armazenados em cache automaticamente por padrão.
Você pode substituir as ações padrão com seus próprios valores usando os parâmetros de comando. Para obter mais informações, consulte az webapp up.
O az webapp up comando produz a seguinte saída JSON para o aplicativo Web de exemplo:
{
"URL": <your-web-app-url>,
"appserviceplan": <your-app-service-plan-name>,
"location": <your-azure-region>,
"name": <your-web-app-name>,
"os": "Linux",
"resourcegroup": <your-resource-group>,
"runtime_version": "python|3.11",
"runtime_version_detected": "-",
"sku": <sku>,
"src_path": <repository-source-path>
}
Registre os URLresourcegroupvalores e runtime_version os valores a serem usados posteriormente neste tutorial.
Definir o comando de inicialização
O aplicativo python-sample-vscode-flask-tutorial tem um arquivo startup.txt que contém o comando de inicialização específico para o aplicativo Web. Defina a propriedade de configuração do aplicativo startup-file Web como inserindo o comando a startup.txt seguir, usando o grupo de recursos e os nomes do aplicativo Web.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Quando o comando for concluído, a saída JSON mostrará todas as configurações do aplicativo Web.
Para ver o aplicativo em execução, abra um navegador e acesse o URL exibido na saída do comando az webapp up. Se for exibida uma página genérica, aguarde alguns segundos para que o Serviço de Aplicativo seja iniciado e atualize a página. Verifique se você vê o título do Tutorial do Flask do Visual Studio.
Conectar seu projeto do Azure DevOps à sua assinatura do Azure
Para usar o Azure Pipelines para implantar em seu aplicativo Web do Serviço de Aplicativo do Azure, você precisa conectar seu projeto do Azure DevOps aos recursos do Azure.
Criar uma entidade de serviço
Uma entidade de serviço é uma identidade criada para aplicativos, serviços hospedados e ferramentas automatizadas para acessar recursos do Azure. Esse acesso é restrito às funções atribuídas à entidade de serviço, dando a você controle sobre quais recursos podem ser acessados em qual nível.
Para criar uma entidade de serviço, execute o comando a seguir no Bash Cloud Shell. Substitua <service-principal-name> por um nome para sua entidade de serviço, <your-subscription-id> pela ID da assinatura do Azure e <your-resource-group> pelo grupo de recursos do aplicativo Web.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
O comando retorna o seguinte objeto JSON:
{
"appId": "<client GUID>",
"displayName": "<service-principal-name">,
"password": "<password-string>",
"tenant": "<tenant GUID>"
...
}
Anote o valor appIde password os tenantIdvalores a serem usados para criar uma conexão de serviço na próxima seção.
Criar uma conexão de serviço
Uma conexão de serviço fornece acesso autenticado do Azure Pipelines a serviços externos e remotos. Para implantar em seu aplicativo Web do Serviço de Aplicativo do Azure, crie uma conexão de serviço com o grupo de recursos para seu aplicativo Web.
Na página do projeto do Azure DevOps, selecione as configurações do Projeto.
Nas Configurações do Projeto, selecioneconexões do Serviço>.
Na página Conexões de serviço , selecione Nova conexão de serviço ou Criar conexão de serviço se essa conexão de serviço for a primeira no projeto.
Na tela Nova conexão de serviço , selecione O Gerenciador de Recursos do Azure e selecione Avançar.
Na tela Nova conexão de serviço do Azure , selecione seu tipo de identidade. Este exemplo usa o registro de aplicativo (automático), o que é recomendado. Para obter mais informações sobre métodos de autenticação, consulte Conectar-se ao Azure usando uma conexão de serviço do Azure Resource Manager.
Para Credencial, selecione Federação de identidade de carga de trabalho (automática).
Conclua os seguintes campos:
- Nível de escopo: Selecionar Assinatura.
- Assinatura: selecione sua assinatura do Azure.
- Grupo de recursos: selecione o grupo de recursos que contém seu aplicativo Web.
- Nome da conexão de serviço: insira um nome descritivo para a conexão.
- Conceder permissões de acesso a todos os pipelines: marque esta caixa de seleção para conceder acesso a todos os pipelines do projeto.
Selecione Salvar.
Na página do projeto do Azure DevOps, selecione as configurações do Projeto.
Nas Configurações do Projeto, selecioneconexões do Serviço>.
Na página Conexões de serviço , selecione Nova conexão de serviço ou Criar conexão de serviço se essa conexão de serviço for a primeira no projeto.
Na tela Nova conexão de serviço , selecione O Gerenciador de Recursos do Azure e selecione Avançar.
Selecione a entidade de serviço (manual) e, em seguida, selecione Avançar.
Na tela nova conexão de serviço do Azure , conclua os seguintes campos:
- Ambiente: selecione a Nuvem do Azure.
- Nível do Escopo: Selecionar Assinatura.
- ID da assinatura: insira sua ID de assinatura do Azure.
- Nome da assinatura: insira o nome da assinatura do Azure.
Na seção Autenticação , conclua os seguintes campos:
-
ID da Entidade de Serviço: insira o
appIdvalor retornado peloaz ad sp create-for-rbaccomando. - Credencial: selecione a chave da entidade de serviço.
-
Chave da entidade de serviço: insira o
passwordvalor retornado peloaz ad sp create-for-rbaccomando. -
ID do locatário: insira o
tenantvalor retornado peloaz ad sp create-for-rbaccomando. - Selecione Verificar para verificar a conexão.
-
ID da Entidade de Serviço: insira o
Na seção Detalhes , em Nome da Conexão de Serviço, insira um nome para a conexão de serviço.
Marque a caixa de seleção para conceder permissões de acesso a todos os pipelines.
Selecione Verificar e salvar.
A nova conexão aparece na lista de conexões de serviço e está pronta para ser usada em seu pipeline.
Criar um pipeline
Crie um pipeline para compilar e implantar seu aplicativo Web Python no Serviço de Aplicativo do Azure.
No menu de navegação à esquerda do projeto, selecione Pipelines.
Na página Pipelines , selecione Novo pipeline ou Criar pipeline se esse pipeline for o primeiro no projeto.
Na tela Onde está o código , selecione GitHub. Talvez você receba uma solicitação para entrar no GitHub.
Na tela Selecionar um repositório, selecione o repositório de sua amostra bifurcado. O GitHub pode solicitar que você insira sua senha do GitHub novamente ou instale o aplicativo GitHub do Azure Pipelines . Siga as instruções na tela para instalar o aplicativo. Para obter mais informações, consulte a autenticação do aplicativo GitHub.
Na página Configurar seu pipeline, selecionePython para o Aplicativo Web Linux no Azure.
Na próxima tela, selecione sua assinatura do Azure e selecione Continuar.
Na próxima tela, selecione seu aplicativo Web do Azure e selecione Validar e configurar.
O Azure Pipelines cria um arquivo azure-pipelines.yml e o exibe no editor de pipeline do YAML.
No menu de navegação à esquerda do projeto, selecione Pipelines.
Na página Pipelines , selecione Novo pipeline ou Criar pipeline se esse pipeline for o primeiro no projeto.
Na página Onde está o código , selecione GitHub Enterprise Server. Talvez você receba uma solicitação para entrar no GitHub.
Na guia Selecionar um repositório , selecione o repositório de exemplo bifurcado. O GitHub pode solicitar que você insira sua senha do GitHub novamente ou instale a extensão ou o aplicativo GitHub do Azure Pipelines . Siga as instruções na tela para instalar o aplicativo. Para obter mais informações, confira Acesso ao repositórios do GitHub.
Na página Configurar seu pipeline, selecione Pipeline padrão.
Na página Examinar o YAML do pipeline , substitua o conteúdo do arquivo de azure-pipelines.yml inicial pelo seguinte arquivo de pipeline YAML. No arquivo YAML:
Substitua os
<your-service-connection-name>espaços reservados e<your-web-app-name>os espaços reservados por seus próprios valores.Substitua
<your-pool-name>pelo nome do pool de agentes que você deseja usar e substitua<your-python-version>pela versão do Python em execução em seu agente. Essa versão deve corresponder àruntime_versionsaída JSON doaz webapp upcomando.
Arquivo de pipeline YAML
Na página Examinar o YAML do pipeline , examine o pipeline para ver o que ele faz. Verifique se todas as entradas padrão são apropriadas para seu código. Para saber mais sobre o esquema de arquivo YAML do pipeline, consulte a referência de esquema YAML.
O arquivo de pipeline YAML de exemplo a seguir define seu pipeline de CI/CD como uma série de estágios, trabalhos e etapas, em que cada etapa contém os detalhes de diferentes tarefas e scripts. O código YAML gerado preenche automaticamente os espaços reservados com valores para seu aplicativo e conexão.
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setuptools
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-web-app-name>'
# Environment name
environmentName: '<your-web-app-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version:
pythonVersion: '<your-python-version>'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
name: '<your-pool-name>'
demands: python
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
name: '<your-pool-name'
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : <your-web-app-name>'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'startup.txt'
Variáveis
A variables seção no início do arquivo YAML define as seguintes variáveis:
| Variável | Descrição |
|---|---|
azureServiceConnectionId |
A ID da conexão de serviço do Azure Resource Manager. |
webAppName |
O nome do aplicativo Web do Serviço de Aplicativo. |
vmImageName |
O nome do sistema operacional a ser usado para o agente de compilação. |
environmentName |
O nome do ambiente no qual implantar, que é criado automaticamente quando o trabalho de implantação é executado. |
projectRoot |
A pasta raiz que contém o código do aplicativo. |
pythonVersion |
A versão do Python a ser usada nos agentes de compilação e implantação. |
| Variável | Descrição |
|---|---|
azureServiceConnectionId |
A ID da conexão de serviço do Azure Resource Manager. |
webAppName |
O nome do aplicativo Web do Serviço de Aplicativo. |
environmentName |
O nome do ambiente no qual implantar, que é criado automaticamente quando o trabalho de implantação é executado. |
projectRoot |
A pasta que contém o código do aplicativo. O valor é uma variável de sistema automática. |
pythonVersion |
A versão do Python a ser usada nos agentes de compilação e implantação. |
Estágios de build e implantação
O pipeline consiste em estágios de build e implantação.
Fase de construção
O estágio de build contém um único trabalho executado no sistema operacional definido na vmImageName variável, nesse caso ubuntu-latest.
- job: BuildJob
pool:
vmImage: $(vmImageName)
O estágio de build contém um único trabalho executado em um agente no pool identificado pelo name parâmetro.
Você pode especificar os recursos do agente com a palavra-chave demands. Por exemplo, demands: python especifica que o agente deve ter o Python instalado. Para especificar um agente auto-hospedado pelo nome, você pode usar demands: Agent.Name -equals <agent-name>.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
O trabalho contém várias etapas:
Primeiro, a tarefa UsePythonVersion seleciona a versão do Python a ser usada, conforme definido na
pythonVersionvariável.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'A próxima etapa usa um script que cria um ambiente virtual do Python e instala as dependências do aplicativo.
requirements.txtOworkingDirectoryparâmetro especifica o local do código do aplicativo.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setuptools pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"A tarefa ArchiveFiles cria um arquivo ZIP que contém o aplicativo Web compilado.
- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: trueOs parâmetros são definidos da seguinte maneira:
Parâmetro Descrição rootFolderOrFileO local do código do aplicativo. includeRootFolderSe a pasta raiz deve ser incluída no arquivo .zip . Defina como false. Se definido comotrue, o conteúdo do arquivo .zip será colocado em uma pasta nomeada e a tarefa não poderá encontrar o código do aplicativo.archiveTypeO tipo de arquivo a ser criado. Defina como zip.archiveFileO local do arquivo .zip a ser criado. replaceExistingArchiveIndica se um arquivo existente deve ser substituído se o arquivo já existir. Defina como true.Em
.zipseguida, o arquivo é carregado no pipeline como um artefato chamadodrop. O estágio de implantação usa o arquivo .zip para implantar o aplicativo.- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop- O
uploadparâmetro define o local e o nome do arquivo .zip a ser carregado. - O
artifactparâmetro define o nome do artefato criado comodrop.
- O
Etapa de implantação
O estágio de implantação será executado se o estágio de build for concluído com êxito. As dependsOn palavras-chave e as condition palavras-chave definem esse comportamento.
dependsOn: Build
condition: succeeded()
O estágio de implantação contém um único trabalho de implantação configurado da seguinte maneira.
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
A
deploymentpalavra-chave indica que o trabalho é um trabalho de implantação direcionado a um ambiente para o qual implantar. Eleenvironmenté criado automaticamente em seu projeto quando o trabalho é executado.O
poolparâmetro especifica o pool de agentes de implantação e usa o pool de agentes padrão se umnamenão for especificado. O agente é executado no sistema operacional definido navmImageNamevariável, nesse casoubuntu-latest.
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
A
deploymentpalavra-chave indica que o trabalho é um trabalho de implantação direcionado a um ambiente para o qual implantar. Eleenvironmenté criado automaticamente em seu projeto quando o trabalho é executado.O
poolparâmetro especifica o pool de agentes de implantação e deve conter um agente com a capacidade de executar a versão do Python especificada no pipeline.
A strategy palavra-chave define a estratégia de implantação.
strategy:
runOnce:
deploy:
steps:
- A palavra-chave
runOnceespecifica que o trabalho de implantação é executado uma vez. - A
deploypalavra-chave especifica astepsexecução no trabalho de implantação.
Neste steps estágio, execute as seguintes tarefas:
- UsePythonVersion@0 seleciona a versão do Python a ser usada, como no estágio build.
-
AzureWebApp@1 implanta o aplicativo Web e o
dropartefato ZIP.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : <your-web-app-name>'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
- O
azureSubscriptionparâmetro contém asazureServiceConnectionIdvariáveis de pipeline especificadas. - Contém
appNameo valor dawebAppNamevariável. - Especifica
packageo nome e o local do arquivo .zip a ser implantado.
Além disso, como o repositório python-vscode-flask-tutorial contém o comando de inicialização do aplicativo em um arquivo chamado startup.txt, você pode especificar o comando de inicialização do aplicativo adicionando o parâmetro: startUpCommand: 'startup.txt'.
Executar o pipeline
Agora você está pronto para experimentar o pipeline.
No editor de pipeline, selecione Salvar e executar.
Na tela Salvar e executar , adicione uma mensagem de confirmação se desejar e selecione Salvar e executar.
Você pode assistir à execução do pipeline selecionando os Estágios ou Trabalhos na página Resumo do pipeline. Cada trabalho e estágio exibem uma marca de seleção verde conforme ela é concluída com êxito. Se ocorrerem erros, eles aparecerão no resumo ou nas etapas de trabalho.
Você pode retornar rapidamente ao editor yaml selecionando os pontos verticais no canto superior direito na página Resumo e selecionando Editar pipeline.
No trabalho de implantação, selecione a tarefa Implantar Aplicativo Web do Azure para exibir sua saída.
Na saída, selecione a URL após a URL do Aplicativo do Serviço de Aplicativo. O aplicativo deve aparecer da seguinte maneira:
Observação
Se uma implantação de aplicativo falhar devido a uma dependência ausente, o arquivo requirements.txt não foi processado durante a implantação. Esse problema poderá ocorrer se você criar o aplicativo Web diretamente no portal em vez de usar o az webapp up comando.
O comando az webapp up define especificamente a ação de build SCM_DO_BUILD_DURING_DEPLOYMENT como true. Se você provisionar um serviço de aplicativo por meio do portal, essa ação não será definida automaticamente.
Para definir esta ação:
- Na página do portal do seu aplicativo Web, selecione Configuração no menu de navegação à esquerda.
- Na guia Configurações do Aplicativo , selecione Nova Configuração do Aplicativo.
- No pop-up exibido, defina Nome como
SCM_DO_BUILD_DURING_DEPLOYMENT, defina Valor comotruee selecione OK. - Selecione Salvar na parte superior da página Configuração .
- Executar o pipeline novamente. As dependências agora devem ser instaladas durante a implantação.
Disparar uma execução de pipeline
Esse pipeline é definido para ser executado sempre que uma alteração faz check-in no repositório de código. Para disparar uma execução de pipeline, confirme uma alteração no repositório. Por exemplo, você pode adicionar um novo recurso ao aplicativo ou atualizar as dependências do aplicativo.
- Vá para o repositório GitHub para seu aplicativo.
- Faça uma alteração no código, como alterar o título do aplicativo.
- Confirme a alteração.
- Vá para o pipeline e verifique se uma nova execução foi criada e está em execução.
- Quando a execução for concluída, verifique se a alteração foi implantada em seu aplicativo Web.
- No portal do Azure, acesse seu aplicativo Web e selecione o Centro de Implantação no menu de navegação à esquerda.
- Selecione a guia Logs e verifique se a nova implantação está listada.
Implantar aplicativos Django no Serviço de Aplicativo
Você pode usar o Azure Pipelines para implantar aplicativos Django no Serviço de Aplicativo no Linux se estiver usando um banco de dados separado. Você não pode usar um banco de dados SQLite porque o Serviço de Aplicativo bloqueia o arquivo db.sqlite3 , impedindo leituras e gravações. Esse comportamento não afeta bancos de dados externos.
Conforme explicado no processo de inicialização do contêiner, o Serviço de Aplicativo procura automaticamente um arquivo wsgi.py no código do aplicativo, que normalmente contém o objeto do aplicativo. Se você quiser personalizar o comando de inicialização, use o startUpCommand parâmetro na AzureWebApp@1 etapa do arquivo de pipeline YAML.
Ao usar o Django, você normalmente deseja migrar os modelos de dados usando manage.py migrate depois de implantar o código do aplicativo. Você pode adicionar startUpCommand com um script pós-implantação para esta finalidade: Por exemplo, aqui está a propriedade startUpCommand na tarefa AzureWebApp@1.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Executar testes no agente de construção
Como parte do processo de compilação, convém executar testes no código do aplicativo. Os testes são executados no agente de compilação, portanto, você precisa instalar suas dependências em um ambiente virtual no agente de compilação. Após a execução dos testes, exclua o ambiente virtual de teste antes de criar o arquivo .zip para implantação.
Os elementos de script a seguir ilustram esse processo. Coloque-os antes da tarefa ArchiveFiles@2 no arquivo azure-pipelines.yml. Para obter mais informações, consulte Executar scripts multiplataforma.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
Você também pode usar uma tarefa como PublishTestResults@2 para publicar os resultados do teste no pipeline. Para obter mais informações, consulte Executar testes.
Limpar os recursos
Se você terminar de usar os recursos do Azure criados neste tutorial, exclua-os para evitar incorrer em encargos adicionais.
- Exclua o projeto do Azure DevOps que você criou. A exclusão do projeto exclui o pipeline e a conexão de serviço.
- Exclua o grupo de recursos do Azure que contém o Serviço de Aplicativo e o Plano do Serviço de Aplicativo. No portal do Azure, vá para o grupo de recursos, selecione Excluir grupo de recursos e siga os prompts.
- Exclua a conta de armazenamento do Azure que mantém o sistema de arquivos do Cloud Shell. Feche o Cloud Shell e localize o grupo de recursos que começa com cloud-shell-storage-. Selecione Excluir grupo de recursos e siga os prompts.