Python uygulamaları oluşturma

Azure Pipelines

Azure Pipelines kullanarak, CI/CD sisteminizin bir parçası olarak Python uygulamaları ve betikleri oluşturabilir, test edebilir ve dağıtabilirsiniz. Bu makalede, basit bir işlem hattı oluşturma konusu ele alınmaktadır.

Uçtan uca bir anlatım isterseniz, bkz. Linux üzerinde Azure App Service için bir Python web uygulaması dağıtmak üzere CI/CD kullanma.

Anaconda ortamı oluşturup etkinleştirmek ve ile Anaconda paketlerini yüklemek için conda bkz. Anaconda ortamları ile Işlem hatlarını çalıştırma.

İlk işlem hattınızı oluşturma

Azure Pipelines yeni misiniz? Bu durumda, diğer bölümlere geçmeden önce bu bölümü denemeniz önerilir.

Kodu alma

Bu depoyu Azure DevOps Server 2019 ' deki git deponuza aktarın:

Bu depoyu git deponuza aktarın:

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

Azure Pipelines oturum açın

Azure Pipelinesoturum açın. Oturum açtıktan sonra, tarayıcınız ' a gider https://dev.azure.com/my-organization-name ve Azure DevOps panonuzu görüntüler.

Seçtiğiniz kuruluş içinde bir Proje oluşturun. Kuruluşunuzda bir projeniz yoksa, başlamak için bir proje oluşturun ekranına bakabilirsiniz. Aksi takdirde, panonun sağ üst köşesindeki proje oluştur düğmesini seçin.

İşlem hattını oluşturma

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. İşlem hatları' na gidin ve ardından Yeni işlem hattı' nı seçin.

  3. İlk olarak kaynak kodunuzun konumu olarak GitHub ' i seçerek sihirbazın adımlarını gözden geçir.

  4. Oturum açmak için GitHub 'a yönlendirilirsiniz. Bu durumda, GitHub kimlik bilgilerinizi girin.

  5. Depo listesi göründüğünde, deponuzu seçin.

  6. Azure Pipelines uygulamasını yüklemek için GitHub 'a yönlendirilirsiniz. Varsa, & yüklemeyi Onayla' yı seçin.

Yapılandır sekmesi göründüğünde Python paketi' ni seçin. Bu, birden çok Python sürümünde sınanacak bir Python paketi oluşturur.

  1. Yeni ardışık düzen belirdiğinde, ne yaptığını görmek için YAML 'ye göz atın. Hazırsanız Kaydet ve Çalıştır' ı seçin.

    Yeni bir YAML ardışık düzeninde Kaydet ve Çalıştır düğmesi

  2. Deponuza yeni bir Azure-Pipelines. yıml dosyası uygulamanız istenir. İletiden memnun olduktan sonra Kaydet ' i seçin ve yeniden çalıştırın .

    İşlem hattınızı eylem bölümünde izlemek isterseniz, yapı işini seçin.

    Yalnızca sizin için otomatik olarak oluşturduğumuz bir işlem hattı oluşturup çalıştırdık, çünkü kodunuz Python paket şablonu için iyi bir eşleşme olarak göründü.

    Artık, deponuzda özelleştirmeniz için hazır bir YAML işlem hattı ( azure-pipelines.yml ) çalışıyor!

  3. İşlem hattınızda değişiklik yapmaya hazırsanız, ardışık Düzen sayfasında bunu seçin ve ardından dosyayı düzenleyin azure-pipelines.yml .

İşlem hattınızı özelleştirmenin daha yaygın yöntemlerinden bazılarını öğrenmek için aşağıdaki bölümlere bakın.

YAML

  1. azure-pipelines.ymlDeponuzda bir dosya ekleyin. Derlemeniz için bu kod parçacığını özelleştirin.
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. Bir işlem hattı oluşturun (nasıl olduğunu bilmiyorsanız, ilk işlem hattınızı oluşturma) ve şablon Için YAML' yi seçin.

  2. İşlem hatlarınız için Aracı havuzunu ve YAML dosya yolunu ayarlayın.

  3. İşlem hattını kaydedin ve bir derlemeyi kuyruğa alın. Derleme #nnnnnnnn. n sıraya alınmış ileti görüntülendiğinde, işlem hattınızı eylemde görmek için sayı bağlantısını seçin.

  4. İşlem hattınızda değişiklik yapmaya hazırsanız, düzenleyin .

  5. İşlem hattınızı özelleştirmenin daha yaygın yöntemlerinden bazılarını öğrenmek için aşağıdaki bölümlere bakın.

Yapı ortamı

Python projelerini derlemek için Azure Pipelines için herhangi bir şey ayarlamanız gerekmez. Python, Linux, macOS veya Windows için Microsoft tarafından barındırılan derleme aracılarında önceden yüklenir. Hangi Python sürümlerinin önceden yüklenmiş olduğunu görmek için bkz. Microsoft tarafından barındırılan aracı kullanma.

Belirli bir Python sürümü kullanın

İşlem hattınızda Python 'un belirli bir sürümünü kullanmak için, Python sürümü kullan görevini Azure-Pipelines. yıml öğesine ekleyin. Bu kod parçacığı, işlem hattını Python 3,6 ' i kullanacak şekilde ayarlar:

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

Birden çok Python sürümü kullanma

Birden çok Python sürümüyle bir işlem hattı çalıştırmak için örneğin, bir paketi bu sürümlere karşı test etmek için job matrix Python sürümlerinden birini içeren bir tanımlayın. Sonra, UsePythonVersion görevi değişkenine başvuracak şekilde ayarlayın matrix .

jobs:
- job: 'Test'
  pool:
    vmImage: 'ubuntu-16.04' # other options: 'macOS-10.14', 'vs2017-win2016'
  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)'

Matriste her bir Python sürümünü kullanarak çalıştırılacak görevleri ekleyebilirsiniz.

Python betiklerini çalıştırma

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

- script: python src/example.py

Ayrıca, Python betik göreviylesatır içi Python betikleri çalıştırabilirsiniz:

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

Betik yürütmeyi parametreleştirmek için, PythonScript görevi arguments çalışan işleme dönüştürmek için değerlerle birlikte kullanın. sys.argv argparse Bağımsız değişkenleri ayrıştırmak için veya daha karmaşık kitaplığı kullanabilirsiniz.

- 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

İle belirli Pypı paketlerini yüklemek için komut dosyaları kullanabilirsiniz pip . Örneğin, bu YAML, ve paketlerini yükleme veya yükseltme pip setuptools wheel .

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

Gereksinimleri yükler

pipVe arkadaşlarınızı güncelleştirdikten sonra, tipik bir sonraki adım requirements.txt bağımlılıkları yüklemedir:

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

Testleri çalıştırma

Komut dosyalarını, işlem hattınızda çeşitli testler yüklemek ve çalıştırmak için kullanabilirsiniz.

Flake8 ile LINT testleri çalıştırma

flake8Lint testlerini çalıştırmak için yüklemek veya yükseltmek ve kullanmak için bu YAML 'yi kullanın:

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

Pytest ile test edin ve pytest-COV ile kapsam ölçümleri toplayın

pytestTestleri yüklemek ve pytest-cov çalıştırmak, test sonuçlarını JUnit biçiminde çıkış yapmak ve çıkış kodu kapsamı SONUÇLARıNı Cobertura XML biçiminde almak 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'

Testleri tox ile çalıştırma

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

- job:

  pool:
    vmImage: 'ubuntu-16.04'
  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'

Test sonuçlarını yayınla

JUnit veya xUnit test sonuçlarını sunucuya yayımlamak için yayımla test sonuçları 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ı sunucuya yayımlamak için kod kapsamı sonuçları Yayımla görevini ekleyin. Kapsam ölçümlerini Derleme özetinde görebilir ve daha fazla analiz için HTML raporlarını indirebilirsiniz.

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

Kodu paketleme ve teslim etme

İle kimlik doğrulamak için twine , kimlik doğrulama bilgilerini ortam değişkeninde depolamak üzere Tşarap kimlik doğrulaması görevini kullanın PYPIRC_PATH .

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

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

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

Ayrıca, Python uygulamanız için bir görüntü oluşturmak ve bir kapsayıcı kayıt defterine göndermekiçin Azure Pipelines de kullanabilirsiniz.