Personalizar o Python para Pipelines do Azure

Pode utilizar o Azure Pipelines para criar as suas aplicações Python sem ter de configurar qualquer infraestrutura própria. As ferramentas que utiliza frequentemente para criar, testar e executar aplicações Python , como o pip, são pré-instaladas em agentes alojados na Microsoft nos Pipelines do Azure.

Para criar o seu primeiro pipeline com Python, veja o início rápido do Python.

Utilizar uma versão específica do Python

Para utilizar uma versão específica do Python no pipeline, adicione a tarefa Utilizar Versão do Python a azure-pipelines.yml. Este fragmento define o pipeline para utilizar o Python 3.11:

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

Utilizar várias versões do Python

Para executar um pipeline com várias versões do Python, por exemplo, para testar um pacote com essas versões, defina um job com uma matrix das versões do Python. Em seguida, defina a UsePythonVersion tarefa para referenciar a matrix variável.

jobs:
- job: 'Test'
  pool:
    vmImage: 'ubuntu-latest' # other options: 'macOS-latest', 'windows-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)'

Pode adicionar tarefas a executar com cada versão do Python na matriz.

Executar scripts de Python

Para executar scripts python no seu repositório, utilize um script elemento e especifique um nome de ficheiro. Por exemplo:

- script: python src/example.py

Também pode executar scripts python inline com a tarefa Script de Python:

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

Para parametrizar a execução de scripts, utilize a PythonScript tarefa com arguments valores para transmitir argumentos para o processo de execução. Pode utilizar 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 pip e os setuptools pacotes e wheel .

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

Requisitos de instalação

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

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

Executar testes

Utilize scripts para instalar e executar vários testes no pipeline.

Executar testes lint com flake8

Para instalar ou atualizar flake8 e utilizá-lo para executar testes lint, utilize este YAML:

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

Testar com pytest e recolher métricas de cobertura com pytest-cov

Utilize este YAML para instalar pytest e pytest-cov, executar testes, resultados de teste de saída no formato JUnit e resultados de cobertura do 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 o Tox

O Azure Pipelines pode executar tarefas de teste tox paralelas para dividir o trabalho. Num computador de desenvolvimento, tem de executar os seus ambientes de teste em série. Este exemplo utiliza tox -e py para executar a versão do Python que estiver ativa para a tarefa 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 do teste

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 do código

Adicione a tarefa Publicar Resultados da Cobertura do Código para publicar os resultados de cobertura do código no servidor. Pode ver as métricas de cobertura no resumo da compilação e transferir relatórios HTML para análise adicional.

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

Compactar e entregar código

Para autenticar com twine, utilize a tarefa Autenticar Twine 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 utilize twine para publicar os pacotes.

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

Também pode utilizar o Azure Pipelines para criar uma imagem para a sua aplicação Python e enviá-la para um registo de contentor.