Construir aplicativos Python
Azure DevOps Services | Azure DevOps Server | 2020 Azure DevOps Server 2019
Pode utilizar os Pipelines Azure para construir, testar e implementar aplicações e scripts Python como parte do seu sistema CI/CD. Este artigo centra-se na criação de um oleoduto básico.
Se quiser um tutorial de ponta a ponta, consulte o Uso ci/CD para implementar uma aplicação web Python para Serviço de Aplicações do Azure no Linux.
Para criar e ativar um ambiente Anaconda e instalar pacotes Anaconda com conda
, consulte os gasodutos Run com ambientes Anaconda.
Criar o seu primeiro pipeline
Novo em Azure Pipelines? Em caso afirmativo, recomendamos que experimente esta secção antes de passar para outras secções.
Obter o código
Importe este repo no seu Git repo em Azure DevOps Server 2019:
Importe este repo para o seu git repo:
https://github.com/Microsoft/python-sample-vscode-flask-tutorial
Inscreva-se nos Oleodutos Azure
Inscreva-se na Azure Pipelines. Depois de iniciar sposição, o seu navegador vai e https://dev.azure.com/my-organization-name
exibe o seu dashboard Azure DevOps.
Dentro da sua organização selecionada, crie um projeto. Se não tiver projetos na sua organização, veja um Projeto Criar um projeto para começar a ser exibido. Caso contrário, selecione o botão Criar Project no canto superior direito do painel.
Criar o pipeline
Inscreva-se na sua organização Azure DevOps e vá ao seu projeto.
Vá a Pipelines e, em seguida, selecione Novo oleoduto.
Faça os passos do assistente selecionando GitHub como a localização do seu código fonte.
Pode ser redirecionado para GitHub para se inscrever. Em caso afirmativo, insira as suas credenciais GitHub.
Quando vir a lista de repositórios, selecione o seu repositório.
Pode ser redirecionado para GitHub instalar a aplicação Azure Pipelines. Em caso afirmativo, selecione Aprovar & instalar.»
Quando o separador Configure aparecer, selecione o pacote Python para criar um pacote Python para testar em várias versões Python.
Quando o seu novo oleoduto aparecer, dê uma olhada na YAML para ver o que faz. Quando estiver pronto, selecione Save and run.
Foi-lhe pedido que entregasse um novo ficheiro azure-pipelines.yml ao seu repositório. Depois de ficar satisfeito com a mensagem, selecione Save e corra novamente.
Se quiser ver o seu oleoduto em ação, selecione o trabalho de construção.
Acabaste de executar um oleoduto que criamos automaticamente para ti, porque o teu código parecia ser uma boa combinação para o modelo do pacote Python .
Tem agora um oleoduto
azure-pipelines.yml
YAML em funcionamento () no seu repositório que está pronto para personalizar!Quando estiver pronto para fazer alterações no seu pipeline, selecione-o na página Pipelines e, em seguida, edite o
azure-pipelines.yml
ficheiro.
Leia mais adiante para saber algumas das formas mais comuns de personalizar o seu oleoduto.
YAML
- Adicione um
azure-pipelines.yml
ficheiro no seu repositório. Personalize este corte para a sua construção.
trigger:
- master
pool: Default
steps:
- script: python -m pip install --upgrade pip
displayName: 'Install dependencies'
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Crie um oleoduto (se não souber como, consulte criar o seu primeiro pipeline) e para o modelo selecionar YAML.
Desajei a piscina do Agente e o caminho do ficheiro YAML para o seu oleoduto.
Guarde o oleoduto e faça fila. Quando a mensagem Build #nnnnnnnn.n tiver sido a mensagem da fila , selecione o link de números para ver o seu pipeline em ação.
Quando estiver pronto para fazer alterações no seu oleoduto, edite-o .
Leia mais adiante para saber algumas das formas mais comuns de personalizar o seu oleoduto.
Construir ambiente
Não tens de preparar nada para a Azure Pipelines construir projetos Python. Python está pré-instalado em agentes de construção hospedados pela Microsoft para Linux, macOS ou Windows. Para ver quais as versões Python pré-instaladas, consulte utilizar um agente hospedado pela Microsoft.
Use uma versão pitão específica
Para utilizar uma versão específica de Python no seu oleoduto, adicione a tarefa Use Python Version a azure-pipelines.yml. Este corte define o gasoduto para usar Python 3.6:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.6'
Use várias versões Python
Para executar um oleoduto com várias versões Python, por exemplo para testar um pacote contra essas versões, defina um job
com uma matrix
das versões Python. Em seguida, desa esta altura, UsePythonVersion
a tarefa de referência da matrix
variável.
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-latest'
strategy:
matrix:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
Pode adicionar tarefas a executar utilizando cada versão Python na matriz.
Executar scripts do Python
Para executar scripts Python no seu repositório, use um script
elemento e especifique um nome de arquivo. Por exemplo:
- script: python src/example.py
Também pode executar scripts Python inline com a tarefa Python Script:
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
Para parametrizar a execução do script, utilize a PythonScript
tarefa com arguments
valores para passar argumentos para o processo de execução. Você pode usar sys.argv
ou a biblioteca mais sofisticada argparse
para analisar os argumentos.
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import sys
print ('Executing script file is:', str(sys.argv[0]))
print ('The arguments are:', str(sys.argv))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--world", help="Provide the name of the world to greet.")
args = parser.parse_args()
print ('Hello ', args.world)
arguments: --world Venus
Instalar dependências
Pode utilizar scripts para instalar pacotes PyPI específicos com pip
. Por exemplo, este YAML instala ou atualiza e pip
as setuptools
embalagens e wheel
pacotes.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Instalar requisitos
Depois de atualizar pip
e amigos, um passo típico seguinte é instalar dependências de requirements.txt:
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Testes de execução
Utilize scripts para instalar e executar vários testes no seu oleoduto.
Fazer testes de linho com flocos8
Para instalar ou atualizar flake8
e usá-lo para esroçar testes de pelos, utilize este YAML:
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Teste com pytest e colete métricas de cobertura com pytest-cov
Utilize este YAML para instalar pytest
e pytest-cov
, executar testes, resultados de testes de saída no formato JUnit e a cobertura do código de saída resulta no formato Cobertura XML:
- script: |
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
displayName: 'pytest'
Fazer testes com Tox
A Azure Pipelines pode executar trabalhos paralelos de teste tox para dividir o trabalho. Num computador de desenvolvimento, tens de executar os teus ambientes de teste em série. Esta amostra usa tox -e py
para executar qualquer versão de Python está ativa para o trabalho atual.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python27:
python.version: '2.7'
Python35:
python.version: '3.5'
Python36:
python.version: '3.6'
Python37:
python.version: '3.7'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python $(python.version)'
inputs:
versionSpec: '$(python.version)'
- script: pip install tox
displayName: 'Install Tox'
- script: tox -e py
displayName: 'Run Tox'
Publicar resultados dos testes
Adicione a tarefa 'Resultados dos Testes de Publicação' para publicar os resultados dos testes JUnit ou xUnit no servidor:
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Publicar resultados de cobertura de código
Adicione a tarefa 'Publicar Resultados de Cobertura de Código' para publicar os resultados da cobertura de código no servidor. Pode ver as métricas de cobertura no resumo da construção e baixar os relatórios HTML para mais análises.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Pacote e entregue código
Para autenticar, twine
utilize a tarefa Twine Authenticate para armazenar credenciais de autenticação na PYPIRC_PATH
variável ambiente.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Em seguida, adicione um script personalizado que usa twine
para publicar os seus pacotes.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Também pode usar a Azure Pipelines para construir uma imagem para a sua aplicação Python e empurrá-la para um registo de contentores.
Extensões relacionadas
- Azure DevOps plugin para PyCharm (IntelliJ) (Microsoft)
- Python em Visual Studio Code (Microsoft)