オンプレミスの Bitbucket リポジトリをビルドする

Azure DevOps Services

注意

Azure Pipelines と Bitbucket Cloud を統合する場合は、「Bitbucket Cloud」を参照してください。

オンプレミスの Bitbucket サーバーなどの Git サーバーは Azure Pipelines と統合できます。 オンプレミス サーバーはインターネットに公開されていることも、公開されていないこともあります。

Azure Pipelines サービスを実行するサーバーからオンプレミス サーバーに到達できる場合:

  • クラシック ビルドを設定して、CI トリガーを構成できます

Azure Pipelines サービスを実行するサーバーからオンプレミス サーバーに到達できない場合:

  • クラシック ビルド パイプラインを設定して、手動ビルドを開始できます
  • CI トリガーは構成できません

Note

YAML パイプラインは、オンプレミスの Bitbucket リポジトリと連携しません。

注意

PR トリガーは、オンプレミスの Bitbucket リポジトリでは利用できません。

ホステッド エージェントからオンプレミス サーバーにアクセスできる場合は、ホステッド エージェントを使用して、手動、スケジュール、または CI ビルドを実行できます。 それ以外の場合は、オンプレミス サーバーにアクセスしてコードをフェッチできるセルフホステッド エージェントの設定が必要になります。

Azure Pipelines から到達可能

Azure Pipelines サービスからオンプレミスの Bitbucket サーバーに到達できる場合は、その他の Git サービス接続を作成して、パイプラインの作成に使用します。 オプション [Attempt accessing this Git server from Azure Pipelines] (この Git サーバーに Azure Pipelines からアクセスしてみる) をオンにします。

CI トリガーは、Webhook ではなくポーリングを通じて動作します。 つまり、Azure Pipelines はコードに対する更新があるかどうかについて Bitbucket サーバーを定期的にチェックするということです。 それがある場合、Azure Pipelines は新しい実行を開始します。

Azure Pipelines から到達不可能

Azure Pipelines から Bitbucket サーバーに到達できない場合は、2 つのオプションがあります。

  • IT 部門と協力して、Azure Pipelines とオンプレミスの Git サーバーの間のネットワーク パスを開きます。 たとえば、Azure Pipelines からのトラフィックの通過を許可するように、ファイアウォール規則に例外を追加できます。 許可する必要がある IP アドレスを確認するために、Azure DevOps の IP に関するセクションを参照してください。 さらに、Azure Pipelines がサーバーの FQDN を IP アドレスに解決できるように、Bitbucket サーバーのパブリック DNS エントリを用意する必要があります。

  • その他の Git 接続を使用できますが、Azure Pipelines に対してこの Git サーバーに Azure Pipelines からアクセスしてみることがないように指示します。 CI トリガーと PR トリガーは、その他の Git リポジトリでは使用できません。 パイプラインの実行は手動またはスケジュールによってのみ開始できます。

Microsoft ホステッド エージェントから到達可能

また、パイプラインの実行に Microsoft ホステッド エージェントとセルフホステッド エージェントのどちらを使用するかについても決定する必要があります。 多くの場合、この選択は Microsoft ホステッド エージェントがサーバーに到達できるかどうかによって決まります。 それが可能かどうかをチェックするために、Microsoft ホステッド エージェントを使用するパイプラインを作成して、サーバーからソース コードをチェックアウトする手順を必ず追加してください。 これに成功した場合は、Microsoft ホステッド エージェントを引き続き使用できます。

Microsoft ホステッド エージェントから到達不可

前のセクションで説明した単純なテスト パイプラインがエラー TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting で失敗する場合、Microsoft ホステッド エージェントは Bitbucket サーバーに到達できません。 前述したように、これはファイアウォールが該当するサーバーからのトラフィックをブロックしていることが原因であると考えられます。 この場合には、次の 2 つのオプションがあります。

  • IT 部門と協力して、Microsoft ホステッド エージェントと Bitbucket サーバーの間のネットワーク パスを開きます。 Microsoft ホステッド エージェントのネットワークに関するセクションを参照してください。

  • セルフホステッド エージェントまたはスケール セット エージェントを使用するように切り替えます。 こうしたエージェントはネットワーク内に設定できるため、Bitbucket サーバーにアクセスできるようになります。 そのようなエージェントには、Azure Pipelines への送信接続のみが必要です。 受信接続のためにファイアウォールを開く必要はありません。 サービス接続の作成時に指定したサーバーの名前が、セルフホステッド エージェントから解決可能なことを確認します。

Azure DevOps の IP アドレス

クラシック パイプラインを設定するためにその他の Git 接続を使用し、Azure Pipelines サービスと Bitbucket サーバーの間の通信を無効にし、コードのビルドにセルフホステッド エージェントを使用すると、エクスペリエンスが低下します。

  • パイプラインの作成時に、リポジトリの名前を手動で入力する必要があります
  • Azure Pipelines でコードの変更をポーリングできなくなるため、CI トリガーを使用できません
  • スケジュールされたトリガーは、変更がある場合にのみビルドするオプションでは使用できません
  • ユーザー インターフェイスでは最新のコミットに関する情報を表示できません

このエクスペリエンスを向上するには、Azure Pipelines から Bitbucket サーバーへの通信を有効にすることが重要です。

Azure DevOps からのトラフィックが Bitbucket サーバーに到達できるようにするには、「受信接続」で指定された IP アドレスまたはサービス タグをファイアウォールの許可リストに追加します。 ExpressRoute を使用する場合は、ファイアウォールの許可リストに ExpressRoute の IP 範囲も含めるようにしてください。

Azure Pipelines がその他の Git サービス接続で Git サーバーへのアクセスを試みることを許可します。

情報提供の実行

情報提供の実行では、Azure DevOps が YAML パイプラインのソース コードの取得に失敗したことが通知されます。 ソース コードの取得は、プッシュされたコミットなどの外部イベントに応答して実施されます。 また、コードの変更があるかどうかや、スケジュールされた実行を開始するかどうかなどのチェックのために、内部トリガーに応答して実施されます。 ソース コードの取得は複数の原因で失敗する可能性があります。よくある原因として Git リポジトリ プロバイダーによる要求調整が挙げられます。 情報提供の実行の存在は、Azure DevOps がパイプラインを実行しようとしたことを意味しないこともあります。

情報提供の実行は、次のスクリーンショットで示すようなものです。

Screenshot of an informational pipeline run.

情報提供の実行は、次の属性によって認知できます。

  • 状態は Canceled です
  • 期間は < 1s です
  • 実行名に、次のテキストのいずれかが含まれいる。
    • Could not retrieve file content for {file_path} from repository {repo_name} hosted on {host} using commit {commit_sha}.
    • Could not retrieve content for object {commit_sha} from repository {repo_name} hosted on {host}.
    • Could not retrieve the tree object {tree_sha} from the repository {repo_name} hosted on {host}.
    • Could not find {file_path} from repository {repo_name} hosted on {host} using version {commit_sha}. One of the directories in the path contains too many files or subdirectories.
  • 通常、実行名には YAML パイプラインの読み込みが失敗する原因になった BitBucket/GitHub エラーが含まれています
  • ステージ/ジョブ/ステップはありません

詳細は、「情報提供の実行」を参照してください。

制限事項

Azure Pipelines は、リポジトリから Azure DevOps ポータルのドロップダウン リストに最大 2,000 個のブランチを読み込みます。たとえば、[手動のビルドとスケジュールされたビルドの既定のブランチ] 設定に読み込んだり、パイプラインを手動で実行するときにブランチを選択したときです。 目的のブランチが一覧に表示されない場合は、目的のブランチ名を手動で入力してください。

よく寄せられる質問

Bitbucket サーバー統合に関連する問題は、次のカテゴリに分類されます。

  • トリガーの失敗: リポジトリに更新をプッシュしたときに、パイプラインがトリガーされません。
  • チェックアウトの失敗: パイプラインはトリガーされますが、チェックアウト手順で失敗します。

トリガーの失敗

サーバーに変更をプッシュしましたが、パイプラインがトリガーされません。

次の各手順を実行して、失敗するトリガーをトラブルシューティングしてください。

  • Azure Pipelines から Bitbucket サーバーにアクセスできますか? Azure Pipelines は、変更について定期的に Bitbucket サーバーをポーリングします。 Bitbucket サーバーがファイアウォールの内側にあると、このトラフィックはサーバーに到達しない可能性があります。 「Azure DevOps の IP アドレス」で詳細を参照して、すべての必要な IP アドレスに例外を認めていることを確認してください。 これらの IP アドレスは、最初に例外ルールを設定した後で変更されている可能性があります。 手動実行は、外部 Git 接続を使用した場合と、Azure Pipelines からサーバーにアクセスできない場合にのみ開始できます。

  • パイプラインが一時停止または無効化されていませんか? パイプライン用のエディターを開いて、[設定] を選択して確認してください。 パイプラインが一時停止または無効化されている場合、トリガーは機能しません。

  • 変更のプッシュ先へのブランチまたはパスを除外しましたか? 変更を含まれているブランチに含まれているパスにプッシュしてテストします。 トリガーのパスは、大文字と小文字が区別される点に注意してください。 トリガーのパスを指定するときには、実際のフォルダーと同じ大文字と小文字の区別を使用してください。

コードへの更新をプッシュしていませんが、パイプラインはトリガーされたままです。

  • Bitbucket の継続的インテグレーション トリガーは、ポーリングによって機能します。 各ポーリング間隔の後に、Azure Pipelines は Bitbucket サーバーに接続して、コードに更新があるかどうかをチェックしようとします。 Azure Pipelines が Bitbucket サーバーに到達できない場合 (ネットワークの問題が原因と考えられます)、コードは変更されたものと仮定して、新しい実行が開始されます。 Azure Pipelines が YAML パイプラインのコードを取得できない場合、情報提供の実行が作成されます。

チェックアウトの失敗

手動で新しい実行を開始しようとすると、開始するまでに 4 分から 8 分の遅延が発生します。

  • Azure Pipelines から Bitbucket サーバーに到達できません。 Bitbucket サービス接続で、この Git サーバーに Azure Pipelines からアクセスしてみるようにするオプションをオンにしていないことを確認します。 そのオプションが選択されていると、Azure Pipelines はサーバーに接続しようとしますが、サーバーに到達できないため、最終的にはタイム アウトになり、実行が開始されます。 そのオプションをオフにすると、手動実行が高速になります。

サーバーを解決できないというエラーで、チェックアウト手順が失敗します。

Microsoft ホステッド エージェントを使用していますか? その場合、そのようなエージェントは Bitbucket サーバーに到達できない可能性があります。 詳細については、「Microsoft ホステッド エージェントから到達不可」を参照してください。