Pipeline Not Triggering After Push

Problem

You push a commit or merge a pull request to your VCS (GitHub, GitLab, or Bitbucket), but no pipeline appears in the CircleCI dashboard. The commit is visible in your VCS, but CircleCI shows no activity for the branch or commit SHA.

Common symptoms:

  • No new pipeline row appears on the Pipelines page after pushing.
  • The branch does not appear in the branch selector dropdown.
  • GitHub/Bitbucket/GitLab webhook shows a 200 response, but CircleCI does not start a build.
  • Pipelines work for some branches or repos but not others.
  • A PR/MR merge to the default branch does not trigger a build, even though previous merges did.

Cause

Pipeline triggering depends on a chain of events: VCS webhook > CircleCI ingestion > config parsing > pipeline creation. A break at any point in this chain prevents the pipeline from starting. The most common causes are:

  1. Webhook not configured or broken - The VCS webhook pointing to CircleCI was deleted, recreated manually (with the wrong URL or secret), or is returning non-200 responses.
  2. "Build once" deduplication - CircleCI will not trigger a new pipeline for a commit SHA + branch combination that has already been built. If a force-push resets a branch to an already-built commit, no new pipeline is created.
  3. Project not followed or trigger missing - For GitHub OAuth/Bitbucket, the project was unfollowed. For GitLab, the trigger was deleted or misconfigured.
  4. Config error prevents pipeline creation - A syntax error in .circleci/config.yml can cause silent pipeline creation failure. Unlike runtime errors, config-parse failures may not produce a visible "failed" pipeline.
  5. Branch or tag filtering - Workflow-level filters (branch only/ignore, tag only/ignore) exclude the pushed ref, so the pipeline is created but has zero workflows and appears empty or missing.
  6. CircleCI platform incident - Intermittent ingestion delays or outages can cause webhooks to be accepted (200) but not processed. Check status.circleci.com.
  7. GitHub App "build once" with merge queues - When using GitHub merge queues with the GitHub App integration, the final merge to the target branch may not trigger if the commit SHA was already built during the merge queue check.
  8. Prevent unregistered user spend - If the "Prevent unregistered user spend" setting is enabled in Plan > Usage Controls, commits from users who are not registered CircleCI users will be silently dropped.

Solution

Work through the following checks in order. Stop at the first one that identifies the problem.

1. Check your VCS webhook

GitHub (OAuth or GitHub App):

  1. Go to Repository Settings > Webhooks.
  2. Find the webhook with a CircleCI URL (e.g., https://circleci.com/hooks/github or a GitHub App variant).
  3. Click Recent Deliveries and locate the delivery for your commit SHA.
  4. Verify the response code is 200. If it is 4xx or 5xx, the webhook configuration is broken.

Bitbucket:

  1. Go to Repository Settings > Webhooks.
  2. Enable Request logs on the CircleCI webhook.
  3. Push a test commit and verify you see a 200 response.

GitLab:

  1. Go to your GitLab project Settings > Webhooks.
  2. Locate the CircleCI webhook - its URL will contain circleci.com/trigger-events.
  3. Click Edit, then scroll to Recent events at the bottom of the page.
  4. Click View details on a recent delivery to see the response. A 200 response means delivery was successful.
  5. The X-Gitlab-Event-UUID header value correlates to your commit and is useful for CircleCI Support investigations.

For more details, see How to View Your GitLab Webhook Deliveries.

If no webhook exists, or the URL is wrong, proceed to step 2.

2. Re-establish the project connection

The process differs by VCS integration type.

GitHub OAuth / Bitbucket Cloud (follow/unfollow):

This regenerates the webhook:

  1. In CircleCI, go to Projects > your project > Project Settings.
  2. Click Stop Building (or Unfollow Project).
  3. In your VCS, delete the stale CircleCI webhook if one exists.
  4. Back in CircleCI, click Set Up Project (or Follow Project) to re-follow.
  5. Push a new commit to confirm the pipeline triggers.

You can also use the v1.1 API:

# Unfollow (GitHub OAuth)
curl -X POST "https://circleci.com/api/v1.1/project/github/{org}/{repo}/unfollow" \
  -H "Circle-Token: $CIRCLECI_TOKEN"

# Follow (GitHub OAuth)
curl -X POST "https://circleci.com/api/v1.1/project/github/{org}/{repo}/follow" \
  -H "Circle-Token: $CIRCLECI_TOKEN"

# For Bitbucket, replace "github" with "bitbucket":
# curl -X POST "https://circleci.com/api/v1.1/project/bitbucket/{org}/{repo}/follow" ...

GitLab:

GitLab projects do not use the follow/unfollow mechanism. Instead, delete and re-add the trigger:

  1. In CircleCI, go to Project Settings > Triggers.
  2. Delete the existing trigger for your GitLab repository.
  3. Click Add Trigger and reconnect to your GitLab repository.
  4. CircleCI will automatically create a new webhook in your GitLab project.
  5. Push a new commit to confirm the pipeline triggers.

Note: The v1.1 follow/unfollow API does not support GitLab projects. GitLab uses opaque project slugs in the format circleci/{org-id}/{project-id}, which are found in Project Settings.

GitHub App:

GitHub App projects also use the trigger-based setup (same as GitLab). Follow the same steps: delete and re-add the trigger in Project Settings > Triggers.

3. Check for "build once" deduplication

CircleCI will not trigger a new pipeline for a commit SHA + branch combination that has already been built. This applies to all VCS types.

If you force-pushed a branch back to a commit that was already built on that branch, no new pipeline is created.

To confirm:

  1. Check git log for the commit SHA on the branch.
  2. Search the CircleCI Pipelines page for that SHA - if a pipeline already exists for that SHA + branch, deduplication is the cause.

Fix: Push a new commit (even an empty one) to generate a unique SHA:

git commit --allow-empty -m "Trigger CI"
git push

4. Validate your config

Run the CircleCI CLI to check for syntax errors:

circleci config validate .circleci/config.yml

If you use dynamic configuration (setup: true), also validate your continuation config:

circleci config validate .circleci/continue_config.yml

Common silent failures:

  • Indentation errors in YAML.
  • Using version: 2 instead of version: 2.1 with orbs.
  • A filters block that excludes every branch (e.g., branches: { ignore: /.*/ } without a corresponding tags filter).

5. Check workflow filters

If the pipeline is created but shows zero workflows, your filters are likely excluding the ref:

workflows:
  build:
    jobs:
      - test:
          filters:
            branches:
              only:
                - main
                - develop

In this example, pushing to feature/foo will create a pipeline but run zero workflows. Verify that your branch or tag matches the filter patterns.

GitLab-specific: GitLab triggers have their own filter options (Build Push and Merge Requests, Only Merge Requests, or Custom Filters) configured in Project Settings > Triggers. If your trigger is set to Only Merge Requests, pushes to branches without an open MR will not trigger a pipeline.

6. Check "Prevent unregistered user spend"

  1. Go to Plan > Usage Controls in the CircleCI app.
  2. If Prevent unregistered user spend is enabled, commits from users without CircleCI accounts will not trigger pipelines.
  3. Either disable this setting or ensure all committers have CircleCI accounts.

This is especially relevant for GitHub merge queue workflows, where the merge commit may be authored by a bot account.

7. Check the CircleCI status page

Visit status.circleci.com to see if there is an active incident affecting pipeline triggering or webhook ingestion. If an incident was recently resolved, push a new commit after the resolution time.

8. Test with a minimal config

If none of the above resolves the issue, temporarily replace your config with a minimal one to isolate whether the problem is config-related or platform-related:

version: 2.1

jobs:
  test-trigger:
    docker:
      - image: cimg/base:current
    steps:
      - run: echo "Pipeline triggered successfully"

workflows:
  test:
    jobs:
      - test-trigger

Push this config on a new branch. If it triggers, the issue is in your original config. If it does not trigger, the issue is with the webhook or project setup.

Verification

After applying the relevant fix:

  1. Push a new commit to the affected branch.
  2. Confirm a new pipeline appears on the CircleCI Pipelines page within 30 seconds.
  3. Verify the pipeline has at least one running workflow.
  4. If using webhooks, check that the VCS webhook delivery shows a 200 response.

Additional Resources

Was this article helpful?
0 out of 0 found this helpful

Comments

0 comments

Article is closed for comments.