Aracılığıyla paylaş


Python işlem hatlarını özelleştirme

Bu makalede Azure Pipelines'da Python uygulamaları ve kodu oluşturma, test etme, paketleme ve teslim etme işlemleri nasıl özelleştirileceği açıklanır. Python ile ilk işlem hattınızı oluşturmak için bkz . Python hızlı başlangıcı.

Azure Pipelines'da Microsoft tarafından barındırılan aracılarla kendi altyapınızı ayarlamak zorunda kalmadan Python uygulamalarınızı oluşturabilirsiniz. dahil olmak üzere pipPython uygulamalarını derlemek, test etmek ve çalıştırmak için yaygın olarak kullandığınız araçlar önceden yüklenmiştir.

İşlem hatlarınızı çalıştırmak için paralel işlerin ücretsiz olarak verilmesini istemeniz veya paralel bir satın almanız gerekebilir.

Azure Pipelines ile Python uygulamaları oluşturmak için Python yüklü şirket içinde barındırılan bir aracıya ihtiyacınız vardır. Aracınıza Python yüklemek için bkz . UsePythonVersion.

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örevini azure-pipelines.yml ekleyin. Aşağıdaki örnek YAML işlem hattı tanımı, 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ümlere göre test etmek için python sürümleriyle bir job matrix tanımlayın. Ardından görevi değişkene başvuracak şekilde matrix ayarlayınUsePythonVersion. Örneğin:

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

Matristeki her Python sürümünü kullanan görevler ekleyebilirsiniz.

Python betiklerini çalıştırma

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

- script: python src/example.py

Satır içi Python betiklerini çalıştırmak için Python betik görevini de kullanabilirsiniz.

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

Betik yürütmesini PythonScript parametreleştirmek için, bağımsız değişkenleri çalışan işleme 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 karmaşık argparse bir kitaplık 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 belirli PyPI paketlerini pipyüklemek için betikleri kullanabilirsiniz. Aşağıdaki örnek, ve setuptools wheel 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, bir sonraki adım requirements.txt bağımlılıkları yüklemektir.

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

Testleri çalıştırma

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

Flake8 ile lint testleri çalıştırma

Aşağıdaki YAML kodu, lint testlerini çalıştırmak için bunu yükler veya yükselter flake8 ve kullanır.

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

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

Aşağıdaki YAML kodu testleri yükler pytest ve pytest-cov çalıştırır, test sonuçlarını JUnit biçiminde ve kod kapsamı sonuçlarını Cobertura XML biçiminde çıkış olarak oluşturur.

- 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. Aşağıdaki ö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@2
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'

Kod paketleme ve teslim

ile twinekimlik doğrulaması yapmak için, kimlik doğrulama kimlik bilgilerini ortam değişkeninde PYPIRC_PATH depolamak için Python twine karşıya yükleme kimlik doğrulama 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.