Skip to content

Webhook ​

The Webhook resource allows you to create and manage AWS CodePipeline Webhooks which enable you to trigger a pipeline execution in response to changes in a source repository.

Minimal Example ​

Create a basic webhook that triggers a pipeline on a push event to a GitHub repository.

ts
import AWS from "alchemy/aws/control";

const webhook = await AWS.CodePipeline.Webhook("githubWebhook", {
  AuthenticationConfiguration: {
    AllowedIPRange: "192.168.1.0/24",
    SecretToken: "mySecretToken"
  },
  Filters: [
    {
      JsonPath: "$.ref",
      MatchEquals: "refs/heads/main"
    }
  ],
  Authentication: "GITHUB_HMAC",
  TargetPipeline: "myPipeline",
  TargetAction: "source",
  TargetPipelineVersion: 1,
  RegisterWithThirdParty: true
});

Advanced Configuration ​

Configure a webhook with multiple filters and advanced authentication settings.

ts
const advancedWebhook = await AWS.CodePipeline.Webhook("advancedWebhook", {
  AuthenticationConfiguration: {
    AllowedIPRange: "203.0.113.0/24",
    SecretToken: "myAdvancedSecretToken"
  },
  Filters: [
    {
      JsonPath: "$.ref",
      MatchEquals: "refs/heads/release"
    },
    {
      JsonPath: "$.repository.name",
      MatchEquals: "my-repo"
    }
  ],
  Authentication: "GITHUB_HMAC",
  TargetPipeline: "releasePipeline",
  TargetAction: "build",
  TargetPipelineVersion: 2,
  RegisterWithThirdParty: true
});

Specific Use Case: Trigger on Pull Requests ​

Set up a webhook specifically to trigger the pipeline on pull request events.

ts
const pullRequestWebhook = await AWS.CodePipeline.Webhook("pullRequestWebhook", {
  AuthenticationConfiguration: {
    AllowedIPRange: "198.51.100.0/24",
    SecretToken: "pullRequestSecret"
  },
  Filters: [
    {
      JsonPath: "$.action",
      MatchEquals: "opened"
    },
    {
      JsonPath: "$.pull_request.base.ref",
      MatchEquals: "main"
    }
  ],
  Authentication: "GITHUB_HMAC",
  TargetPipeline: "pullRequestPipeline",
  TargetAction: "source",
  TargetPipelineVersion: 1,
  RegisterWithThirdParty: true
});