Mengkustomisasi Python untuk Azure Pipelines

Anda dapat menggunakan Azure Pipelines untuk membangun aplikasi Python tanpa harus menyiapkan infrastruktur Anda sendiri. Alat yang biasanya Anda gunakan untuk membangun, menguji, dan menjalankan aplikasi Python - seperti pip - dapatkan pra-instal pada agen yang dihosting Microsoft di Azure Pipelines.

Untuk membuat alur pertama Anda dengan Python, lihat mulai cepat Python.

Menggunakan versi Python tertentu

Untuk menggunakan versi Python tertentu di alur Anda, tambahkan tugas Gunakan Versi Python ke azure-pipelines.yml. Cuplikan ini mengatur alur untuk menggunakan Python 3.11:

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

Menggunakan beberapa versi Python

Untuk menjalankan alur dengan beberapa versi Python, misalnya untuk menguji paket terhadap versi tersebut, tentukan job dengan matrix versi Python. Kemudian atur UsePythonVersion tugas untuk mereferensikan matrix variabel.

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

Anda dapat menambahkan tugas untuk dijalankan menggunakan setiap versi Python dalam matriks.

Jalankan skrip Python

Untuk menjalankan skrip Python di repositori Anda, gunakan script elemen dan tentukan nama file. Contohnya:

- script: python src/example.py

Anda juga dapat menjalankan skrip Python sebaris dengan tugas Skrip Python:

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

Untuk membuat parameter eksekusi skrip, gunakan PythonScript tugas dengan arguments nilai untuk meneruskan argumen ke dalam proses eksekusi. Anda dapat menggunakan sys.argv atau pustaka yang lebih canggih argparse untuk mengurai argumen.

- 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

Instal dependensi

Anda dapat menggunakan skrip untuk menginstal paket PyPI tertentu dengan pip. Misalnya, YAML ini menginstal atau meningkatkan pip dan setuptools paket dan wheel .

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

Persyaratan penginstalan

Setelah Anda memperbarui pip dan teman-teman, langkah selanjutnya yang khas adalah menginstal dependensi dari requirements.txt:

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

Jalankan pengujian

Gunakan skrip untuk menginstal dan menjalankan berbagai pengujian di alur Anda.

Jalankan tes lint dengan flake8

Untuk menginstal atau meningkatkan flake8 dan menggunakannya untuk menjalankan pengujian lint, gunakan YAML ini:

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

Uji dengan pytest dan kumpulkan metrik cakupan dengan pytest-cov

Gunakan YAML ini untuk menginstal pytest dan pytest-cov, menjalankan pengujian, hasil pengujian output dalam format JUnit, dan cakupan kode output menghasilkan format XML Cobertura:

- script: |
    pip install pytest pytest-azurepipelines
    pip install pytest-cov
    pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
  displayName: 'pytest'

Menjalankan pengujian dengan Tox

Azure Pipelines dapat menjalankan pekerjaan pengujian Tox paralel untuk memisahkan pekerjaan. Pada komputer pengembangan, Anda harus menjalankan lingkungan pengujian anda secara seri. Sampel ini menggunakan tox -e py untuk menjalankan versi Python mana pun yang aktif untuk pekerjaan saat ini.

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

Memublikasikan hasil pengujian

Tambahkan tugas Terbitkan Hasil Pengujian untuk menerbitkan hasil pengujian JUnit atau xUnit ke server:

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

Menerbitkan hasil cakupan kode

Tambahkan tugas Terbitkan Hasil Cakupan Kode untuk menerbitkan hasil cakupan kode ke server. Anda dapat melihat metrik cakupan dalam ringkasan build dan mengunduh laporan HTML untuk analisis lebih lanjut.

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

Mengemas dan mengirimkan kode

Untuk mengautentikasi dengan twine, gunakan tugas Autentikasi Kembar untuk menyimpan kredensial autentikasi dalam PYPIRC_PATH variabel lingkungan.

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

Kemudian, tambahkan skrip kustom yang menggunakan twine untuk menerbitkan paket Anda.

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

Anda juga dapat menggunakan Azure Pipelines untuk membangun gambar untuk aplikasi Python Anda dan mendorongnya ke registri kontainer.