GitHub ソースのウェブフックを作成する - AWS CodePipeline

GitHub ソースのウェブフックを作成する

AWS CLI を使用してウェブフックを手動で作成したら、ウェブフックを GitHub に登録する必要があります。指定された AWS エンドポイントがウェブフックに使用され、put-webhook コマンドから提供されます。

重要

コンソールを使用してパイプラインを作成または編集する場合は、ウェブフックが自動的に作成されます。

AWS CLI を使用してウェブフックを作成するには、put-webhook コマンドを呼び出し、以下を指定します。

  • ウェブフックを一意に識別する名前。この名前は、パイプラインのアカウントのリージョンで一意である必要があります。

  • GitHub 認証に使用される JSON ファイルのシークレット。

ウェブフックを作成して登録するには

注記

CLI または AWS CloudFormation を使用してパイプラインを作成して ウェブフックを追加する場合は、定期的なチェックを無効にする必要があります。定期的なチェックを無効にするには、以下の最終的な手順に詳述するとおり、PollForSourceChanges パラメータを明示的に追加して false に設定する必要があります。そうしないと、CLI または AWS CloudFormation パイプラインの既定により、PollForSourceChanges はデフォルトで true となり、パイプライン構造の出力に表示されません。PollForSourceChanges のデフォルトの詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. テキストエディタで、作成するウェブフックの JSON ファイルを作成して保存します。「my-webhook」という名前のウェブフックには、このサンプルを使用します。

    {"webhook": {"name": "my-webhook", "targetPipeline": "pipeline_name", "targetAction": "source_action_name", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ], "authentication": "GITHUB_HMAC", "authenticationConfiguration": {"SecretToken":"secret"} } }
  2. put-webhook コマンドを呼び出し、--cli-input および --region パラメータを含めます。

    次のサンプルコマンドは、webhook_json JSON ファイルで ウェブフックを作成します。

    aws codepipeline put-webhook --cli-input-json file://webhook_json.json --region "eu-central-1"
  3. この例に示す出力では、my-webhook という名前のウェブフックに対して URL と ARN が返されます。

    { "webhook": { "url": "https://webhooks.domain.com/trigger111111111EXAMPLE11111111111111111", "definition": { "authenticationConfiguration": { "SecretToken": "secret" }, "name": "my-webhook", "authentication": "GITHUB_HMAC", "targetPipeline": "pipeline_name", "targetAction": "Source", "filters": [ { "jsonPath": "$.ref", "matchEquals": "refs/heads/{Branch}" } ] }, "arn": "arn:aws:codepipeline:eu-central-1:ACCOUNT_ID:webhook:my-webhook" }, "tags": [{ "key": "Project", "value": "ProjectA" }] }

    この例では、ウェブフックにProjectタグキーとProjectA値を含めることで、ウェブフックにタグ付けを追加します。CodePipeline におけるリソースのタグ付けの詳細については、「リソースのタグ付け」を参照してください。

  4. register-webhook-with-third-party コマンドを呼び出し、--webhook-name パラメータを含めます。

    次のサンプルコマンドは、「my-webhook」という名前のウェブフックを登録します。

    aws codepipeline register-webhook-with-third-party --webhook-name my-webhook

ウェブフックを使用するようにパイプラインを更新する場合は、次の手順を使用して定期的なチェックを無効にする必要があります。

パイプラインの PollForSourceChanges パラメータを編集するには

重要

このメソッドを使用してパイプラインを作成すると、PollForSourceChanges パラメータはデフォルトで true になります (ただし、明示的に false に設定した場合は除きます)。イベントベースの変更検出を追加する場合は、このパラメータを出力に追加する必要があります。ポーリングを無効にするには、このパラメータを false に設定します。そうしないと、1 つのソース変更に対してパイプラインが 2 回起動されます。詳細については、「PollForSourceChanges パラメータのデフォルト設定」を参照してください。

  1. get-pipeline コマンドを実行して、パイプライン構造を JSON ファイルにコピーします。たとえば、MyFirstPipeline という名前のパイプラインの場合は、以下のコマンドを入力します。

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    このコマンドは何も返しませんが、作成したファイルは、コマンドを実行したディレクトリにあります。

  2. 任意のプレーンテキストエディタで JSON ファイルを開き、以下に示しているように、PollForSourceChanges パラメータを変更または追加してソースステージを編集します。この例では、UserGitHubRepo という名前のリポジトリで、パラメータを false に設定します。

    この変更を行う理由 このパラメータを変更すると、定期的チェックがオフになるため、イベントベースの変更検出のみ使用することができます。

    "configuration": { "Owner": "darlaker", "Repo": "UserGitHubRepo", "PollForSourceChanges": "false", "Branch": "master", "OAuthToken": "****" },
  3. get-pipeline コマンドを使用して取得されたパイプライン構造を操作している場合、ファイルから metadata 行を削除して JSON ファイルの構造を編集する必要があります。それ以外の場合は、update-pipeline コマンドで使用することはできません。JSON ファイルのパイプライン構造から "metadata" セクションを削除します ({ } 行と、"created""pipelineARN"、および "updated" フィールド)。

    たとえば、構造から以下の行を削除します。

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    ファイルを保存します。

  4. 変更を適用するには、以下のように、パイプライン JSON ファイルを指定して、update-pipeline コマンドを実行します。

    重要

    ファイル名の前に必ず file:// を含めてください。このコマンドでは必須です。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    このコマンドは、編集したパイプラインの構造全体を返します。

    注記

    update-pipeline コマンドは、パイプラインを停止します。update-pipeline コマンドを実行したときにパイプラインによりリビジョンが実行されている場合、その実行は停止します。更新されたパイプラインによりそのリビジョンを実行するには、パイプラインを手動で開始する必要があります。パイプラインを手動で開始するには start-pipeline-execution コマンドを使用します。