Partilhar via


Personalizar pipelines Python

Este artigo descreve como personalizar a criação, o teste, o empacotamento e a entrega de aplicativos e código Python no Azure Pipelines. Para criar seu primeiro pipeline com Python, consulte o Guia de início rápido do Python.

Com agentes hospedados pela Microsoft no Azure Pipelines, você pode criar seus aplicativos Python sem precisar configurar sua própria infraestrutura. As ferramentas que você normalmente usa para criar, testar e executar aplicativos Python, incluindo pip, são pré-instaladas.

Talvez seja necessário solicitar a concessão gratuita de trabalhos paralelos ou comprar um trabalho paralelo para executar seus pipelines.

Para criar aplicativos Python com o Azure Pipelines, você precisa de um agente auto-hospedado com Python instalado. Para instalar o Python em seu agente, consulte UsePythonVersion.

Usar uma versão específica do Python

Para usar uma versão específica do Python em seu pipeline, adicione a tarefa Usar versão do Python ao azure-pipelines.yml. O exemplo a seguir definição de pipeline YAML define o pipeline para usar Python 3.11.

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.11'

Use várias versões do Python

Para executar um pipeline com várias versões do Python, por exemplo, para testar um pacote em relação a essas versões, defina um job com uma matrix das versões do Python. Em seguida, defina a UsePythonVersion tarefa para fazer referência à matrix variável. Por exemplo:

jobs:
- job: 'Test'
  pool:
    vmImage: 'ubuntu-latest'
  strategy:
    matrix:
      Python38:
        python.version: '3.8'
      Python39:
        python.version: '3.9'
      Python310:
        python.version: '3.10'

  steps:
  - task: UsePythonVersion@0
    inputs:
      versionSpec: '$(python.version)'

Você pode adicionar tarefas que usam cada versão do Python na matriz.

Executar scripts do Python

Para executar scripts Python a partir do repositório, use um script elemento e especifique um nome de arquivo. Por exemplo:

- script: python src/example.py

Você também pode usar a tarefa de script Python para executar scripts Python embutidos.

- task: PythonScript@0
  inputs:
    scriptSource: 'inline'
    script: |
      print('Hello world 1')
      print('Hello world 2')

Para parametrizar a execução do script, use a PythonScript tarefa com arguments valores para passar argumentos para o processo em 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

Você pode usar scripts para instalar pacotes PyPI específicos com pipo . O exemplo a seguir instala ou atualiza pip e os setuptools wheel e pacotes.

- script: python -m pip install --upgrade pip setuptools wheel
  displayName: 'Install tools'

Requisitos de instalação

Depois de atualizar pip e amigos, um próximo passo típico é instalar dependências do requirements.txt.

- script: pip install -r requirements.txt
  displayName: 'Install requirements'

Executar testes

Você pode usar scripts para instalar e executar vários testes em seu pipeline.

Execute testes de fiapos com flocos8

O código YAML a seguir instala ou atualiza flake8 e o usa para executar testes de fiapos.

- script: |
    python -m pip install flake8
    flake8 .
  displayName: 'Run lint tests'

Teste com pytest e colete métricas de cobertura com pytest-cov

O código YAML a seguir instala e pytest-cov executa testes, resultados de pytest teste de saída no formato JUnit e resultados de cobertura de código de saída 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'

Executar testes com Tox

Os Pipelines do Azure podem executar trabalhos de teste Tox paralelos para dividir o trabalho. Em um computador de desenvolvimento, você tem que executar seus ambientes de teste em série. O exemplo a seguir usa tox -e py para executar qualquer versão do Python que esteja ativa para o trabalho atual.

- job:

  pool:
    vmImage: 'ubuntu-latest'
  strategy:
    matrix:
      Python38:
        python.version: '3.8'
      Python39:
        python.version: '3.9'
      Python310:
        python.version: '3.10'

  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 de testes

Adicione a tarefa Publicar resultados do teste para publicar os resultados do teste 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 resultados de cobertura de código no servidor. Você pode ver as métricas de cobertura no resumo da compilação e baixar relatórios HTML para análise adicional.

- task: PublishCodeCoverageResults@2
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

Empacotar e entregar código

Para autenticar com twineo , use a tarefa Python twine upload authenticate para armazenar credenciais de autenticação na variável de PYPIRC_PATH 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 seus pacotes.

- script: |
   twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>

Você também pode usar o Azure Pipelines para criar uma imagem para seu aplicativo Python e enviá-la por push para um registro de contêiner.