動的なパイプライン

Premium 専用機能

動的なパイプラインは Bitbucket Cloud の Premium 機能です。 Bitbucket Premium の詳細についてはこちらをご確認ください。

動的なパイプラインでは、アトラシアンの Forge 拡張性プラットフォームを活用し、「コード レベル」のアプリ ロジックを使用してワークフローの任意のコンポーネントにランタイム変更を加えることで、CI/CD ワークフローを無限の柔軟性とインテリジェンスで強化できます。

動的なパイプラインがなければ、CI/CD 構成は静的な .yml 構文で定義できるものに制限されます。変数や条件などによって柔軟性が制限される可能性がありますが、CI/CD ワークフローの圧倒的多数はいかなる類の柔軟性も提供できません。

従来の CI/CD ワークフロー

従来の CI/CD ワークフロー

チームのリポジトリに保存されている静的 CI/CD 設定ファイルと、CI/CD ビルドを実行する Bitbucket Pipelines プラットフォームの間にある「ミドルウェア」のように動的なパイプラインは機能します。 そのミドルウェア層にカスタム ロジックを挿入することで、動的なパイプライン アプリに実装したロジックに基づいて、ソフトウェア チームではパイプライン ワークフローにランタイム変更を加えることができます。 動的なパイプラインでは、アプリが Bitbucket Cloud や他の外部システムから取得できる外部コンテキストに基づいて変更を加えることもできます。 たとえば、チームでデプロイ前にサポート管理ツールにリクエストを行う動的なパイプラインを実装し、「オンコール」サポート エージェントがいない場合にデプロイに 手動承認」ステップを動的に挿入する場合があります。

リポジトリ レベルの動的なパイプライン ワークフロー

リポジトリ レベルの動的なパイプライン ワークフロー

動的なパイプラインはリポジトリ レベルだけに限定されず、ワークスペース レベルでも設定できます。つまり、そのワークスペース内のどのリポジトリでも利用と設定が可能ということです。 Bitbucket クラウド リソース階層を活用することで、組織構造のさまざまなレベルでさまざまなレベルのロジックを実装し、それらのさまざまなレベルのロジックをすべてシームレスに連携させて、真の「組織全体」にわたる CI/CD オーケストレーション エンジンを構築することができます。

ワークスペース レベルの動的なパイプライン ワークフロー

ワークスペース レベルの動的なパイプライン ワークフロー

動的なパイプラインを使用する利点と例

動的なパイプラインは「単一のツール」というよりも「ツールキット」のようなものです。 非常に特殊なユースケースのごく一部ではなく、チームや組織が困難で複雑な課題の全カテゴリーを解決できるように設計されています。

動的なパイプラインを使用すると、アプリ レベルのロジックによるランタイムの変更を通じて、従来の静的な .yaml パイプライン構成に極めて高い柔軟性を加えることができます。チーム単位または組織全体で直面しているさまざまな問題を解決するためにこの能力を使用できます。

動的なパイプラインが使用されてきた例として次のようなものがあります。

  • 環境、リポジトリ、またはワークスペース変数を利用して、CI/CD ワークフローで使用する Docker イメージ名を定義する。

  • 組織内のすべてのビルド実行が事前承認リストの Docker イメージを使用して実行されるようにする。

  • 組織内のすべてのビルドが自社ホスト ランナーで実行されるようにする。

  • プル リクエストの変更セットに基づいて、大規模な単一リポジトリで選択的なテスト実行を実装する。

  • プラットフォーム エンジニアリング チームが定義、共有でき、組織内の複数のエンジニアリング チームで使用可能な標準化された再利用可能な CI/CD ワークフローの「ブロック」を作成する。

  • 特定のコスト センター コードがタグ付けされたランナー エージェントにジョブを動的に割り当てることで、クラウド インフラストラクチャのコスト配分を自動化する。

  • 実行時に一連のタグとラベルからパイプライン ワークフローを自動生成するために使用できる、全体的にカスタマイズされた bitbucket-pipelines.yml 構文を構築する。

動的なパイプラインの作成、使用、設定

動的なパイプライン アプリの作成

アトラシアンの Forge 拡張性プラットフォームで実行されるアプリ内のコードとして動的なパイプライン ロジックは実装されます。 シンプルな動的なパイプライン アプリを使えば、30 分もかからずに使用を開始できます。 CLI で生成されたアプリ テンプレート、ステップバイステップのチュートリアル、自分のマシンに複製できるすぐに実行可能なサンプル リポジトリなど、使用の開始に役立つ幅広いリソースを用意しています。 開発者向けドキュメンテーションにアクセスして利用を開始しましょう。

動的なパイプラインの使用

動的なパイプラインを設定して使用する前に、希望通りの動作を実現できるよう、動的なパイプラインの仕組みを理解することが重要です。

さきほどのワークスペース レベルの動的なパイプライン ワークフローの画像と同じように、一方の端に bitbucket-pipelines.yml ファイル、もう一方の端に Bitbucket Pipelines プラットフォームがある一連のチューブとしてとらえることで動的なパイプラインを最も簡単に理解できます。

それぞれの「チューブ」は、一方の端でパイプライン ワークフロー設定を受け取り、その設定にいくつか変更を加え、もう一方の端に更新されたパイプライン設定を送ることができます。 この「パイプラインイン/パイプラインアウト」 設計により、複数の動的なパイプラインを連続して接続して一種の「チェーン」を作成できます。

動的なパイプラインはリポジトリ レベル、ワークスペース レベル、またはその両方で設定できます。常にボトムアップ 」 を実行し、階層の上位レベルで定義された変更が下位レベルで行われた変更よりも優先されるようにします。

動的なパイプラインの評価順序

  1. bitbucket-pipelines.yml ファイル。

  2. リポジトリ レベルの動的なパイプライン。

  3. ワークスペース レベルの動的なパイプライン。

リポジトリ レベルの動的なパイプラインの設定

動的なパイプラインの最も簡単な実装はリポジトリ レベルで行われます。 開発者向けドキュメンテーションに記載されている手順に従って動的なパイプライン アプリが作成され、Bitbucket Cloud ワークスペースにインストールされると、[リポジトリの設定] で設定できるようになります。 注: 動的なパイプラインにアクセスできるのはリポジトリ管理者だけです。

  1. [リポジトリの設定] を選択し、左側のサイドバー ナビゲーションで [パイプライン] の下にある [動的なパイプライン] を選択します。

  2. [動的なパイプライン] ページで [Repository dynamic pipeline provider (リポジトリの動的なパイプラインのプロバイダー)] ドロップダウンを選択すると、ワークスペースにインストールされているすべての動的なパイプライン アプリのリストが表示されます。
    注: この画面には読み取り専用の [Workspace dynamic pipeline provider (ワークスペースの動的なパイプラインのプロバイダー)] フィールドが表示されるので、ワークスペースにワークスペース レベルの動的なパイプラインも設定されているかどうかを確認できます。リポジトリ レベルとワークスペース レベル両方の動的なパイプラインを同時に使用できます。

  3. リポジトリに設定したい動的なパイプラインを選択し、[保存] を選択します。 その時点から、そのリポジトリのコンテキストで実行されるすべてのパイプライン実行では、選択した動的なパイプライン アプリを使用するようになります。

ワークスペース レベルの動的なパイプラインの設定

ワークスペース レベルの動的なパイプラインは、組織レベルの CI/CD オーケストレーションと管理のための非常に強力なツールです。これらを使用して企業全体で CI/CD を標準化したり、コンプライアンスとセキュリティ制御をワークスペースで実行されるすべてのビルドに適用したりできるだけでなく、組織に合わせて独自の bitbucket-pipelines.yml 構文を定義することさえ可能です。

ワークスペース レベルの動的なパイプラインに関する重要な情報:

ワークスペース レベルで設定された動的なパイプラインは、そのワークスペースでパイプライン が実行されるたびに実行されることを理解することが非常に重要です。これにより、ワークスペース レベルの動的なパイプラインは非常に強力なツールになりますが、誰もが知っているように「大きな力には大きな責任が伴うことになります。

リポジトリ レベルでの動的なパイプラインの実装が不十分だと、1 つのチームやプロジェクトでしか問題が発生しませんが、ワークスペース レベルで動的パイプラインの実装が不十分だと、組織全体のビルドを妨げる可能性があります。

さらに、同じ動的パイプライン アプリのバグが原因で、動的なパイプライン アプリ自体のビルド/デプロイが中断されるような循環的な依存関係を作らないようにすることが重要です。 そのため、ワークスペース レベルの動的なパイプライン アプリのコードを含むリポジトリには、従来の .yml ベースのパイプライン設定のみを利用することが推奨されています。

注: ワークスペース レベルの動的なパイプラインを設定できるのはワークスペース管理者だけです。

  1. 上部のナビゲーション バーの右上隅にある [設定] を選択します。

  2. [設定] ドロップダウンから [ワークスペースの設定] を選択し 、左側のサイドバー ナビゲーションにある [パイプライン] で [動的なパイプライン] を選択します。

  3. [動的なパイプライン] ページで [Workspace dynamic pipeline provider (ワークスペースの動的なパイプラインのプロバイダー)] ドロップダウンを選択すると、ワークスペースにインストールされているすべての動的なパイプライン アプリのリストが表示されます。

  4. ワークスペースに設定したい動的なパイプラインを選択し、[保存] を選択します。 その時点から、そのワークスペース内で実行されるすべてのパイプライン実行では、選択した動的なパイプライン アプリを使用するようになります。

動的に生成されたパイプライン設定の操作

エンド ユーザーの観点からは、従来の方法で純粋に .yaml から設定を生成したパイプラインと、設定が動的に生成されたパイプラインの間にはほとんど違いがありません。

.yaml ベースのパイプラインでは、パイプラインの詳細ページに .yaml 設定を含むリポジトリ内のファイルへのリンクが用意されているのが主な違いです。 これは、パイプライン ワークフローをより深く理解したり、パイプラインの問題をデバッグしたりする必要がある場合に備えて用意されています。

動的に生成された設定の場合、読み取られる .yaml ファイルと実行されるパイプラインの間のどこかでその構成に変更が加えられるため、システムによって実行された内容を .yaml に保存されたパイプラインが直接表現していないことがよくあります。

動的に生成されたパイプラインをユーザーが正しく理解してデバッグできるように、動的なパイプライン生成プロセスの最終出力を表示して、システムによって実行された正確なパイプライン設定を確認できるメカニズムを用意しています。

  1. 設定が動的に生成されたパイプラインの場合、[This pipeline is generated by dynamic pipelines (このパイプラインは動的なパイプラインによって生成されます)] という行がパイプラインの詳細ページにが表示されます。 その下には [View the configuration (設定を表示する)] というリンクが表示されます

[パイプライン] に表示されている動的なパイプラインと設定リンク

2. [View the configuration (設定を表示する)] リンクを選択すると、実行されたパイプラインの設定がダイアログに表示されます。

設定例

注: 動的に生成されたパイプライン設定はこのビューの .yaml 表現に戻されました (ただし、動的なパイプライン アプリから JSON が返されます)。 これは、開発者が使い慣れている設定の .yaml バージョンを読んで理解しやすくするために行われます。

3. 非常に長い設定 (数千行) の場合、UI では設定全体がレンダリングされません。 代わりに [ダウンロード] ボタンが表示されるため、設定をファイルとしてダウンロードしてローカルのテキスト エディターか IDE で検索できます。

動的なパイプラインに関するその他のリソース

その他のヘルプ