Code Stream の管理者または開発者は、 Code Stream の Docker トリガを使用できます。Docker トリガは、ビルド アーティファクトの作成または更新時に必ずスタンドアローンの継続的デリバリ (CD) パイプラインを実行します。Docker トリガは CD パイプラインを実行します。これにより、新しいまたは更新されたアーティファクトがコンテナ イメージとして Docker Hub リポジトリにプッシュされます。CD パイプラインは、自動ビルドの一部として実行できます。

たとえば、更新されたコンテナ イメージを CD パイプラインを使用して継続的に展開するには、Docker トリガを使用します。コンテナ イメージが Docker レジストリにチェックインされると、Docker Hub の Webhook は、イメージが変更されたことを Code Stream に通知します。この通知は、更新されたコンテナ イメージで実行されるように CD パイプラインをトリガし、イメージを Docker Hub リポジトリにアップロードします。

Docker トリガを使用するには、 Code Stream でいくつかの手順を実行します。

表 1. Docker トリガを使用する方法
実行する操作 操作の詳細情報

Docker レジストリ エンドポイントを作成する

Code Stream がパイプラインをトリガするには、Docker レジストリ エンドポイントが必要です。エンドポイントがない場合は、Docker トリガの Webhook を追加するときに、そのエンドポイントを作成するオプションを選択できます。

Docker レジストリ エンドポイントには、Docker Hub リポジトリへの URL が含まれています。

パイプラインの実行時に Docker パラメータを自動挿入する入力パラメータをパイプラインに追加する

Docker パラメータをパイプラインに挿入できます。パラメータには、Docker イベント所有者名、イメージ、リポジトリ名、リポジトリ名前空間、タグを含めることができます。

CD パイプラインには、パイプラインがトリガされる前に Docker Webhook がパイプラインに渡す入力パラメータを含めます。

Docker Webhook を作成する

Code Stream で Docker Webhook を作成すると、対応する Webhook も Docker Hub に作成されます。 Code Stream の Docker Webhook は、Webhook に含まれる URL を介して Docker Hub に接続します。

Webhook は相互に通信し、アーティファクトが Docker Hub で作成または更新されるとパイプラインをトリガします。

Code Stream の Docker Webhook を更新または削除すると、Docker Hub の Webhook も更新または削除されます。

パイプラインに Kubernetes タスクを追加して設定する

Docker Hub リポジトリでアーティファクトが作成または更新されると、パイプラインがトリガされます。次に、パイプラインを使用して Kubernetes クラスタ内の Docker ホストにアーティファクトを展開します。

ローカル YAML 定義をタスクに含める

展開タスクに適用する YAML 定義には、Docker コンテナ イメージが含まれます。プライベート所有のリポジトリからイメージをダウンロードする必要がある場合は、Docker 構成の [シークレット] を含むセクションを YAML ファイルに含める必要があります。スマート パイプライン テンプレートを使用する前の Code Stream での CICD ネイティブ ビルドの計画の CD 部分を参照してください

Docker Hub リポジトリでアーティファクトが作成または更新されると、Docker Hub の Webhook は、 Code Stream の Webhook に通知します。これにより、パイプラインがトリガされます。次のアクションが発生します。

  1. Docker Hub は、Webhook 内の URL に POST 要求を送信します。
  2. Code Stream は、Docker トリガを実行します。
  3. Docker トリガは、CD パイプラインを起動します。
  4. CD パイプラインは、アーティファクトを Docker Hub リポジトリにプッシュします。
  5. Code Stream は、Docker Webhook をトリガします。これは、アーティファクトを Docker ホストに展開する CD パイプラインを実行します。

この例では、開発 Kubernetes クラスタにアプリケーションを展開する、 Code Stream の Docker エンドポイントと Docker Webhook を作成します。手順には、仮想マシンが Webhook の URL に投稿するペイロードのサンプル コード、使用される API コード、およびセキュア トークンを使用した認証コードが含まれます。

前提条件

  • 継続的デリバリ (CD) パイプラインが Code Stream インスタンスにあることを確認します。また、アプリケーションを展開する 1 つ以上の Kubernetes タスクが含まれていることも確認します。Code Stream でコードをネイティブにビルド、統合、および配信することを計画するを参照してください。
  • CD パイプラインが開発用にアプリケーションを展開できる、既存の Kubernetes クラスタにアクセスできることを確認します。
  • Code Stream で、プロジェクトのメンバーであることを確認します。メンバーでない場合は、プロジェクトにメンバーとして追加するように Code Stream 管理者に依頼します。Code Streamでプロジェクトを追加する方法を参照してください。

手順

  1. Docker レジストリ エンドポイントを作成する
    1. [エンドポイント] をクリックします。
    2. [新規エンドポイント] をクリックします。
    3. 既存のプロジェクト名の入力を開始します。
    4. タイプには [Docker レジストリ] を選択します。
    5. 適切な名前を入力します。
    6. サーバ タイプには [DockerHub] を選択します。
    7. Docker Hub リポジトリへの URL を入力します。
    8. リポジトリにアクセスできる名前とパスワードを入力します。
    Docker レジストリ エンドポイントを追加するときは、証明書を受け入れる必要があります。エンドポイントで必要になる可能性があるためです。
  2. CD パイプラインで、パイプラインの実行時に入力プロパティを Docker パラメータの自動挿入に設定します。
    パイプラインに入力パラメータを追加するときは、入力 タブをクリックし、Gerrit、Git、Docker などのパラメータのタイプを選択します。
  3. Docker Webhook を作成する
    1. [トリガ] > [Docker] の順にクリックします。
    2. [Docker の新規 Webhook] をクリックします。
    3. プロジェクトを選択します。
    4. 適切な名前を入力します。
    5. Docker レジストリ エンドポイントを選択します。
      エンドポイントがまだない場合は、 [エンドポイントの作成] をクリックして作成します。
    6. トリガする Webhook 用の Docker のパラメータが挿入されるパイプラインを選択します。手順 2を参照してください。
      カスタムで追加された入力パラメータを使用してパイプラインが設定されている場合、[入力パラメータ] リストにはパラメータと値が表示されます。イベントをトリガするパイプラインに渡される入力パラメータの値を入力できます。値は、空白のままにすることもできます。デフォルト値が定義されている場合は、デフォルト値を使用することもできます。

      入力タブのパラメータの詳細については、タスクの手動追加を行う前の Code Stream での CICD ネイティブ ビルドの計画を参照してください。

    7. API トークンを入力します。
      CSP API トークンは、 Code Stream との外部 API 接続を認証します。API トークンを取得するには、次の手順を実行します。
      1. [トークンの生成] をクリックします。
      2. ユーザー名とパスワードに関連付けられているメール アドレスを入力し、[生成] をクリックします。
        生成するトークンは 6 か月有効です。これは更新トークンとも呼ばれます。
        • 後で使用するためにトークンを変数として保持するには、[変数の作成] をクリックし、変数の名前を入力して [保存] をクリックします。
        • 後で使用するためにトークンをテキスト値で保持するには、[コピー] をクリックし、トークンをテキスト ファイルに貼り付けてローカルに保存します。
        後で使用するために、変数の作成とテキスト ファイルによるトークンの保存の両方を選択することもできます。
      3. [閉じる] をクリックします。
    8. ビルド イメージを入力します。
    9. タグを入力します。
      Docker トリガの Webhook を作成するときは、 Code Stream に対する外部 API 接続で自分を認証する API トークンを指定する必要があります。
    10. [保存] をクリックします。
      Docker Webhook が有効な場合、Webhook カードが表示されます。Docker Webhook をトリガーしてパイプラインを実行せずに、Docker Hub リポジトリにダミー プッシュする場合は、 [無効にする] をクリックします。
  4. CD パイプラインで、Kubernetes 展開タスクを構成します。
    1. Kubernetes タスクのプロパティで、開発 Kubernetes クラスタを選択します。
    2. [作成] アクションを選択します。
    3. ペイロード ソースの [ローカル定義] を選択します。
    4. 次に、ローカル YAML ファイルを選択します。
      たとえば、Docker Hub は、このローカル YAML 定義を Webhook の URL にペイロードとして送信する場合があります。
      {
      "callback_url": "https://registry.hub.docker.com/u/svendowideit/testhook/hook/2141b5bi5i5b02bec211i4eeih0242eg11000a/",
      "push_data": {
      "images": [
      "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3",
      "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c",
      "..."
      ],
      "pushed_at": 1.417566161e+09,
      "pusher": "trustedbuilder",
      "tag": "latest"
      },
      "repository": {
      "comment_count": 0,
      "date_created": 1.417494799e+09,
      "description": "",
      "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n",
      "full_description": "Docker Hub based automated build from a GitHub repo",
      "is_official": false,
      "is_private": true,
      "is_trusted": true,
      "name": "testhook",
      "namespace": "svendowideit",
      "owner": "svendowideit",
      "repo_name": "svendowideit/testhook",
      "repo_url": "https://registry.hub.docker.com/u/svendowideit/testhook/",
      "star_count": 0,
      "status": "Active"
      }
      }
      Docker Hub で Webhook を作成する API は、次のフォームを使用します。 https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      JSON コードの本文は次のようになります。
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      Docker Hub サーバからイベントを受信するために、 Code Stream で作成する Docker Webhook の認証方式では、Webhook のランダムな文字列トークンを使用して、許可された認証メカニズムを使用します。セキュアなトークンに基づいてイベントをフィルタリングします。これは、 hook_url に追加できます。
      Code Stream は、設定されたセキュアなトークンを使用することにより、Docker Hub サーバからのすべての要求を検証できます。例: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. Docker Hub リポジトリに Docker アーティファクトを作成します。または、既存のアーティファクトを更新します。
  6. 更新がトリガされたことを確認して Docker Webhook アクティビティを表示するには、[トリガ] > [Docker] > [アクティビティ] の順にクリックします。
    Docker の アクティビティ タブでは、Docker Webhook のコミット時間、イメージ、タグなどを監視できます。
  7. [実行] をクリックし、実行中のパイプラインを監視します。
    パイプラインを実行すると、そのステータスとして [実行中] が表示され、ステージ アイコンに進行状況が表示されます。
  8. 実行中のステージをクリックして、パイプラインの実行中にタスクを表示します。
    ステージ アイコンの 1 つをクリックすると、パイプラインの実行中にステージ内の各タスクのステータスを監視できます。

結果

完了です。CD パイプラインを継続的に実行するように、Docker トリガを設定します。これで、パイプラインは新しい Docker アーティファクトや更新された Docker アーティファクトを Docker Hub リポジトリにアップロードできるようになりました。

次のタスク

新規または更新されたアーティファクトが開発 Kubernetes クラスタの Docker ホストに展開されていることを確認します。