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 のバージョンの matrix
を使って job
を定義します。 次に、matrix
変数を参照するように UsePythonVersion
タスクを設定します。 次に例を示します。
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')
スクリプトの実行をパラメーター化するには、arguments
値を持つPythonScript
タスクを使用して、実行中のプロセスに引数を渡します。 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 コードは、 pytest
と pytest-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
で認証するには、Python twine アップロード認証タスクを使用して認証資格情報をPYPIRC_PATH
環境変数に格納します。
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
次に、twine
を使用してパッケージを発行するカスタム script を追加します。
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Azure Pipelines を使って Python アプリのイメージをビルドし、コンテナー レジストリにそれをプッシュすることもできます。