Compilare app Python

Azure Pipelines

È possibile usare Azure Pipelines per compilare, testare e distribuire app e script Python come parte del sistema CI/CD. Questo articolo è in particolare sulla creazione di una pipeline semplice.

Per una procedura dettagliata end-to-end, vedere Usare CI/CDper distribuire un'app Web Python in Servizio app di Azure in Linux .

Per creare e attivare un ambiente Anaconda e installare pacchetti Anaconda con , vedere conda Eseguire pipeline con ambienti Anaconda.

Creare la prima pipeline

Non si ha Azure Pipelines? In tal caso, è consigliabile provare questa sezione prima di passare ad altre sezioni.

Ottenere il codice

Importare questo repository nel repository Git in Azure DevOps Server 2019:

Importare questo repository nel repository Git:

https://github.com/Microsoft/python-sample-vscode-flask-tutorial

Accedere a Azure Pipelines

Accedere a Azure Pipelines. Dopo l'accesso, il browser passa a e visualizza il dashboard https://dev.azure.com/my-organization-name Azure DevOps web.

All'interno dell'organizzazione selezionata creare un progetto. Se nell'organizzazione non sono presenti progetti, viene visualizzata la schermata Create a project to get started (Crea un progetto per iniziare). In caso contrario, selezionare Project pulsante Crea nell'angolo superiore destro del dashboard.

Creare la pipeline

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Passare a Pipelines e quindi selezionare Nuova pipeline.

  3. Eseguire i passaggi della procedura guidata selezionando prima di tutto GitHub come posizione del codice sorgente.

  4. Si potrebbe essere reindirizzati a GitHub per l'accesso. In questo caso, immettere le credenziali di GitHub.

  5. Quando viene visualizzato l'elenco dei repository, selezionare il repository.

  6. Per installare l'app Azure Pipelines, è possibile che si venga reindirizzati a GitHub. In questo caso, selezionare Approva & installare.

Quando viene visualizzata la scheda Configura, selezionare Pacchetto Python. Verrà creato un pacchetto Python da testare in più versioni di Python.

  1. Quando viene visualizzata la nuova pipeline, esaminare il codice YAML per verificarne le operazioni. Quando si è pronti, selezionare Salva ed eseguire.

    Pulsante Salva ed esegui in una nuova pipeline YAML

  2. Viene richiesto di eseguire il commit di un nuovo file azure-pipelines.yml nel repository. Quando si è soddisfatti del messaggio, selezionare Salva ed esegui di nuovo.

    Se si vuole controllare la pipeline in azione, selezionare il processo di compilazione.

    È stata appena creata ed eseguita una pipeline creata automaticamente, perché il codice sembra essere una buona corrispondenza per il modello di pacchetto Python.

    Nel repository è ora disponibile una pipeline YAML funzionante ( ) pronta azure-pipelines.yml per la personalizzazione.

  3. Quando si è pronti ad apportare modifiche alla pipeline, selezionarla nella pagina Pipelines e quindi modificare il azure-pipelines.yml file.

Vedere le sezioni seguenti per informazioni su alcuni dei modi più comuni per personalizzare la pipeline.

YAML

  1. Aggiungere un azure-pipelines.yml file nel repository. Personalizzare questo frammento di codice per la compilazione.
trigger:
- master

pool: Default

steps:
- script: python -m pip install --upgrade pip
  displayName: 'Install dependencies'

- script: pip install -r requirements.txt
  displayName: 'Install requirements'
  1. Creare una pipeline (se non si conosce la procedura, vedere Creare la prima pipeline)e per il modello selezionare YAML.

  2. Impostare il pool di agenti e il percorso del file YAML per la pipeline.

  3. Salvare la pipeline e accoda una compilazione. Quando viene visualizzato il messaggio #nnnnnnnn.n è stato accodato, selezionare il collegamento numero per vedere la pipeline in azione.

  4. Quando si è pronti ad apportare modifiche alla pipeline, modificarla.

  5. Vedere le sezioni seguenti per informazioni su alcuni dei modi più comuni per personalizzare la pipeline.

Ambiente di compilazione

Non è necessario configurare alcun elemento per Azure Pipelines compilare progetti Python. Python è preinstallato in agenti di compilazione ospitati da Microsoft per Linux, macOS o Windows. Per vedere quali versioni di Python sono preinstallate, vedere Usare un agente ospitato da Microsoft.

Usare una versione specifica di Python

Per usare una versione specifica di Python nella pipeline, aggiungere l'attività Usa versione Python ad azure-pipelines.yml. Questo frammento di codice imposta la pipeline per l'uso di Python 3.6:

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

Usare più versioni di Python

Per eseguire una pipeline con più versioni di Python, ad esempio per testare un pacchetto in base a tali versioni, definire un elemento job con una delle versioni di matrix Python. Impostare quindi UsePythonVersion l'attività per fare riferimento alla variabile matrix .

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)'

È possibile aggiungere attività da eseguire usando ogni versione di Python nella matrice.

Eseguire script Python

Per eseguire script Python nel repository, usare un script elemento e specificare un nome file. Ad esempio:

- script: python src/example.py

È anche possibile eseguire script Python inline con l'attività Script Python:

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

Per parametrizzare l'esecuzione dello script, PythonScript usare l'attività con arguments valori per passare argomenti al processo in esecuzione. È possibile usare sys.argv o la libreria più argparse sofisticata per analizzare gli argomenti.

- 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

Installare le dipendenze

È possibile usare gli script per installare pacchetti PyPI specifici con pip . Ad esempio, questo file YAML installa o aggiorna pip e i pacchetti e setuptools wheel .

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

Requisiti di installazione

Dopo pip l'aggiornamento di e friends, un tipico passaggio successivo consiste nell'installare le dipendenze darequirements.txt:

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

Esecuzione dei test

È possibile usare gli script per installare ed eseguire vari test nella pipeline.

Eseguire test lint con flake8

Per installare o aggiornare flake8 e usarlo per eseguire test lint, usare questo YAML:

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

Eseguire test con pytest e raccogliere metriche di code coverage con pytest-cov

Usare questo file YAML per installare e , eseguire test, output dei risultati dei test in formato JUnit e output code coverage pytest risultati in formato pytest-cov 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'

Eseguire test con Tox

Azure Pipelines possibile eseguire processi di test Tox paralleli per suddividere il lavoro. In un computer di sviluppo è necessario eseguire gli ambienti di test in serie. Questo esempio usa tox -e py per eseguire qualsiasi versione di Python attiva per il processo corrente.

- 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'

Pubblicare i risultati dei test

Aggiungere l'attività Risultati test pubblicare i risultati dei test JUnit o xUnit nel server:

- task: PublishTestResults@2
  condition: succeededOrFailed()
  inputs:
    testResultsFiles: '**/test-*.xml'
    testRunTitle: 'Publish test results for Python $(python.version)'

Pubblicare code coverage risultati

Aggiungere l'attività Pubblica risultati code coverage per pubblicare code coverage risultati nel server. È possibile visualizzare le metriche di code coverage nel riepilogo della compilazione e scaricare i report HTML per un'ulteriore analisi.

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

Creare il pacchetto e distribuire il codice

Per eseguire twine l'autenticazione con , usare l'attività Di autenticazione di Twine per archiviare le credenziali di autenticazione nella variabile di ambiente PYPIRC_PATH .

- task: TwineAuthenticate@0
  inputs:
    artifactFeed: '<Azure Artifacts feed name>'
    pythonUploadServiceConnection: '<twine service connection from external organization>'

Aggiungere quindi uno script personalizzato che usa per twine pubblicare i pacchetti.

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

È anche possibile usare Azure Pipelines per compilare un'immagine per l'app Python ed eseguire il push in un registro contenitori.