Automation Pipelines の管理者または開発者は、Automation Pipelines の Docker トリガを使用できます。Docker トリガは、ビルド アーティファクトの作成または更新時に必ずスタンドアローンの継続的デリバリ (CD) パイプラインを実行します。Docker トリガは CD パイプラインを実行します。これにより、新しいまたは更新されたアーティファクトがコンテナ イメージとして Docker Hub リポジトリにプッシュされます。CD パイプラインは、自動ビルドの一部として実行できます。
たとえば、更新されたコンテナ イメージを CD パイプラインを使用して継続的に展開するには、Docker トリガを使用します。コンテナ イメージが Docker レジストリにチェックインされると、Docker Hub の Webhook は、イメージが変更されたことを Automation Pipelines に通知します。この通知は、更新されたコンテナ イメージで実行されるように CD パイプラインをトリガし、イメージを Docker Hub リポジトリにアップロードします。
Docker トリガを使用するには、Automation Pipelines でいくつかの手順を実行します。
表 1.
Docker トリガを使用する方法
実行する操作 |
操作の詳細情報 |
Docker レジストリ エンドポイントを作成する |
Automation Pipelines がパイプラインをトリガするには、Docker レジストリ エンドポイントが必要です。エンドポイントがない場合は、Docker トリガの Webhook を追加するときに、そのエンドポイントを作成するオプションを選択できます。 Docker レジストリ エンドポイントには、Docker Hub リポジトリへの URL が含まれています。 |
パイプラインの実行時に Docker パラメータを自動挿入する入力パラメータをパイプラインに追加する |
Docker パラメータをパイプラインに挿入できます。パラメータには、Docker イベント所有者名、イメージ、リポジトリ名、リポジトリ名前空間、タグを含めることができます。 CD パイプラインには、パイプラインがトリガされる前に Docker Webhook がパイプラインに渡す入力パラメータを含めます。 |
Docker Webhook を作成する |
Automation Pipelines で Docker Webhook を作成すると、対応する Webhook も Docker Hub に作成されます。Automation Pipelines の Docker Webhook は、Webhook に含まれる URL を介して Docker Hub に接続します。 Webhook は相互に通信し、アーティファクトが Docker Hub で作成または更新されるとパイプラインをトリガします。 Automation Pipelines の Docker Webhook を更新または削除すると、Docker Hub の Webhook も更新または削除されます。 |
パイプラインに Kubernetes タスクを追加して設定する |
Docker Hub リポジトリでアーティファクトが作成または更新されると、パイプラインがトリガされます。次に、パイプラインを使用して Kubernetes クラスタ内の Docker ホストにアーティファクトを展開します。 |
ローカル YAML 定義をタスクに含める |
展開タスクに適用する YAML 定義には、Docker コンテナ イメージが含まれます。プライベート所有のリポジトリからイメージをダウンロードする必要がある場合は、Docker 構成の [シークレット] を含むセクションを YAML ファイルに含める必要があります。スマート パイプライン テンプレートを使用する前の Automation Pipelines での CICD ネイティブ ビルドの計画の CD 部分を参照してください |
Docker Hub リポジトリでアーティファクトが作成または更新されると、Docker Hub の Webhook は、Automation Pipelines の Webhook に通知します。これにより、パイプラインがトリガされます。次のアクションが発生します。
- Docker Hub は、Webhook 内の URL に POST 要求を送信します。
- Automation Pipelines は、Docker トリガを実行します。
- Docker トリガは、CD パイプラインを起動します。
- CD パイプラインは、アーティファクトを Docker Hub リポジトリにプッシュします。
- Automation Pipelines は、Docker Webhook をトリガします。これは、アーティファクトを Docker ホストに展開する CD パイプラインを実行します。
この例では、開発 Kubernetes クラスタにアプリケーションを展開する、Automation Pipelines の Docker エンドポイントと Docker Webhook を作成します。手順には、仮想マシンが Webhook の URL に投稿するペイロードのサンプル コード、使用される API コード、およびセキュア トークンを使用した認証コードが含まれます。
手順
- Docker レジストリ エンドポイントを作成する
- [エンドポイント] をクリックします。
- [新規エンドポイント] をクリックします。
- 既存のプロジェクト名の入力を開始します。
- タイプには [Docker レジストリ] を選択します。
- 適切な名前を入力します。
- サーバ タイプには [DockerHub] を選択します。
- Docker Hub リポジトリへの URL を入力します。
- リポジトリにアクセスできる名前とパスワードを入力します。
- CD パイプラインで、パイプラインの実行時に入力プロパティを Docker パラメータの自動挿入に設定します。
- Docker Webhook を作成する
- の順にクリックします。
- [Docker の新規 Webhook] をクリックします。
- プロジェクトを選択します。
- 適切な名前を入力します。
- Docker レジストリ エンドポイントを選択します。
エンドポイントがまだない場合は、
[エンドポイントの作成] をクリックして作成します。
- トリガする Webhook 用の Docker のパラメータが挿入されるパイプラインを選択します。手順 2を参照してください。
- API トークンを入力します。
VMware Cloud Services API トークンは、
Automation Pipelines との外部 API 接続の際にユーザーを認証します。API トークンを取得するには、次の手順を実行します。
- [トークンの生成] をクリックします。
- ユーザー名とパスワードに関連付けられているメール アドレスを入力し、[生成] をクリックします。
生成するトークンは 6 か月有効です。これは更新トークンとも呼ばれます。
- 後で使用するためにトークンを変数として保持するには、[変数の作成] をクリックし、変数の名前を入力して [保存] をクリックします。
- 後で使用するためにトークンをテキスト値で保持するには、[コピー] をクリックし、トークンをテキスト ファイルに貼り付けてローカルに保存します。
後で使用するために、変数の作成とテキスト ファイルによるトークンの保存の両方を選択することもできます。
- [閉じる] をクリックします。
- ビルド イメージを入力します。
- タグを入力します。
- [保存] をクリックします。
Docker Webhook が有効な場合、Webhook カードが表示されます。Docker Webhook をトリガーしてパイプラインを実行せずに、Docker Hub リポジトリにダミー プッシュする場合は、
[無効にする] をクリックします。
- CD パイプラインで、Kubernetes 展開タスクを構成します。
- Kubernetes タスクのプロパティで、開発 Kubernetes クラスタを選択します。
- [作成] アクションを選択します。
- ペイロード ソースの [ローカル定義] を選択します。
- 次に、ローカル 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 サーバからイベントを受信するために、
Automation Pipelines で作成する Docker Webhook の認証方式では、Webhook のランダムな文字列トークンを使用して、許可された認証メカニズムを使用します。セキュアなトークンに基づいてイベントをフィルタリングします。これは、
hook_url
に追加できます。
Automation Pipelines は、設定されたセキュアなトークンを使用することにより、Docker Hub サーバからのすべての要求を検証できます。例:
hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
- Docker Hub リポジトリに Docker アーティファクトを作成します。または、既存のアーティファクトを更新します。
- 更新がトリガされたことを確認して Docker Webhook アクティビティを表示するには、 の順にクリックします。
- [実行] をクリックし、実行中のパイプラインを監視します。
- 実行中のステージをクリックして、パイプラインの実行中にタスクを表示します。
結果
完了です。CD パイプラインを継続的に実行するように、Docker トリガを設定します。これで、パイプラインは新しい Docker アーティファクトや更新された Docker アーティファクトを Docker Hub リポジトリにアップロードできるようになりました。
次のタスク
新規または更新されたアーティファクトが開発 Kubernetes クラスタの Docker ホストに展開されていることを確認します。