Przejdź do głównej zawartości

Automatyzacja wdrożeń z Claude Code

Automatyzacja wdrożeń z Claude Code polega na tym, że agent pisze i uruchamia powtarzalne części wydania: bramki przed wdrożeniem, przeglądy bezpieczeństwa migracji, sparowane skrypty deploy i rollback oraz release notes. Poświadczenia produkcyjne zostają w CI albo u człowieka. Poprawność każdego wyniku potwierdzają kody wyjścia, wdrożenie na staging, smoke test i przećwiczony rollback, a nie czytanie kodu linijka po linijce.

Ten przewodnik jest dla programistów i tech leadów, którzy odpowiadają za wydania serwisu. Masz 47 commitów do wypuszczenia, trzy z nich zmieniają schemat bazy, produkcja potrzebuje innego tagu obrazu i trzech zmiennych środowiskowych, których nikt nie pamięta, a ostatnio migracja wykonała się już po starcie nowego kodu, więc użytkownicy oglądali błędy 500, dopóki ktoś ręcznie nie wycofał zmian. Poniższe kroki zamieniają tę checklistę w skrypty, które pisze Claude Code, a egzekwuje twój pipeline. Zakładają, że uruchamiasz już claude -p w skryptach; jeśli nie, zacznij od strony skrypty z Claude Code: uruchomienia headless, potoki, cron i hooki git.

  • Standard wdrożeniowy w CLAUDE.md i blok uprawnień, który trzyma produkcję poza zasięgiem agenta
  • Bramkę deploy-check.sh, która deterministyczne kontrole uruchamia w shellu, a claude -p pyta tylko o kwestie wymagające osądu i kończy się maszynowo czytelnym GO albo NO-GO
  • Prompty do skopiowania: przegląd bezpieczeństwa migracji, para skryptów deploy i rollback, przełączenie blue-green z rollbackiem sterowanym metryką oraz plan wycofania w trakcie incydentu
  • Skill /release-notes, który zamienia historię gita we wpis do changeloga i który może uruchomić każdy w zespole
  • Procedurę weryfikacji (dry run, staging, smoke test, próba rollbacku), która mówi ci, że skrypty działają, bez czytania każdej linijki

Gdzie Claude Code pasuje do wydania, a gdzie się zatrzymuje?

Dział zatytułowany „Gdzie Claude Code pasuje do wydania, a gdzie się zatrzymuje?”

Claude Code jest mocny w tych częściach wydania, które są tekstem: skryptach, przeglądach diffa i opisach historii zmian. Nie powinien jednak trzymać poświadczeń produkcyjnych ani naciskać przycisku. Wdrożenie należy do pipeline’u CI, który uruchamia napisane przez Claude’a skrypty po zatwierdzeniu przez człowieka.

Krok wydaniaCo tworzy Claude CodeJak to udowodnić bez czytania każdej linijkiKto zatwierdza
Bramka przed wdrożeniemdeploy-check.sh i werdykt GO/NO-GO dla diffaKody wyjścia sprawdzania typów, lintera, testów i builda; plik z werdyktem dołączony do wydaniaProgramista przygotowujący wydanie
Przegląd migracjiRaport zgodności dla każdej migracjiup, down, up na kopii danych produkcyjnych na staginguAutor migracji plus jeden recenzent
Skrypty deploy i rollbackdeploy.sh i rollback.sh jako parashellcheck, przebieg z DRY_RUN=1, wdrożenie na staging, przećwiczony rollbackTech lead, przy każdej zmianie skryptu
RolloutPrzełączenie blue-green lub canary z progiem metrykiCelowo zepsuty obraz na stagingu, który uruchamia automatyczny powrótTech lead zatwierdza środowisko produkcyjne w CI
Release notesWpis do changeloga i notatki wydaniaKażda linia wskazuje commit albo numer PRWłaściciel wydania
Rollback w incydenciePlan wycofania i dokładne komendyPowrót do normy widoczny na dashboardach wskazanych w planieInżynier dyżurny uruchamia komendy

Dwa sąsiednie zadania mają własne strony. Generowanie i utwardzanie samego pipeline’u opisuje konfiguracja pipeline’ów z Claude Code. Dockerfile’e i manifesty Kubernetes opisuje konfiguracja Dockera i Kubernetesa z CLI. Używasz Codexa? Zobacz automatyzację wdrożeń z Codexem. Wersję niezależną od narzędzia opisuje etap wdrożenia w metodzie.

Każdy prompt wdrożeniowy z tej strony staje się krótszy i bezpieczniejszy, kiedy zasady żyją w CLAUDE.md projektu. Claude Code wczytuje ten plik na początku każdej sesji, więc nowy inżynier, który prosi o „skrypt deploy dla serwisu płatności”, dostaje te same ograniczenia co autor zasad.

## Deployment rules
- Deploys run only from CI (.github/workflows/deploy.yml). Never run a deploy or rollback against production from a local session.
- Every deploy script has a matching rollback script, and deploy.sh records the running image tag before it changes anything.
- Scripts start with `set -euo pipefail` and support DRY_RUN=1, which prints every command instead of running it.
- Image tags are the git SHA. Never deploy `latest` to production.
- Migrations are expand/contract: add columns and tables in one release, remove them in a later one. The migration runs before the new code starts.
- Every new environment variable is added to .env.example in the same commit.
- Secrets come from the environment or the secret store, never from a file in the repository.

Wzmocnij zasady regułami deny w .claude/settings.json, żeby agent został zatrzymany nawet wtedy, gdy prompt prosi o zakazany krok:

{
"permissions": {
"deny": [
"Bash(./scripts/deploy.sh prod*)",
"Bash(./scripts/rollback.sh prod*)",
"Bash(kubectl *)",
"Bash(terraform apply *)",
"Read(./.env.production)"
]
}
}

Typowy błąd to prośba do Claude’a, żeby „uruchomił testy i zgłosił PASS albo FAIL”. Wtedy jedynym dowodem jest raport modelu, a model potrafi podsumować czerwony przebieg jako zielony. Podziel pracę. Shell uruchamia deterministyczne bramki i o wyniku decyduje kod wyjścia. Claude odpowiada tylko na pytania wymagające osądu, na przykład czy migracja jest bezpieczna przy rolling update.

Cztery szczegóły sprawiają, że tej bramce można ufać:

  • Błąd oznacza blokadę. Jeśli skończy się budżet, model inaczej sformatuje werdykt albo przebieg zakończy się błędem, grep -qx nie znajdzie dokładnej linii VERDICT: GO i skrypt zwróci niezerowy kod. Brak werdyktu oznacza NO-GO.
  • Agent niczego nie zmieni. --permission-mode dontAsk odrzuca każde narzędzie, którego nie zatwierdza z góry lista --allowedTools, a ta lista jest tylko do odczytu.
  • Koszt ma limit. --max-budget-usd zatrzymuje przebieg, który wymknął się spod kontroli. --max-turns nie figuruje już w claude --help (2.1.283), choć CLI nadal go przyjmuje; limituj koszt przez --max-budget-usd zamiast polegać na nieudokumentowanej fladze.
  • Dowód zostaje przy wydaniu. Dołącz plik z werdyktem ($RUNNER_TEMP/deploy-check.txt w GitHub Actions, /tmp/deploy-check.txt lokalnie) do pull requesta z wydaniem, obok przebiegu CI, jako część pakietu dowodów, który recenzent sprawdza zamiast diffa.

Jak uruchomić tę samą bramkę w GitHub Actions, opisuje strona Claude Code w CI/CD z GitHub Actions i trybem headless. Znajdziesz tam uprawnienia tokenów i zasady dotyczące niezaufanych refów, których potrzebuje zadanie CI.

Migracja to zmiana, której rollback często nie cofnie, bo stary kod może nie działać na nowym schemacie. Poproś Claude Code o ustrukturyzowany przegląd każdej oczekującej migracji, a potem udowodnij odpowiedź na danych.

Przegląd to trop, a nie dowód. Dowodem jest uruchomienie migracji na stagingu na świeżej, zanonimizowanej kopii danych produkcyjnych, w kolejności up, down, up, z pomiarem czasu. Migracja, która na prawdziwych danych blokuje tabelę na kilka minut, na pustej bazie deweloperskiej wygląda niewinnie.

Poproś o oba skrypty w jednym prompcie. Kiedy Claude pisze rollback w tym samym momencie, zapisuje stan potrzebny do wycofania, zanim deploy go zmieni.

Zweryfikuj parę, zanim uruchomi ją jakikolwiek pipeline:

  1. Uruchom shellcheck scripts/deploy.sh scripts/rollback.sh oraz bash -n na obu plikach. Oba muszą przejść bez uwag.

  2. Uruchom DRY_RUN=1 ./scripts/deploy.sh staging i porównaj wypisane komendy ze swoim runbookiem. Sprawdź kolejność: migracje przed kubectl set image, zapis stanu przed jakąkolwiek zmianą.

  3. Wypisz każdą zmienną środowiskową, której używają skrypty, i potwierdź, że każda istnieje w docelowym środowisku:

    Okno terminala
    grep -ohE '\$\{?[A-Z_][A-Z0-9_]*\}?' scripts/deploy.sh scripts/rollback.sh | tr -d '${}' | sort -u
  4. Wdróż na staging z CI, potem uruchom ./scripts/rollback.sh staging i potwierdź, że działa poprzedni tag, a smoke test przechodzi. Rollback, którego nigdy nie uruchomiłeś, to tylko hipoteza.

Zautomatyzuj przełączenie blue-green z rollbackiem sterowanym metryką

Dział zatytułowany „Zautomatyzuj przełączenie blue-green z rollbackiem sterowanym metryką”

Przełączenie ruchu bez sygnału o zdrowiu serwisu tylko przesuwa ryzyko. O skuteczności tego promptu decydują endpoint monitoringu i próg: dzięki nim skrypt decyduje na podstawie prawdziwego odsetka błędów, zamiast liczyć na szczęście.

Udowodnij, że automatyczny rollback zadziała, zanim zaczniesz na nim polegać. Na stagingu wdróż obraz, którego /health przechodzi, ale trasy API zwracają 500, i potwierdź, że skrypt przełącza ruch z powrotem w oknie monitorowania i kończy się kodem 1. Próg i okno wybierz na podstawie swojego SLO, a nie tego przykładu. Canary, feature flagi i budżet zasięgu awarii dla każdej klasy ryzyka opisuje progressive delivery dla zmian pisanych przez agentów.

Pisanie changeloga to miejsce, w którym Claude Code oszczędza najwięcej nudnej pracy przy najmniejszym ryzyku, bo każdą linię da się sprawdzić z commitem. Przekaż log na wejście i określ format.

Okno terminala
# Terminal: draft a CHANGELOG entry from the commits since the last tag
git log --no-merges --format='%h %s' "$(git describe --tags --abbrev=0)..HEAD" | \
claude -p "Draft a CHANGELOG.md entry from these commits, dated $(date +%F).
Group under Added, Changed, Fixed and Removed. One line per user-visible change, in past tense.
Keep the PR number, for example (#412), when the subject has one. Skip version bumps and CI-only commits.
After the entry, list every commit hash you left out and why." \
--output-format text > "${TMPDIR:-/tmp}/changelog-draft.md"

Ostatnia instrukcja to punkt zaczepienia dla weryfikacji: lista pominiętych commitów pozwala sprawdzić pokrycie w kilka sekund, zamiast ponownie czytać cały log.

Procedurę, którą uruchamia cały zespół, zapisz jako skill projektu. Skill zastępuje starszy plik w .claude/commands/; oba tworzą komendę slash, a różnice opisuje strona własne komendy i skille.

disable-model-invocation: true sprawia, że skill uruchamia się tylko wtedy, gdy wpiszesz go sam. To właściwe ustawienie dla wszystkiego, co trafia do wydania.

Diagnozuj nieudane wdrożenie przez MCP i skille platform

Dział zatytułowany „Diagnozuj nieudane wdrożenie przez MCP i skille platform”

Kiedy wdrożenie pada w CI, wklejanie fragmentów logów do sesji gubi kontekst. Zamiast tego daj Claude Code połączenie z pipeline’em tylko do odczytu. Serwer GitHub MCP udostępnia zestaw narzędzi Actions w trybie tylko do odczytu pod osobnym adresem URL:

Okno terminala
# Terminal: GITHUB_PAT is a fine-grained token with read access to Actions
claude mcp add --transport http github-actions \
https://api.githubcopilot.com/mcp/x/actions/readonly \
-H "Authorization: Bearer $GITHUB_PAT"

Przy wdrożeniu na konkretną platformę skill zawiera jej komendy i konwencje, więc nie musisz ich tłumaczyć od nowa w każdej sesji. Oficjalne skille i plugin Cloudflare instalujesz na przykład z repozytorium cloudflare/skills:

/plugin marketplace add cloudflare/skills
/plugin install cloudflare@cloudflare

Praktyczna reguła: skill najlepiej sprawdza się jako wiedza o tym, jak wykonać jedno zadanie, na przykład wdrożyć na jedną platformę. Serwer MCP jest lepszy, gdy Claude potrzebuje przez całą sesję żywego połączenia z systemem, takim jak przebiegi CI czy zasoby chmurowe. Zestawy narzędzi i tryb lockdown opisuje przewodnik po serwerze GitHub MCP, a integrację z Cloudflare — strona serwery MCP Cloudflare.

Komendy uruchamia inżynier dyżurny, a metryki powrotu do normy z punktu 4 są zatwierdzeniem. Szerszy proces obsługi incydentów opisuje strona reagowanie na incydenty z AI.

Co się psuje, gdy Claude Code automatyzuje twoje wdrożenia?

Dział zatytułowany „Co się psuje, gdy Claude Code automatyzuje twoje wdrożenia?”

Model zgłasza bramkę jako zaliczoną, choć jej nie uruchomił. Podsumowanie to nie kod wyjścia. Naprawa: trzymaj deterministyczne kontrole w shellu z set -e, tak jak w deploy-check.sh, a model zostaw do pytań wymagających osądu, w których odpowiedź cytuje file:line.

Linia werdyktu nigdy się nie dopasowuje. Model owija werdykt w pogrubienie Markdown albo dopisuje po nim zdanie, a bramka zgłasza NO-GO przy czystym wydaniu. To bezpieczny kierunek błędu. Naprawa: zostaw w prompcie „exactly one plain-text line and nothing after it” i przeczytaj plik z werdyktem spod $OUT przed ponownym uruchomieniem. Skrypt zapisuje go poza repozytorium, więc ponowny przebieg nie zablokuje się na własnym sprawdzeniu czystego drzewa.

Bramka w CI sprawdza zły zakres. Płytki checkout nie ma tagów, więc git describe cofa się do płytkiego korzenia i Claude przegląda niewłaściwy diff, a polecenie changelogu od razu kończy się błędem. Naprawa: ustaw fetch-depth: 0 w actions/checkout. Samo fetch-tags: true nie wystarczy, bo git describe potrzebuje też historii między tagiem a HEAD.

Dockerfile działa lokalnie, ale pada w CI. Runner ma zwykle inną architekturę procesora. Naprawa: buduj przez docker buildx build --platform linux/amd64 albo poproś Claude’a o build wieloplatformowy; resztę opisuje strona o konteneryzacji.

Wdrożenie się udaje, a aplikacja pada przy starcie. Claude Code nie widzi zachowania w runtime na środowisku, do którego nie ma dostępu. Naprawa: smoke test w deploy.sh musi trafiać w prawdziwą trasę, nie tylko w /health, a każda zmiana skryptu przechodzi najpierw przez staging.

Na produkcji brakuje zmiennej. Wygenerowane skrypty odwołują się do zmiennych, których nikt nie ustawił. Naprawa: kontrola .env.example w bramce oraz grep z kroków weryfikacji powyżej.

Changelog jest bezużyteczny. Tematy commitów w stylu „fix stuff” dają wpisy w stylu „Fixed stuff”. Naprawa: każ Claude’owi czytać diff przy niejasnych commitach, tak jak robi to skill, i egzekwuj opisowe tematy w code review.

Rollback pada, bo migracja była jednokierunkowa. Wiele ORM-ów domyślnie nie generuje migracji w dół. Naprawa: zrób z expand/contract regułę w CLAUDE.md i uruchamiaj up, down, up na stagingu dla każdej migracji.

Agent i tak dociera do produkcji. Regułę deny ominięto innym zapisem komendy albo produkcyjne poświadczenie leżało w środowisku shella. Naprawa: usuń poświadczenia produkcyjne z maszyn deweloperskich i pozwól trzymać je wyłącznie zadaniu wdrożeniowemu w CI.