Azure Pipelines için Python'i özelleştirme

Kendi altyapınızı ayarlamak zorunda kalmadan Python uygulamalarınızı oluşturmak için Azure Pipelines'ı kullanabilirsiniz. Pip gibi Python uygulamalarını derlemek, test etmek ve çalıştırmak için yaygın olarak kullandığınız araçlar, Azure Pipelines'da Microsoft tarafından barındırılan aracılara önceden yüklenir.

Python ile ilk işlem hattınızı oluşturmak için bkz. Python hızlı başlangıcı.

Belirli bir Python sürümünü kullanma

İşlem hattınızda Python'ın belirli bir sürümünü kullanmak için Python Sürümünü Kullan göreviniazure-pipelines.yml'ye ekleyin. Bu kod parçacığı işlem hattını Python 3.11 kullanacak şekilde ayarlar:

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

Birden çok Python sürümü kullanma

Birden çok Python sürümüne sahip bir işlem hattı çalıştırmak için, örneğin bir paketi bu sürümlerde test etmek için python sürümlerini içeren bir jobmatrix tanımlayın. Ardından, görevi değişkenine başvuracak matrix şekilde ayarlayınUsePythonVersion.

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

Matristeki her Python sürümünü kullanarak çalıştırılacak görevler ekleyebilirsiniz.

Python betiklerini çalıştırma

Deponuzda Python betiklerini çalıştırmak için bir script öğe kullanın ve bir dosya adı belirtin. Örneğin:

- script: python src/example.py

Ayrıca, Python Betiği göreviyle satır içi Python betikleri de çalıştırabilirsiniz:

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

Betik yürütmesini parametreleştirmek için, yürütme işlemine PythonScript bağımsız değişkenleri geçirmek için görevi değerleriyle arguments birlikte kullanın. Bağımsız değişkenleri ayrıştırmak için veya daha gelişmiş argparse kitaplığı kullanabilirsinizsys.argv.

- 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

Bağımlılıkları yükleme

ile pipbelirli PyPI paketlerini yüklemek için betikleri kullanabilirsiniz. Örneğin, bu YAML ile ve setuptoolswheel paketlerini yükler veya yükselterpip.

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

Yükleme gereksinimleri

Güncelleştirdikten ve arkadaşlarınızı güncelleştirdikten pip sonra, tipik bir sonraki adım requirements.txtbağımlılıkları yüklemektir:

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

Testleri çalıştırma

İşlem hattınızda çeşitli testler yüklemek ve çalıştırmak için betikleri kullanın.

Flake8 ile lint testleri çalıştırma

Lint testlerini çalıştırmak üzere yüklemek veya yükseltmek flake8 ve kullanmak için şu YAML'yi kullanın:

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

pytest ile test etme ve pytest-cov ile kapsam ölçümlerini toplama

Ve pytest-covyüklemek, testleri çalıştırmak, JUnit biçiminde çıkış testi sonuçları ve Cobertura XML biçiminde çıkış kodu kapsamı sonuçlarını yüklemek pytest için bu YAML'yi kullanın:

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

Tox ile test çalıştırma

Azure Pipelines, işi bölmek için paralel Tox test işleri çalıştırabilir. Geliştirme bilgisayarında test ortamlarınızı seri olarak çalıştırmanız gerekir. Bu örnek, geçerli iş için hangi Python sürümünün etkin olduğunu çalıştırmak için kullanır tox -e py .

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

Test sonuçlarını yayımlama

JUnit veya xUnit test sonuçlarını sunucuda yayımlamak için Test Sonuçlarını Yayımla görevini ekleyin:

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

Kod kapsamı sonuçlarını yayımlama

Kod kapsamı sonuçlarını sunucuda yayımlamak için Kod Kapsamı Sonuçlarını Yayımla görevini ekleyin. Derleme özetinde kapsam ölçümlerini görebilir ve daha fazla analiz için HTML raporlarını indirebilirsiniz.

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

Paketle ve kodu teslim et

ile twinekimlik doğrulaması yapmak için, kimlik doğrulama kimlik bilgilerini ortam değişkeninde PYPIRC_PATH depolamak için Twine Kimlik Doğrulaması görevini kullanın.

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

Ardından, paketlerinizi yayımlamak için kullanan twine özel bir betik ekleyin.

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

Ayrıca Azure Pipelines'ı kullanarak Python uygulamanız için bir görüntü oluşturabilir ve bunu bir kapsayıcı kayıt defterine gönderebilirsiniz.