次の方法で共有


Python パイプラインをカスタマイズする

この記事では、Azure Pipelines で Python アプリとコードの構築、テスト、パッケージ化、配信をカスタマイズする方法について説明します。 Python を使用するパイプラインを初めて作成する場合は、Python のクイックスタートに関するページをご覧ください。

Azure Pipelines で Microsoft がホストするエージェント を使用すると、独自のインフラストラクチャを設定せずに Python アプリを構築できます。 pipを含む Python アプリのビルド、テスト、実行に一般的に使用するツールがプレインストールされています。

パイプラインを実行するには、並列ジョブの無料の許可を要求するかパラメーター ジョブを購入必要になる場合があります。

Azure Pipelines を使用して Python アプリを構築するには、Python がインストールされた 自身がホストするエージェント 必要があります。 エージェントに Python をインストールするには、 UsePythonVersionを参照してください。

特定のバージョンの Python を使用する

パイプラインで特定のバージョンの Python を使用するには、azure-pipelines.yml Python バージョンの使用タスクを追加します。 次の YAML パイプライン定義の例では、Python 3.11 を使用するようにパイプラインを設定します。

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

Python の複数のバージョンを使用する

Python の複数のバージョンでパイプラインを実行するには (たとえば、それらのバージョンに対してパッケージをテストするため)、Python のバージョンの job を使って matrix を定義します。 次に、UsePythonVersion 変数を参照するように matrix タスクを設定します。 次に例を示します。

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

マトリックス内の各 Python バージョンを使用するタスクを追加できます。

Python スクリプトを実行する

リポジトリから Python スクリプトを実行するには、 script 要素を使用し、ファイル名を指定します。 次に例を示します。

- script: python src/example.py

Python スクリプト タスクを使用してインライン Python スクリプトを実行することもできます。

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

スクリプトの実行をパラメーター化するには、PythonScript値を持つarguments タスクを使用して、実行中のプロセスに引数を渡します。 sys.argv またはさらに高度な argparse ライブラリを使って、引数を解析できます。

- 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

依存関係のインストール

スクリプトを使って、pip で特定の PyPI パッケージをインストールできます。 次の例では、 pip および setuptools パッケージと wheel パッケージをインストールまたはアップグレードします。

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

インストールの要件

pipやフレンドを更新した後の一般的な次の手順は、requirements.txtから依存関係をインストールすることです。

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

テストの実行

スクリプトを使用して、パイプラインにさまざまなテストをインストールして実行できます。

flake8 を使用して lint テストを実行する

次の YAML コードは、 flake8 をインストールまたはアップグレードし、それを使用して lint テストを実行します。

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

pytest を使用してテストし、pytest-cov でカバレッジ メトリックを収集する

次の YAML コードは、 pytestpytest-cov をインストールしてテストを実行し、テスト結果を JUnit 形式で出力し、コード カバレッジの結果を 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'

Tox を使用してテストを実行する

Azure Pipelines では、並列 Tox テスト ジョブを実行して作業を分割できます。 開発用コンピューターでは、テスト環境を順番に実行する必要があります。 次の例では、 tox -e py を使用して、現在のジョブでアクティブな Python のバージョンを実行します。

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

テスト結果を公開する

JUnit または xUnit のテスト結果をサーバーに発行するには、テスト結果の発行タスクを追加します。

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

コード カバレッジの結果を発行する

Publish コード カバレッジの結果タスクを追加して、コード カバレッジの結果をサーバーに発行します。 ビルドの概要でカバレッジ メトリックを確認したり、HTML レポートをダウンロードして詳細な分析を行うことができます。

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

コードをパッケージ化して提供する

twineを使用して で認証を行い、認証資格情報を PYPIRC_PATH 環境変数に格納します。

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

次に、を使用してパッケージを発行するカスタム twine を追加します。

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

Azure Pipelines を使って Python アプリのイメージをビルドし、コンテナー レジストリにそれをプッシュすることもできます。