
Ciągłe wdrażanie — to szczególny sposób podejścia do tworzenia oprogramowania, który pozwala na szybkie, bezpieczne i efektywne wprowadzanie różnych funkcji do oprogramowania.
Główna idea polega na stworzeniu niezawodnego zautomatyzowanego procesu, który umożliwia programiście szybkie dostarczanie gotowego produktu użytkownikowi. W tym procesie wprowadzane są ciągłe zmiany w produkcji — nazywa się to pipeline'em ciągłej dostawy (CD Pipeline).
Skillbox poleca: Praktyczny kurs .
Przypominamy: dla wszystkich czytelników „Habra” — zniżka 10 000 rubli przy zapisie na dowolny kurs Skillbox z kodem promocyjnym „Habra”.

Do zarządzania przepływem można używać szerokiego wachlarza narzędzi, wśród których znajdują się zarówno płatne, jak i całkowicie bezpłatne. W tym artykule opisano trzy najpopularniejsze rozwiązania wśród programistów, które mogą być przydatne dla każdego programisty.
Jenkins
Kompletnie autonomiczny serwer automatyzacji z otwartym kodem źródłowym. Warto go wykorzystać do automatyzacji wszelkich rodzajów zadań związanych ze skontrowaniem, testowaniem, dostarczaniem lub wdrażaniem oprogramowania.
Minimalne wymagania dla PC:
- 256 MB RAM, 1 GB przestrzeni dyskowej.
Optymalnie:
- 1 GB RAM, 50 GB na dysku.
Do działania wymagana jest również dodatkowa aplikacja — Java Runtime Environment (JRE) w wersji 8.
Architektura (rozproszone obliczenia) wygląda następująco:

Serwer Jenkins — instalacja, która odpowiada za hosting GUI oraz organizację i wykonywanie całego buildu.
Węzeł/Szyna/Jenkins Node — urządzenia, które można skonfigurować do wykonywania pracy w budowie w imieniu Master (głównego węzła).
Instalacja dla systemu Linux
Najpierw należy dodać repozytorium Jenkins do systemu:
cd /tmp && wget -q -O — | sudo apt-key add — echo 'deb binary/' | sudo tee -a /etc/apt/sources.list.d/jen
Zaktualizuj repozytorium pakietów:
sudo apt update
Zainstaluj Jenkins:
sudo apt install jenkins
Po tym Jenkins będzie dostępny w systemie na domyślnym porcie 8080.
Aby sprawdzić jego działanie, należy otworzyć w przeglądarce adres :8080. Następnie system poprosi o podanie początkowego hasła użytkownika z uprawnieniami root. Hasło to znajduje się w pliku /var/lib/jenkins/secrets/initialAdminPassword.
Teraz wszystko jest gotowe do pracy, można zacząć tworzyć strumienie CI/CD. Graficzny interfejs środowiska roboczego wygląda następująco:


Mocne strony Jenkins:
- skalowalność, którą zapewnia architektura Master/Slave;
- obecność REST XML/JSON API;
- możliwość podłączenia dużej liczby rozszerzeń dzięki wtyczkom;
- aktywna i stale rozwijająca się społeczność.
Wady:
- brak modułu analitycznego;
- niezbyt wygodny interfejs.
TeamCity
Komercyjny produkt firmy JetBrains. Serwer wyróżnia się prostą konfiguracją i doskonałym interfejsem. W domyślnej konfiguracji dostępnych jest wiele funkcji, a liczba dostępnych wtyczek stale rośnie.
Do pracy wymagana jest Java Runtime Environment (JRE) wersja 8.
Wymagania sprzętowe serwera nie są krytyczne:
- RAM — 3,2 GB;
- procesor — dwurdzeniowy, 3,2 GHz;
- łącze o przepustowości 1 Gb/s.
Serwer zapewnia wysoką wydajność w pracy:
- 60 projektów z 300 konfiguracjami budowy;
- przydział 2 MB na dziennik budowy;
- 50 agentów budowy;
- możliwość pracy 50 użytkowników w wersji webowej i 30 użytkowników w IDE;
- 100 połączeń zewnętrznej SCV, zazwyczaj Perforce i Subversion. Średni czas zmian — 120 sekund;
- ponad 150 modyfikacji dziennie;
- praca z bazą danych na jednym serwerze;
- ustawienia procesu serwera JVM: -Xmx1100m -XX:MaxPermSize=120m.
Wymagania dotyczące agenta zależą od działających budów. Głównym zadaniem serwera jest monitorowanie wszystkich podłączonych agentów i przydzielanie budów z kolejki tym agentom na podstawie wymagań zgodności, z informowaniem o wynikach. Agenci działają na różnych platformach i systemach operacyjnych oraz mają wstępnie skonfigurowane środowisko.
Wszystkie informacje o wynikach budowy przechowywane są w bazie danych. Zawiera to w szczególności historię i inne podobne dane, zmiany VCS, agentów, kolejki budowy, konta użytkowników i uprawnienia. Do bazy nie wchodzą jedynie dzienniki budowy i artefakty.

Instalacja dla systemu Linux
Do ręcznej instalacji TeamCity z kontenerem serwletu Tomcat należy użyć archiwum TeamCity: TeamCity .tar.gz. Można je pobrać .
tar -xfz TeamCity.tar.gz
/bin /runAll. sh [start|stop]
Podczas pierwszego uruchomienia należy wybrać typ bazy danych, w której będą przechowywane dane o budowie.

Domyślna konfiguracja działa na :8111/ z jednym zarejestrowanym agentem budowy uruchomionym na tym samym komputerze.
Mocne strony TeamCity:
- prosta konfiguracja;
- wygodny interfejs;
- duża liczba wbudowanych funkcji;
- wsparcie techniczne;
- dostępne API RESTful;
- przyzwoita dokumentacja;
- dobre zabezpieczenia.
Wady:
- ograniczona integracja;
- to płatne narzędzie;
- mała społeczność (która jednak rośnie).
GoCD
Projekt open source, do zainstalowania i uruchomienia którego wymagana jest Java Runtime Environment (JRE) w wersji 8.
Wymagania systemowe:
- RAM — minimum 1 GB, lepiej więcej;
- procesor — dwurdzeniowy, o częstotliwości pracy rdzenia 2 GHz;
- dysk twardy — minimum 1 GB wolnego miejsca.
Agent:
- RAM — minimum 128 MB, lepiej więcej;
- procesor — minimum 2 GHz.
Serwer zapewnia działanie agentów i oferuje łatwy w użyciu interfejs dla użytkownika:

Etapy/Zadania/Prace:

Instalacja dla systemu Linux
echo “deb /” | sudo tee /etc/apt/sources.list.d/gocd.list
curl | sudo apt-key add —
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install -y openjdk-8-jre
apt-get install go-server
apt-get install go-agent
/etc/init.d/go-server [start|stop|status|restart]
/etc/init.d/go-agent [start|stop|status|restart]
Domyślnie GoCd działa na :8153.
Mocne strony GoCd:
- otwarty kod źródłowy;
- łatwa instalacja i konfiguracja;
- dobra dokumentacja;
- świetny interfejs użytkownika:

- możliwość śledzenia ścieżki wdrożenia GoCD w jednym widoku:

- doskonała wizualizacja struktury potoku:

- GoCD optymalizuje przepływ pracy CD w najpopularniejszych środowiskach chmurowych, w tym Dockerze, AWS;
- narzędzie daje możliwość naprawy błędów w potoku, umożliwiając śledzenie każdej zmiany od commita do wdrożenia w czasie rzeczywistym.
Wady:
- potrzebny jest przynajmniej jeden agent;
- brak konsoli do wyświetlania wszystkich wykonanych zadań;
- do wykonania każdej komendy należy utworzyć jedno zadanie w konfiguracji potoku;
- do zainstalowania pluginu należy przenieść plik .jar do /plugins/external i ponownie uruchomić serwer;
- względnie mała społeczność.
Podsumowując
To zaledwie trzy narzędzia, w rzeczywistości jest ich znacznie więcej. Wybór jest trudny, dlatego należy zwrócić uwagę na dodatkowe aspekty.
Otwarty kod źródłowy narzędzia pozwala zrozumieć, czym ono jest, oraz szybciej dodawać nowe funkcje. Jednak jeśli coś nie działa, można liczyć tylko na siebie i pomoc społeczności. Płatne narzędzia oferują wsparcie, które czasami może być krytyczne.
Jeśli bezpieczeństwo jest najważniejsze, warto pracować z lokalnym narzędziem. Jeśli nie, wybór rozwiązania SaaS to dobra opcja.
I na koniec: aby zapewnić naprawdę skuteczny proces ciągłego wdrażania, należy określić kryteria, których szczegóły pozwolą zawęzić wybór dostępnych narzędzi.
Skillbox poleca:
- Dwuletni praktyczny kurs .
- Kurs online .
- Praktyczny roczny kurs .
Źródło: habr.com
