Twój agent nie zepsuł produkcji. Zrobił to Twój pipeline.

Twój agent nie zepsuł środowiska produkcyjnego. Zrobił to Twój pipeline.

Wiele zespołów używa agentów do otwierania pull requestów. Wykorzystują CI do sprawdzania lintingu, testów i budowania projektów. Następnie zaplanowane zadanie przenosi kod ze stagingu na produkcję. Taka konfiguracja w końcu zawodzi.

Problemem nie jest złośliwy agent. Problemem jest zły proces. Połączyłeś dwa różne pytania w jedną bramkę:

  • Czy to przeszło CI?
  • Czy to jest bezpieczne, aby człowiek zobaczył to w tej chwili?

To nie jest to samo. CI sprawdza, czy kod działa. Nie sprawdza jednak, czy dana funkcja jest gotowa dla klientów.

Jeśli Twój pipeline traktuje „merged” i „live” jako to samo, masz problem. Nieświadomie zdecydowałeś się na continuous deployment.

Musisz rozdzielić te dwa zdarzenia.

Możesz to osiągnąć za pomocą feature flagów. Feature flagi to po prostu wartość boolean i instrukcja if. Na początek nie potrzebujesz drogich narzędzi. Wystarczy prosta wartość konfiguracyjna lub zmienna środowiskowa.

Moja konfiguracja opiera się na tych zasadach:

  • PR-y są scalane do maina, ale main nie jest tym, co pozostaje na produkcji.
  • Osobny krok wydawniczy promuje main do gałęzi produkcyjnej.
  • Muszę wyraźnie wydać polecenie startu. Żadnych zadań cron ani timerów.
  • Wydanie czeka, aż build zacznie obsługiwać ruch.
  • Automatyczne sprawdzenie uderza w kluczowe endpointy, aby potwierdzić, że strona działa.
  • Człowiek wykonuje końcową, manualną weryfikację zmian.

To tworzy bramkę. Człowiek, maszyna i kolejny człowiek mają szansę powiedzieć „nie”, zanim użytkownik cokolwiek zobaczy.

Jeśli błąd mimo wszystko trafi do użytkownika, musisz szybko wykonać revert. Aby to zrobić, zastosuj wzorzec expand and contract przy migracjach bazy danych.

  • Dodaj nową kolumnę jako nullable.
  • Uzupełnij dane (backfill).
  • Zapisuj dane zarówno do starej, jak i nowej kolumny.
  • Czytaj z nowej kolumny.
  • Usuń starą kolumnę dopiero w późniejszym wydaniu.

Jeśli to pominiesz, Twój przycisk revert będzie bezużyteczny. Jeśli migracja usunie kolumnę, której potrzebuje stary kod, nie będziesz mógł wykonać rollbacku. System po prostu pozostanie uszkodzony.

Agent sprawia, że takie błędy zdarzają się szybciej. Usuwa on manualne tarcie, które wcześniej maskowało złe procesy. Dyscyplina, którą pominąłeś, nigdy nie była opcjonalna. Była jedynie maskowana przez człowieka, który zauważał błąd przed 17:00 w piątek.

Wyeliminuj człowieka z pętli, a dyscyplina stanie się obowiązkowa.

Źródło: https://dev.to/mattstratton/your-agent-didnt-break-prod-your-pipeline-did-4g9o