Python の構築とテスト

このガイドでは、TeamCity にまったく新しい開発者向けに TeamCity で Python プロジェクトを構築する方法を説明します。

前提条件

We recommend that you have a basic understanding of Python and PyTest.

詳細については、Python ドキュメントをご覧ください。

手順 1 - TeamCity プロジェクトを作成する

  1. TeamCity ページの右上にある Administration 歯車をクリックします。
  2. + Create Project をクリックし、From a repository URL タブを選択します。 In the Repository URL field, enter your repository, for example: https://github.com/marcobehlerjetbrains/teamcity-python.git. TeamCity は初期状態で Git、Subversion、Mercurial、Perforce、および TFS(TeamCity Cloud + オンプレミス)の一般的なバージョン管理システムを処理できます。 CVS、StarTeam、および Visual SourceSafe サポートはオンプレミスの TeamCity のみに提供されています。
  3. リポジトリに認証が必要な場合は、ユーザー名とパスワード / アクセストークンを入力します。
  4. Proceed をクリックします。

TeamCity がリポジトリに正しく接続されると、次のダイアログが表示されます。

Create Project From URL ダイアログには、プロジェクト名と最初のビルド構成名を変更するオプションがあります。

注意: より新しいバージョンの TeamCity には、Default branchBranch specification のフィールドもあります。これらは TeamCity が構築するブランチを指定するために使用します。 ここでは何も変更しません。

  • TeamCity がデフォルトのプロジェクト名を提案しますが、必要に応じてプロジェクトに適した名前を選択できます。
  • TeamCity はでデフォルトのビルド構成名も提案します。 デフォルトのままにして、後で必要に応じて変更することもできます。 (TeamCity プロジェクトには少なくとも 1 つのビルド構成があり、プロジェクトを構築するために必要なすべてのステップが含まれています。 TeamCity のビルド構成は通常、ほかの CI システムではジョブと呼ばれています。)
  • Proceed をクリックします。

Proceed をクリックすると、TeamCity は自動的にバージョン管理リポジトリをスキャンし、サポートされているテクノロジー(この場合 Python)を検出します。

TeamCity がリポジトリ内の .py ファイルを検出すると、自動的にプロジェクトのビルドステップを 1 つ以上提案します。 このチュートリアルで使用されているリポジトリの場合、自動検出のビルドステップは main.py または setup.py を実行しようとしますが、これが好ましくない可能性があります。

それよりも、Python プロジェクトにデフォルトとして次のビルドステップを追加する方が合理的です。

  1. Flake8 または PyLint を実行する Linting ビルドステップ
  2. PyTest または UnitTest を実行する Testing ビルドステップ

自動検出のビルドステップを選択するのではなく、これらの 2 つのビルドステップを追加しましょう。

まず、Flake8 リントステップを TeamCity プロジェクトに追加します。

  1. Build Steps をクリックして、自動検出のビルドステップを破棄します。
  2. Add Build Step をクリックし、Runner type: Python を選択して Python コードを構築できるビルドステップを追加します。
  3. この Python プロジェクトにはリントの Flake8 依存関係があるため、Command: Flake8 を選択します。 プロジェクトのリントに Pylint を使用している場合は、Pylint を選択してください。
  4. リントするディレクトリを Script or module arguments フィールドに指定できます。 このチュートリアルの Python リポジトリを使っている場合は、これを「src/anewtodolist」に設定してください。 または、空にして、プロジェクト全体をリントするようにも設定できます。
  5. オプション: プロジェクトが 2.x を使用している場合は、異なる Python メジャーバージョンを選択します。
  6. 環境ツール: このプロジェクトでは Flake8 や PyTest などの必要となるすべての依存関係に Virtualenv を使用しています。 環境ツールとして Virtualenv を選択して、そのサポートを有効にしてください。
  7. Save をクリックします。

ビルドステップが正しく作成されると、次のダイアログが表示されます。

次に、プロジェクトに PyTest ステップを追加しましょう。

  1. (オプション)Build Steps Overview ページを開いていない場合は、Build Steps をクリックして自動検出のビルドステップを破棄します。
  2. Add Build Step をクリックし、Runner type: Python を選択して Python コードを構築できるビルドステップを追加します。
  3. この Python プロジェクトにはテストの Pytest 依存関係があるため、Command: Pytest を選択します。 プロジェクトのテストに UnitTest を使用している場合は、UnitTest を選択してください。
  4. オプション: テストするディレクトリを Script or module arguments フィールドに指定できます。 または、テストが /tests フォルダ内にある場合は空のままにします。Python ランナーが自動的に検出します。
  5. オプション: プロジェクトが 2.x を使用している場合は、異なる Python メジャーバージョンを選択します。
  6. 環境ツール: このプロジェクトでは Flake8 や PyTest などの必要となるすべての依存関係に Virtualenv を使用しています。 環境ツールとして Virtualenv を選択して、そのサポートを有効にしてください。
  7. Save をクリックします。

手順 2 - 最初のビルドを実行する

これで、最初のビルドを実行できるようになりました。

  1. 以下に示すようにウィンドウの右上にある Run ボタンをクリックします。
  2. ビルドが開始して終了するまで待ちます。

注意: TeamCity Cloud をご利用の場合は、ビルドエージェントが利用できるようになるまで 2 分ほどかかることがあります。 この間、ビルドは利用可能なエージェントに拾い上げられるまでキューで待機します。

ローカルのビルドエージェントを使うオンプレミス型の TeamCity をご利用の場合、ビルドは直ちに開始します。

ビルドが開始すると、ビルドの概要ページにリダイレクトされ、ビルドに関連するリアルタイムデータを表示する Build Log タグが開きます。

ビルドが実行したら、ビルドの概要ページにリダイレクトされます。 テスト結果インスペクションを確認するか、ビルドの概要ページから詳細なビルドログを閲覧できます。

手順 3 - Python TeamCity プロジェクトを構成する

Python リポジトリが TeamCity に接続されたので、引き続きコードを開発して、リポジトリにプッシュできるようになりました。

デフォルトでは、TeamCity は VCS リポジトリのメインブランチを 60 秒ごとにポーリングして変更を確認し、検出されるすべてのコミットに対して 1 つの(合併した)ビルドをトリガーします。

ブランチの構築

リポジトリのメインブランチだけでなく、様々なブランチへの変更に対してもビルドをトリガーする場合は、VCS ルートの設定にワイルドカードによるブランチの指定を追加します。 VCS 設定は個別のビルド構成にではなく、TeamCity プロジェクトに属することに注意してください。 したがって、変更内容は、同じ VCS ルートを使用するすべてのビルド構成に適用されることになります。

  1. プロジェクトの概要ページで Edit Project をクリックします。 または、Build ビルド構成が開いている場合は、Edit Configuration をクリックします。
  2. VCS ルート(バージョン管理システムのルート)に移動して、VCS ルートを編集します。
  3. Branch Specification 入力フィールドに入力し、Save をクリックします。 Branch Specification 入力フィールドが見当たらない場合は、先に Show Advanced をクリックします。

ブランチの指定例:

  • +:refs/heads/* – TeamCity はプロジェクトのすべてのブランチの変更をチェックしますが、GitHub などのプラットフォームのプルリクエストは refs/pull/* に一致するためチェックされません。
  • +:* – TeamCity はすべてのブランチのすべての着信変更をチェックします。
  • 独自のカスタムブランチ指定。

TeamCity は、ブランチ指定に従ってリポジトリにプッシュされているすべてのブランチを監視し、着信の変更を確認し、適宜ビルドを実行するようになりました。

プルリクエストのビルド

リポジトリに対して行われたプルリクエストを TeamCity で自動的にビルドできるようにするには、ビルド構成にPull Request ビルド機能を追加できます。

  1. ビルド構成を開いて、Edit Configuration をクリックします。
  2. Build Features に移動し、Add Build Feature をクリックします。 Build Features リンクが見当たらない場合は、Show More をクリックします。
  3. ドロップダウンから Pull Requests を選択し、リポジトリとリポジトリプロバイダー(GitHub、GitLab など)を選択します。
  4. (オプション)作者またはブランチ名でプルリクエストを絞り込む Pull Request Filtering を適用します。

注意: Pull Request ビルド機能は透過的にブランチ指定を拡張します(詳細は前の手順をご覧ください)。 たとえば、GitHub の場合、プルリクエスト機能によってブランチ指定に +:refs/pull/* が追加されます(視覚的には確認できません)。

プルリクエスト機能が使用される場合に一般的なブランチ指定にプルリクエストブランチが含まれていないように確認することをお勧めします。含まれている場合、プルリクエスト関連の機能が TeamCity で使用できなくなります。

TeamCity は外部プラットフォームにプルリクエストがないかチェックし、構成ルールに一致しているプルリクエストをビルドするようにトリガーします。

注意: 公開リポジトリでは誰もが危害のあるコードをプッシュできるため、それらがビルドされてしまわないように、この機能の使用には十分な注意が必要です。

Commit Status Publisher

When using the pull requests feature in combination with Azure DevOps, Bitbucket Server, GitHub, or GitLab, it also makes sense to use the Commit Status Publisher build feature. この機能は対応するプラットフォームのプルリクエストのステータスをビルド結果で更新します。

ビルド結果を GitHub にレポートするように TeamCity をセットアップするには、以下の手順を実行する必要があります。

  1. ビルド構成を開いて、Edit Configuration をクリックします。
  2. Build Features に移動し、Add Build Feature をクリックします。
  3. ドロップダウンから Commit Status Publisher を選択して、リポジトリとパブリッシャー(GitHub、GitLab など)を選択します。
  4. コミットのステータスをパブリッシュできる十分な権限をアクセストークンに付与します。
  5. Save をクリックします。

TeamCity がビルドを実行したら、変更によってビルドが失敗していないかどうかを直接 GitHub の Pull Request タブで簡単に確認できるようになります(緑のチェックマーク)。