Preskoči na sadržaj

Kako radi tag verb (i fan_out_pipeline)?

TL;DR

tag verb je dispatcher: kad god Bitbucket pipeline triggera sa BITBUCKET_TAG postavljenim, on pokreće bump → build → deploy → notify sekvencu za taj tag. Koristi se za Release Invariant Pattern 1 (tag-triggered pipeline). fan_out_pipeline.py je helper za programsko triggerovanje tag pipeline-a iz drugog pipeline-a (npr. iz main bump-a).

tag verb

Ulaz: BITBUCKET_TAG env var (npr. v1.2.3).

Šta radi:

  1. Pročitaj BITBUCKET_TAG.
  2. Validira format (mora match-ovati release.tag_pattern + prefix).
  3. Pokreni sekvencu:
bump → build → deploy → notify

za servis koji odgovara tagu (ili za sve ako je generic tag). 4. Svaki verb u sekvenci dobija BITBUCKET_TAG kao env var. 5. --wait po defaultu (kao i deploy).

ci/run.py tag --env production --wait je canonical poziv.

fan_out_pipeline.py

Helper za programsko triggerovanje tag pipeline-a iz drugog pipeline-a:

from ci.git.fan_out_pipeline import trigger_tag_pipeline

trigger_tag_pipeline(
    tag="v1.2.3",
    services=["api", "worker"],
    wait=True,  # blokira dok se svi pipeline-i ne završe
)

Koristi se u:

  • Multi-service release: bump main pipeline triggeruje tag pipeline za svaki servis paralelno.
  • Re-trigger: operater ručno želi ponoviti deploy istog taga (npr. nakon fix-a).

Pattern 1 vs Pattern 2 (release invariant)

Pattern 1 (tag-triggered):          Pattern 2 (single-run re-checkout):

main pipeline:                      main pipeline:
  bump                                bump
  fan_out_pipeline ──┐                 ↓
                     ↓                 build (ci-checkout-release)
  tag pipeline:                       scan  (ci-checkout-release)
    build                              deploy (ci-checkout-release)
    scan                               notify (ci-checkout-release)
    deploy
    notify

tag verb je Pattern 1. Pattern 2 koristi make ci-checkout-release umjesto fan-out.

Kada koristiti koji

  • Pattern 1 (tag): release i deploy decouplovani. Manual gate moguć. Multi-service fan-out.
  • Pattern 2 (single-run): jedan pipeline, bez fan-out. Brže, ali sve u jednom run-u.

Većina release-ova koristi Pattern 2 danas. Pattern 1 za stage-gated compliance flow.

Failure modes

  • BITBUCKET_TAG unset → exit 1 sa ERROR: BITBUCKET_TAG env var not set. Tag verb je besmislen bez taga.
  • Tag format ne matchuje pattern → exit 1.
  • Inner pipeline failtag izlazi sa exit kodom inner pipeline-a (po defaultu). NE retry.

Vidi i