Przyjrzyjmy się bliżej dwóm szeroko stosowanym systemom do ciągłej integracji i przeanalizujmy, co je odróżnia.
Metodyka tworzenia oprogramowania przeszła znaczącą ewolucję w ostatniej dekadzie.
Początkowo dominował model kaskadowy, który z czasem ustąpił miejsca podejściu zwinnemu, opartemu na iteracyjnym rozwoju. Obecnie, dzięki metodyce DevOps, zarówno proces tworzenia, jak i wdrażania aplikacji odbywają się w sposób iteracyjny i ciągły, aż do finalnego etapu wdrożenia.
Określenie CI/CD, oznaczające ciągłą integrację i ciągłe dostarczanie, zyskało na popularności. Ta praktyka DevOps przyspiesza i usprawnia proces tworzenia i wdrażania aplikacji, automatyzując wszystkie etapy, od analizy wymagań biznesowych, po wdrożenie na serwery produkcyjne. Jest to zdecydowanie efektywniejsze i bezpieczniejsze rozwiązanie w porównaniu z ręczną obsługą poszczególnych faz.
Rynek oferuje wiele narzędzi do CI/CD, dlatego wybór odpowiedniego rozwiązania bywa problematyczny.
Dlaczego warto wybrać Jenkins?
Jenkins to najpopularniejsze, otwarte oprogramowanie do ciągłej integracji, uważane za standard w tej dziedzinie.
Jenkins, oparty na Javie, można zainstalować na różnych systemach operacyjnych, takich jak Windows czy Linux. Pierwotnie był pomyślany jako narzędzie do automatyzacji budowania aplikacji w Javie, ale z czasem zyskał rozbudowany ekosystem, oferując ponad 1400 wtyczek umożliwiających integrację z różnymi platformami i narzędziami.
Jenkins to podstawowe narzędzie w procesie CI/CD, wyróżniające się prostotą instalacji i intuicyjnym pulpitem nawigacyjnym dostępnym przez przeglądarkę.
Deweloperzy wykorzystują Jenkinsa do automatycznego budowania, integracji, testowania i wdrażania kodu. Proces rozpoczyna się od przesłania kodu przez programistów do repozytorium. Następnie Jenkins pobiera aktualizacje, inicjuje kompilację oraz uruchamia testy, jeśli są skonfigurowane. Po pomyślnej kompilacji wyniki są prezentowane na pulpicie nawigacyjnym, a programista może otrzymać powiadomienie.
Dlaczego warto wybrać TeamCity?
TeamCity to komercyjny serwer CI/CD, również bazujący na Javie, stworzony przez JetBrains.
Zgodnie z hasłem „Potężna ciągła integracja po wyjęciu z pudełka”, TeamCity oferuje funkcjonalność porównywalną z Jenkinsem, wzbogaconą o dodatkowe opcje. Umożliwia integrację z Dockerem w celu automatycznego tworzenia kontenerów, a także posiada wsparcie dla Jiry, co ułatwia monitorowanie zgłoszeń.
TeamCity oferuje również wsparcie dla platformy .NET i łatwą integrację ze środowiskami IDE, takimi jak Eclipse czy Visual Studio. Funkcja przechowywania artefaktów pozwala na składowanie ich w systemie plików serwera lub zewnętrznej pamięci.
W darmowej wersji licencji TeamCity Professional można korzystać z 100 kompilacji i 3 agentów kompilacji.
Porównanie Jenkins i TeamCity
Oprogramowanie otwarte vs. komercyjne
Główna różnica polega na tym, że Jenkins jest oprogramowaniem open source, podczas gdy TeamCity jest rozwiązaniem komercyjnym. Jenkins jest rozwijany w ramach licencji MIT i wspierany przez globalną społeczność programistów. TeamCity jest natomiast rozwijany i utrzymywany przez JetBrains.
Interfejs użytkownika
Interfejs TeamCity jest estetyczny i przyjazny dla początkujących użytkowników CI. Umożliwia on tagowanie, komentowanie i przypinanie kompilacji, co ułatwia ich organizację.
Interfejs Jenkinsa jest mniej nowoczesny i mógłby skorzystać na usprawnieniach pod względem użyteczności.
Dostępne funkcje
Chociaż Jenkins nie ma wielu wbudowanych funkcji, rozbudowany ekosystem wtyczek oferuje szeroki zakres możliwości, których inne narzędzia CI nie zapewniają. Wtyczki umożliwiają tworzenie kompilacji i analizę kodu, co wspomaga poprawę jego jakości.
TeamCity, oprócz standardowych funkcji CI, oferuje liczne funkcje gotowe do użycia. Obsługuje wiele platform (Java, Ruby, .NET) i umożliwia tworzenie obrazów Dockera. Dzięki integracji z Bugzillą i Jirą łatwo monitorować zgłoszenia. Dodatkowo, śledzenie zmian w kompilacjach i historia błędów pozwalają na analizę statystyk, uruchamianie wcześniejszych kompilacji i przeglądanie raportów z testów.
Instalacja
Aby zainstalować Jenkinsa, wymagana jest obecność Javy w systemie. Sama konfiguracja jest prosta. Po zakończeniu instalacji można zacząć pracę z narzędziem poprzez interfejs internetowy.
Instalacja TeamCity również jest nieskomplikowana. Wystarczy pobrać serwer TeamCity, skorzystać z dokumentacji i postępować zgodnie z instrukcjami.
Integracje
Jenkins zdecydowanie wyróżnia się w kwestii możliwości integracji. Jego popularność wynika z ogromnej liczby dostępnych, darmowych wtyczek.
TeamCity oferuje mniejszą liczbę wtyczek, ale za to zapewnia kilka ekskluzywnych integracji, które są dostępne „po wyjęciu z pudełka”. Obsługuje platformę .NET i integruje się z Visual Studio Team Services, a także oferuje integrację chmurową z platformami takimi jak AWS, Azure, GCP czy VMware.
Bezpieczeństwo
Komercyjne podejście JetBrains sprawia, że bezpieczeństwo jest priorytetem dla TeamCity. Narzędzie to integruje się z wtyczką Snyk, która umożliwia skanowanie podatności w potoku kompilacji, pomagając w identyfikacji i eliminacji potencjalnych zagrożeń.
W przypadku Jenkinsa, jako oprogramowania open source, kwestie bezpieczeństwa zależą od zaangażowania społeczności programistów.
Społeczność
Społeczność Jenkinsa jest znacznie większa niż TeamCity. Dzięki otwartej licencji, każdy programista może wnieść wkład w rozwój projektu, dodając nowe funkcje i ulepszając narzędzie.
TeamCity, jako narzędzie komercyjne, jest rozwijane przez zespół JetBrains. Posiada dedykowaną społeczność wsparcia.
Cennik
Jenkins jest darmowy, co czyni go preferowanym wyborem dla wielu organizacji, które mogą zaoszczędzić na narzędziach CI.
TeamCity jest płatny. Oferuje dwie licencje: Professional Server i Enterprise Server. W ramach licencji Professional Server dostępne jest 100 konfiguracji kompilacji i 3 agentów kompilacji. Dodatkowy agent kosztuje 299 USD za 1 agenta i 10 konfiguracji. Licencja Enterprise Server zaczyna się od 1999 USD za 3 agentów i nielimitowaną liczbę konfiguracji.
Tabela porównawcza
Jenkins
TeamCity
Napisane w
Jawa
Jawa
Deweloper
CloudBees, Kohsuke Kawaguchi, otwarte oprogramowanie
JetBrains
Licencja
Licencja MIT
Oprogramowanie komercyjne
Cechy
- Otwarte źródło
- Bogaty zestaw wtyczek
- Łatwa konfiguracja
- Wsparcie dla rurociągów
- Wtyczka workflow
- Szerokie możliwości integracji
- Hostowanie wewnętrzne
- Asynchroniczne wykonywanie zadań
- Wydawca HTML
- Kontrola przepustowości
- Kluczowe Integracje
- Integracja z chmurą
- Historia kompilacji
- Budowanie infrastruktury
- Śledzenie jakości kodu
- Współpraca z VCS
- Utrzymanie systemu
- Zarządzanie użytkownikami
- Elastyczność i personalizacja
- Wstępne testowanie zmian
Łatwość użycia
Tak
Tak
Interfejs użytkownika
Prosty interfejs
Atrakcyjny interfejs
Społeczność
Duża społeczność
Mniejsza niż w przypadku Jenkinsa
Cennik
Bezpłatny
Licencja Professional Server kosztuje 299 USD za agenta po 3 darmowych
natomiast
Koszt licencji Enterprise Server zaczyna się od 1999 USD
Integracje
Ponad 1400 integracji
Ponad 300 integracji
Bezpieczeństwo
Mniej bezpieczny
Bardziej zabezpieczony
API
Obsługa JSON, Python, RESTful API: XML
Obsługa RESTful API, tworzenie wtyczek za pomocą Open API
Obsługa języków programowania
Java, PHP, C, C++, Fortran, Python i wiele innych języków skryptowych
Python, C++, Java, .NET, Ruby, PHP, Node.js i inne
Obsługa kontenerów
Wtyczka Docker dla Jenkinsa
Wbudowana obsługa Dockera
Cykl wydawniczy
Częstszy
Rzadszy
Raportowanie
Szczegółowe raporty z kompilacji i testów
Raporty z lepszym interfejsem internetowym
Podsumowanie
Przedstawiliśmy porównanie dwóch popularnych narzędzi do ciągłej integracji: Jenkinsa i TeamCity.
Wybierając narzędzie CI dla organizacji, należy uwzględnić kilka czynników, takich jak opcje hostingu, dostępne integracje, biblioteka kodu, obsługa kontenerów, łatwość użytkowania i nauki. Narzędzie, które najlepiej spełnia te kryteria, będzie najbardziej odpowiednie.
Aby ostatecznie zdecydować, warto wypróbować darmowe wersje Jenkinsa i TeamCity. Po przeprowadzeniu kilku kompilacji na obu platformach, wybór właściwego narzędzia stanie się łatwiejszy.