JetBrains Space ヘルプ

Python

前提条件

対象イメージ

  • Python と必要なツール (テストを実行するための pytest やパッケージを公開するための twine など) を含むイメージ。この例は、公式 Python イメージ(英語)に基づいてカスタムイメージを作成することを意味します。

Python プロジェクトでビルド、テストを実行、公開する

現在、オートメーションは Python プロジェクトを操作するための API を提供していません。Python プロジェクトをビルド、テスト、公開する唯一の方法は、対応するコマンドラインツールを使用することです。この例では、pytest を使用してプロジェクト内でテストを実行し、python を使用してパッケージをビルドし、twine を使用してこのパッケージを Space パッケージに公開します。オートメーションがビルドステップでこれらのツールを使用できるようにするには、含むカスタム Docker イメージを準備する必要があります。オートメーションを使用してイメージを準備します。

Python プロジェクトのイメージを準備するには

  1. Space で、プロジェクトのパッケージページを開き、新しいコンテナーレジストリを作成します。レジストリの URL が mycompany.registry.jetbrains.space/p/pythonProject/docker/python_custom_img であると仮定します。

  2. ローカルマシンで、テストの実行、パッケージのビルドなど、プロジェクトで動作するように環境が構成されていることを確認します。

  3. プロジェクトを含むディレクトリを開き、次を実行して必要なパッケージのリストを requirements.txt に記録します。

    pip freeze > requirements.txt
  4. プロジェクトルートで、Dockerfile ファイルを作成します。

    # We use Python 3 in our project FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt
  5. プロジェクトルートで、.space.kts ファイルを作成します。

    job("Prepare Docker image") { // do not run on git push startOn { gitPush { enabled = false } } kaniko { build { file = "./Dockerfile" labels["vendor"] = "mycompany" } push("mycompany.registry.jetbrains.space/p/pythonProject/docker/python_custom_img") { tags{ +"0.0.1" } } } }
  6. Space で、プロジェクトのジョブページに移動し、Docker イメージの準備ジョブを実行します。

  7. ジョブが正しく終了し、イメージがプロジェクトのコンテナーレジストリにアップロードされていることを確認してください。

これで、残りの作業 (テストの実行、プロジェクトパッケージの構築、Space パッケージへの公開) を実行するオートメーションジョブを作成できます。

テストを実行するには、Python パッケージをビルドして公開する

  1. プロジェクトに Python パッケージインデックスがない場合は、プロジェクトのパッケージページを開いて新しいインデックスを作成します。インデックスの URL が https://packages.jetbrains.space/pypi/p/my-python-project/mypypi/simple であると仮定します。

  2. プロジェクトの .space.kts ファイルにジョブを追加します。

    job("Run tests, build, publish") { container(image = "mycompany.registry.jetbrains.space/p/pythonProject/docker/python_custom_img:0.0.1") { // specify URL of the package index using env var env["URL"] = "https://packages.jetbrains.space/pypi/p/my-python-project/mypypi/legacy" // We suppose that your project has default build configuration - // the built package is saved to the ./dist directory shellScript { content = """ echo Run tests... pytest ./tests/ echo Build package... python -m build echo Upload package... twine upload --repository-url ${'$'}URL -u ${'$'}JB_SPACE_CLIENT_ID -p ${'$'}JB_SPACE_CLIENT_SECRET dist/* """ } } }

    ここで、$JB_SPACE_CLIENT_ID および $JB_SPACE_CLIENT_SECRET は、Space Package の Automation サービスを認証する環境変数です。

    ビルドされたパッケージには、setup.py または setup.cfg ファイルで指定されたバージョンが含まれることに注意してください。パッケージのバージョンを動的に変更する場合は、setup.py 構成ファイルの JB_SPACE_EXECUTION_NUMBER 環境変数を使用して変更できます。パッケージバージョンのシングルソース化(英語)に関する Python 公式ドキュメントも確認してください。