Łukasz Stolcman
przez Łukasz Stolcman
1 min czytania

Kategorie

Tagi

  • github
  • github-actions
  • devops

Już od dawna chciałem nauczyć się automatycznego deploymentu kodu. Ostatecznie zostałem do tego „przyciśnięty” przy okazji brania udziału w hackathonie „Hack the Crisis” (nasze repo). Tam też skonfigurowałem podstawowe i niestety bardzo ułomne CI/CD. Ale w końcu

Tylko ten nie popełnia błędów, kto nic nie robi.

;)

W każdym razie, stronka jako-tako działała, a mi pozostało nic innego, jak poszerzenie wiedzy.

Co do samego github actions, to uważam, że jest to świetne narzędzie. Niestety posiada swoje ograniczenia, np. dla darmowych kont jego możliwości są ograniczone w prywatnym repozytorium.

Co zrobić, kiedy mamy darmowe konto i prywatne repozytoria i chcemy to opakować w CI/CD? I tu wchodzą do użycia „akcje” - każdy użytkownik github może napisać skrypt, który zostanie wykonany przez workflow (najczęściej jednak nie ma takiej potrzeby - te podstawowe akcje są już napisane).

Jedną z takich akcji jest akcja burnett01/rsync-deployments@4.0, którą używam w celu uniezależnienia się od płatnych funkcji github actions takich jak „packages”. Akcja pozwala na przesłanie plików na własny serwer z użyciem rsync wprost z zadania („job”). Czyli - możliwe jest wysłanie np. skompilowanych plików frontendowych wprost, lub obrazów dockerowych bez uruchamiania własnego rejestru dockera.

Konfiguracja

Jest banalnie prosta. Wystarczy:

  1. wygenerować nowy klucz ssh (bez hasła!): ssh-keygen -o -a 100 -t ed25519 -C "komentarz do klucza". Klucz tworzy dwie pary - publiczną, którą umieszczamy w pliku ~/.ssh/authorized_keys na serwerze, część prywatna - umieszczana w githubowych sekretach.
  2. użyć akcji burnett01/rsync-deployments@4.0 w pliku workflow, i odwołać się do sekretów - nazwy użytkownika, hosta, portu, klucza prywatnego.
  3. Koniec :) Akcja wysyła pliki na serwer.

Możliwości obejmują np wysyłanie skompilowanych plików frontendu bezpośrednio na serwer, czy wysyłanie obrazów dockerowych. Dorzucając do tego self-hosted runners zbudowanie CI/CD jest kwestią konfiguracji serwera i napisania skryptów.