Build Server — to wydzielony serwer lub maszyna wirtualna, która automatycznie kompiluje kod źródłowy, uruchamia testy i tworzy gotowe do wdrożenia artefakty. Służy jako centralny węzeł infrastruktury CI/CD i przejmuje zadania kompilacji, odciążając lokalne maszyny programistów. Według raportu GitLab Global DevSecOps Report, 2025, 67% zespołów korzysta z wydzielonych serwerów kompilacji w celu zwiększenia stabilności i szybkości kompilacji.
Najważniejsze
Build Server (serwer kompilacji) — to wyspecjalizowany system obliczeniowy przeznaczony do automatycznego wykonywania zadań związanych z kompilacją kodu i przygotowywaniem wydań. W przeciwieństwie do lokalnej kompilacji na maszynie programisty, serwer pracuje na kopii repozytorium, używa czystego środowiska i stałych wersji zależności.
Serwer kompilacji jest kluczowym komponentem praktyki Continuous Integration. Gwarantuje, że każdy commit przechodzi taki sam proces weryfikacji niezależnie od tego, kto go wykonał. Eliminuje to problem „na mojej maszynie działa” i zapewnia jednolity standard jakości.
Według danych Google DORA, 2025, zespoły używające wydzielonego serwera kompilacji skracają czas potwierdzania zmian z godzin do minut. Wpływa to bezpośrednio na szybkość dostarczania funkcji i poprawek do końcowych użytkowników.
Kompilacja aplikacji mobilnych wymaga znacznych zasobów: kompilacja Kotlin lub Swift może zająć od 5 do 40 minut. Jeśli uruchomić kompilację na lokalnej maszynie programisty, nie może on produktywnie pracować do jej zakończenia. Serwer kompilacji rozwiązuje ten problem, zwalniając programistę do innych zadań.
W praktyce terminy te są często używane zamiennie, ale jest różnica: serwer CI (Jenkins, CircleCI) — to system zarządzający potokami, a serwer kompilacji — fizyczny lub wirtualny host, na którym te potoki są wykonywane. Jeden serwer CI może zarządzać wieloma agentami kompilacji (build slaves).
Typowy serwer kompilacji składa się z kilku komponentów, z których każdy odpowiada za określony etap procesu. Zrozumienie architektury pomaga prawidłowo skalować infrastrukturę pod obciążenie zespołu.
Rdzeń (executor) — uruchamia zadania kompilacji. Może działać w postaci kontenerów Docker, maszyn wirtualnych lub bezpośrednio na hoście. Kolejka zadań zarządza priorytetami równoległych kompilacji. Magazyn artefaktów przechowuje wyniki (APK, IPA, AAB) do późniejszej publikacji.
W celu przyspieszenia działania serwer kompilacji może zarządzać pulą agentów. Każdy agent — to osobna maszyna lub kontener zdolny do wykonywania kompilacji. Przy wzroście obciążenia automatyczne skalowanie (auto-scaling) dodaje nowych agentów w chmurze. Na przykład Jenkins z wtyczką Kubernetes może dynamicznie tworzyć pody dla każdej kompilacji.
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: android-sdk
image: openjdk:17-jdk
command: ['sleep','infinity']
"""
}
}
stages {
stage('Build') {
steps {
sh './gradlew assembleDebug'
}
}
}
}
Serwery kompilacji dzielą się na kilka kategorii według sposobu umieszczenia i docelowego stosu technologicznego. Wybór konkretnego rozwiązania zależy od wielkości zespołu, budżetu i wymagań dotyczących bezpieczeństwa.
Jenkins, TeamCity, Bamboo, GitLab Runner (self-hosted) — instalują się na własnych serwerach lub VPS. Plusy: pełna kontrola nad konfiguracją, możliwość użycia dowolnego oprogramowania, dane nie opuszczają infrastruktury firmy. Minusy: koszty administracji, aktualizacji i skalowania.
GitHub Actions, CircleCI, Bitrise, Codemagic, GitLab SaaS — nie wymagają zarządzania serwerami. Opłata pobierana jest za minuty kompilacji lub w ramach subskrypcji. Dla małych zespołów jest to optymalny start. Dla dużych projektów z dużą liczbą kompilacji koszty mogą przekroczyć cenę rozwiązania self-hosted.
| Rozwiązanie | Typ | Platformy | Cena początkowa |
|---|---|---|---|
| Jenkins | Self-hosted | Dowolne | Bezpłatnie (open-source) |
| GitHub Actions | Chmurowe | Linux, macOS, Windows | 2000 min/miesiąc bezpłatnie |
| Bitrise | Chmurowe | iOS, Android, Flutter, React Native | $0 (90 min/miesiąc) |
| TeamCity | Self-hosted | Dowolne | Bezpłatnie (100 kompilacji) |
Specyfiką iOS jest to, że kompilacja jest możliwa tylko na macOS. Opcje: Mac mini w stojaku, MacStadium (wynajem Mac), GitHub Actions z runnerem macOS, Bitrise z własnymi agentami Mac. Self-hosted serwer kompilacji Mac wymaga zakupu drogiego sprzętu i jego utrzymania.
Rozważmy konfigurację krok po kroku serwera kompilacji dla projektu mobilnego z kompilacjami Android i iOS. Jako podstawę użyjemy GitHub Actions z self-hosted runnerem dla iOS i chmurowym runnerem dla Androida.
Wybierz platformę zarządzania (Jenkins, GitLab, GitHub Actions). Zainstaluj master-nodę, skonfiguruj dostęp do repozytorium przez SSH lub personal access token. Skonfiguruj webhook do automatycznego uruchamiania kompilacji przy pushach do repozytorium.
Zarejestruj jedną lub więcej maszyn jako agentów (slaves/runners). Dla kompilacji Android agent może działać na Linux lub Windows z zainstalowanym JDK, Android SDK, Gradle. Dla iOS — na macOS z Xcode Command Line Tools i CocoaPods.
Określ etapy: checkout, instalacja zależności, kompilacja, testowanie, publikacja artefaktu. W celu przyspieszenia używaj buforowania zależności (Gradle cache, CocoaPods cache, Docker image layers).
name: Android Build
on:
push:
branches: [main, develop]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Cache Gradle
uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
- name: Build Release APK
run: ./gradlew assembleRelease
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: app-release.apk
path: app/build/outputs/apk/release/app-release.apk
Wybór między self-hosted a chmurowym serwerem kompilacji to nie tylko decyzja techniczna, ale także finansowa. Koszt znacznie się różni w zależności od liczby kompilacji, wymaganego czasu wykonania i potrzeby użycia macOS dla iOS.
Self-hosted serwer wymaga nakładów kapitałowych (CAPEX): zakup sprzętu (Mac mini od $699, stojaki serwerowe, sprzęt sieciowy), konfiguracja i utrzymanie. Rozwiązania chmurowe — koszty operacyjne (OPEX): opłata za minuty kompilacji. Dla małych zespołów OPEX jest korzystniejszy, dla dużych projektów z setkami kompilacji dziennie CAPEX zwraca się w ciągu 6–12 miesięcy.
| Parametr | Self-hosted (Jenkins) | Chmurowe (GitHub Actions) | Specjalistyczne (Bitrise) |
|---|---|---|---|
| Koszty początkowe | $1000–$5000 | $0 | $0 |
| Opłata miesięczna | $50–$200 (hosting) | $0–$500 (limit minut) | $0–$300 (subskrypcja) |
| Wsparcie macOS | Wymaga Mac mini + konfiguracja CI | Wbudowane (macOS runner) | Wbudowane |
| Administracja | 5–10 godzin/miesiąc | 1–2 godziny/miesiąc | 1–2 godziny/miesiąc |
Przy obliczaniu budżetu uwzględnij ukryte koszty: czas na aktualizację oprogramowania, usuwanie awarii, kopie zapasowe konfiguracji, przechowywanie artefaktów w sieci. Dla rozwiązań self-hosted dodaj 20–30% do podstawowego kosztu utrzymania. Dla chmurowych — upewnij się, że limit minut pokrywa szczytowe obciążenia, szczególnie przed wydaniami.
Zmniejszyć wydatki na serwer kompilacji można na kilka sposobów: używać instancji spot w chmurze (do 70% taniej), buforować zależności między kompilacjami, ograniczyć czas wykonywania nieudanych potoków i skonfigurować automatyczne wyłączanie nieaktywnych agentów self-hosted poza godzinami pracy.
Efektywna praca serwera kompilacji wymaga przestrzegania szeregu zasad. Optymalizacja szybkości kompilacji i stabilność infrastruktury bezpośrednio wpływają na produktywność zespołu programistycznego.
Gradle Build Cache, CCache dla C/C++, incremental compiler dla Kotlin i Swift — włączaj wszystkie dostępne mechanizmy buforowania. Skonfiguruj zdalną pamięć podręczną kompilacji (przez HTTP lub S3), aby różni programiści i agenci dzielili się wynikami kompilacji.
Każda kompilacja powinna być uruchamiana w czystym środowisku. Używaj kontenerów Docker lub tymczasowych maszyn wirtualnych, aby wykluczyć wpływ poprzednich kompilacji na bieżącą. Eliminuje to problem „zanieczyszczonego stanu” (state pollution).
Serwer kompilacji ma dostęp do kodów źródłowych, kluczy podpisu i sekretów. Minimalizuj powierzchnię ataku: używaj izolowanych agentów dla różnych projektów, ogranicz dostęp do master-nody, używaj signed commits i sprawdzaj zależności pod kątem podatności.
Często zadawane pytania
Dla małych zespołów optymalne są rozwiązania chmurowe: GitHub Actions (bezpłatnie do 2000 min/miesiąc) lub Bitrise dla projektów mobilnych. Nie wymagają administracji i szybko się konfigurują.
Tak, ale będzie potrzebne dwa typy agentów: na macOS dla iOS i na Linux/Windows dla Androida. Serwer CI (Jenkins, GitLab) może zarządzać oboma typami agentów z jednego interfejsu.
Dla kompilacji Android — minimum 8 GB RAM, zalecane 16 GB. Dla iOS — od 8 GB. Jeśli potok uruchamia kilka równoległych kompilacji, pamięć skaluje się liniowo: N kompilacji x 8 GB.
Self-hosted daje pełną kontrolę nad konfiguracją, nie ma limitów minut kompilacji (zwraca się przy dużych wolumenach) i zapewnia izolację danych. Rozwiązania chmurowe są korzystniejsze dla małych i średnich zespołów.
Tak, projekty Flutter również wymagają kompilacji na różne platformy. Codemagic — to specjalistyczne CI/CD dla Flutter, które obsługuje jednocześnie kompilacje Android, iOS, Web i Desktop z jednego repozytorium.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również