Python
前提条件
対象イメージ
|
Python プロジェクトでビルド、テストを実行、公開する
現在、オートメーションは Python プロジェクトを操作するための API を提供していません。Python プロジェクトをビルド、テスト、公開する唯一の方法は、対応するコマンドラインツールを使用することです。この例では、pytest
を使用してプロジェクト内でテストを実行し、python
を使用してパッケージをビルドし、twine
を使用してこのパッケージを Space パッケージに公開します。オートメーションがビルドステップでこれらのツールを使用できるようにするには、含むカスタム Docker イメージを準備する必要があります。オートメーションを使用してイメージを準備します。
Python プロジェクトのイメージを準備するには
Space で、プロジェクトのパッケージページを開き、新しいコンテナーレジストリを作成します。レジストリの URL が
mycompany.registry.jetbrains.space/p/pythonProject/docker/python_custom_img
であると仮定します。ローカルマシンで、テストの実行、パッケージのビルドなど、プロジェクトで動作するように環境が構成されていることを確認します。
プロジェクトを含むディレクトリを開き、次を実行して必要なパッケージのリストを
requirements.txt
に記録します。pip freeze > requirements.txtプロジェクトルートで、
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プロジェクトルートで、
.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" } } } }Space で、プロジェクトのジョブページに移動し、Docker イメージの準備ジョブを実行します。
ジョブが正しく終了し、イメージがプロジェクトのコンテナーレジストリにアップロードされていることを確認してください。
これで、残りの作業 (テストの実行、プロジェクトパッケージの構築、Space パッケージへの公開) を実行するオートメーションジョブを作成できます。
テストを実行するには、Python パッケージをビルドして公開する
プロジェクトに Python パッケージインデックスがない場合は、プロジェクトのパッケージページを開いて新しいインデックスを作成します。インデックスの URL が
https://packages.jetbrains.space/pypi/p/my-python-project/mypypi/simple
であると仮定します。プロジェクトの
.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 公式ドキュメントも確認してください。