Helix Coreサーバ管理者ガイド: 基本 (2019.1)

プッシュまたはフェッチのトリガ

注意

p4 pushおよびp4 fetchPerforce専用の分散バージョン管理システム(DVCS)に固有のコマンドです。『分散バージョニング環境におけるHelixの使用方法』を参照してください。

サブミットまたはプッシュプロセスの実行中にトリガを実行することは、必須ではありません。

p4 pushp4 unzip、またはp4 fetchコマンドが実行されたときにHelixサーバがトリガスクリプトを実行するよう設定するには、プッシュトリガ(push-submitpush-contentおよびpush-commitタイプのトリガなど)を使用します。

このセクションでは、Perforce DVCSでのプッシュやフェッチの開始時に使用できるトリガについて説明します。

プッシュされたアイテムを受け取ったり、フェッチ要求に応答したりするサーバが使用できるトリガについては、「プッシュコマンドおよびフェッチコマンド用のその他のトリガ」を参照してください。

p4 submitとp4 pushの類似点

プッシュ中、ローカルサーバは共有サーバのクライアントとして動作します。このため、サブミットとプッシュの処理には類似点があります。

  • プッシュの動作は不可分です。すべてがプッシュされるか、何もプッシュされません。
  • プッシュは3つの異なるフェーズで発生し、プッシュトリガのタイプはそれぞれのフェーズに対応しています。

以下の図は:

  • サブミットとプッシュの類似点を示しています
  • クライアントからチェンジリストを経由してローカルサーバに送信され、最終的に共有サーバに送信されるサブミットファイルの経路を示しています
  • プロセスの各フェーズで実行されるトリガの種類をすべて示しています

変更トリガとプッシュトリガ

サブミットおよびプッシュの3つのフェーズは次の内容を含んでいます。

  1. メタデータの送信フェーズでメタデータが送信されます。

    このフェーズに続いて、change-submitまたはpush-submitトリガが、ユーザが操作の実行を許可されているか、ファイルタイプは適切であるかなどを確認します。メタデータに対してクエリを実行するすべてのトリガが実行可能です。

  2. ファイルの送信 フェーズでファイルが送信されます。変更はまだコミットされません。

    このフェーズに続いて、content-submitまたはpush-submitトリガはファイルの内容を解析し、検出されたものに従って適切な動作を行います。このフェーズでは、サブミットされたファイルがコーディング規約やその他のポリシーに従っているかどうかを調べることがあります。

  3. コミット。フェーズで変更がコミットされます。

    このフェーズの後はコミットは取り消すことができませんが、トリガは通知の送信、クリーンアップなどのいくつかの操作を行うことができます。

p4 submitとp4 pushの相違点

サブミットとプッシュの相違点としては、以下のようなことが挙げられます。

  • サブミットとプッシュはともに不可分ですが、サブミットには単一のチェンジリストが含まれ、プッシュには複数のチェンジリストが含まれることがあります。そのため、プッシュの失敗の損失はサブミットよりも大きくなります。
  • サブミットは一方向ですが、p4 pushp4 fetchまたはp4 unzipの結果として起こる可能性のあるプッシュは双方向です。トリガを実行するコマンドによって、ローカルサーバと共用サーバのどちらもクライアントになり得ます。
  • プッシュの最初のフェーズで、メタデータがメモリに読み込まれますが、これによってpush-commitトリガ(インスタンスごとのメモリを持つ別のプロセス)がアクセスできるデータが制限されます。詳細については、「Push-submitトリガ」を参照してください。
  • サブミットが失敗すると、変更および再試行が可能な作業中の状態になります。プッシュ操作が失敗した場合は、ローカルサーバへのサブミットの前から操作をやり直す必要があります。このため、可能な場合はプッシュ操作ではなくサブミット操作の間にトリガを実行することが推奨されます。
  • チェンジトリガが関係するのは、p4 submitコマンドを処理する場合のみです。プッシュトリガは、p4 pushコマンド、p4 fetchコマンド、またはp4 unzipコマンドを実行した場合に起動します。

トリガの定義またはどの段階でトリガを実行するかを決めるにあたって、これらの違いを考慮してください。

p4 pushトリガのフィールド

以下の表では、プッシュトリガに関するフィールドについて説明します。サンプルの定義に関しては、プッシュトリガの各タイプについて説明している後続のセクションを参照してください。

フィールド 意味

type

  • push-submit: チェンジリストの作成後、かつファイルの転送前に、サブミットトリガを実行します。トリガはファイルの内容にアクセスできません。
  • push-content: チェンジリストの作成後およびファイルの転送後、かつファイルのコミット前に、このトリガを実行します。

    ファイルの内容を取得するには、リビジョン指定子@=change(そのうちchange%changelist%変数でスクリプトに渡される作業中チェンジリストのチェンジリスト番号)を、p4 diff2p4 filesp4 fstatp4 printなどのコマンドとともに使用します。

  • push-commit: チェンジリストの作成後およびファイルの転送後、かつファイルのコミット前に、このトリガを実行します。

path

ディポシンタックスのファイルパターンです。

p4 pushコマンド、p4 unzipコマンド、またはp4 fetchコマンドを使用して、このファイルパターンに一致するファイルが含まれているチェンジリストをサブミットするすると、commandフィールドで指定されたトリガが実行されます。特定のファイルに対してトリガが実行されるのを防ぐには、除外マッピングを使用します。

command

このHelixサーバ向けトリガは、ユーザがp4 pushp4 unzipを実行すると、またはp4 fetchで指定されているファイルパターンを含むチェンジリストをサブミットするpathコマンドを使用すると実行されます。Helixサーバアカウントがコマンドを参照して実行できるような方法で、コマンドを指定します。command(普通1回につき1つのスクリプトを呼び出します)は、引用符で囲まれる必要があります。また、commandによって構文上引数として解析できる範囲のあらゆる引数を扱うことができます(適用可能なHelixサーバトリガ変数を含む)。

トリガスクリプトがディポに保存されている場合、ディポシンタックス内でそのパスをパーセントで囲んで指定する必要があります。例えば、スクリプトがディポに//depot/scripts/myScript.plとして保存されている場合、これに対応してコマンドフィールドで使用される値は"/usr/bin/perl %//depot/scripts/myScript.pl%"となります。詳細については、「ディポ内にトリガを保存する」を参照してください。

push-submitトリガとpush-contentトリガについては、トリガの実行が失敗した場合、チェンジリストのサブミットは続行されません。push-commitトリガに関しては、チェンジリストのサブミットはトリガの成否にかかわらず正常に行われますが、スクリプト実行に失敗した場合は後続のpush-commitトリガは起動しません。

push-submitトリガスクリプトまたはpush-contentトリガスクリプトが成功した場合であっても、後続のトリガの失敗などの原因により、トリガを起動したサブミットが失敗する可能性があります。push-submitトリガとpush-contentトリガは、検証目的以外では使用しないでください。また、push-commitトリガは、プッシュやフェッチが正常に完了した場合に実行される操作に対して使用してください。