CI/CD ·

Met cloud-CI/CD gooi je geld door het raam

De CI/CD-cyclus: code, release, monitor, analyse, plan, verbeter

Bouw je iOS-apps en betaal je voor een cloud-CI-dienst, dan heb je je vast al eens afgevraagd: waarom geef ik hier zoveel aan uit, gewoon om builds te draaien? Bij impaktfull vroegen we ons hetzelfde af. En toen deden we er iets aan.

Het probleem met cloud-CI

Cloud-CI/CD-platformen zijn handig, maar ze brengen ook dit mee:

  • Hoge kosten, zeker voor macOS-runners: bij GitHub kost een macOS-minuut zo'n tien keer een Linux-minuut.
  • Wachtrijen: wachten op een vrije runner voor je build zelfs maar start.
  • Weinig vrijheid in de machine en haar tools.
  • Geen blijvende omgeving: elke build installeert en cachet alles opnieuw.

Dat doet het meeste pijn als je snel itereert en meerdere builds per dag pusht.

Mac mini's met self-hosted GitHub-runners

We schakelden over op self-hosted GitHub Actions-runners op Mac mini's. Het resultaat:

  • Zoveel builds per dag als we willen, zonder per minuut te betalen.
  • Geen wachtrij.
  • Een vaste, eenmalige kost voor de hardware.
  • Volledige controle over de tools en hun versies.

In ruil onderhoud je de machines zelf: stroom, updates van macOS en Xcode, en af en toe een herstart. En gebruik self-hosted runners alleen voor private repositories: GitHub raadt ze af voor publieke, omdat iedereen dan via een pull request code op je machine kan laten draaien.

Het enige struikelblok: elke machine met de hand opzetten was traag, foutgevoelig en saai.

Daarom bouwden we impaktfull_cli

Om die opzet te automatiseren en elke machine gelijk te maken, bouwden we impaktfull_cli: een CLI die een lege Mac klaarmaakt voor CI. Installeer hem:

curl -fsSL https://cli.impaktfull.com/install.sh | bash

Voer daarna één commando uit:

impaktfull_cli ci_cd setup

Dat commando:

  • installeert en configureert Homebrew, CocoaPods, FVM en Flutter;
  • installeert Java, lcov, Rosetta en sentry-cli, en wijst Flutter de juiste JDK aan;
  • zet een werkende Zsh-omgeving op met autosuggesties;
  • helpt je Xcode te selecteren;
  • maakt een SSH-sleutel aan en zegt waar je hem op GitHub toevoegt;
  • installeert de GitHub Actions-runner en registreert de machine als self-hosted runner.
De uitvoer van impaktfull_cli ci_cd setup in een terminal, elke stap als afgerond gemarkeerd
impaktfull_cli ci_cd setup op een nieuwe Mac mini

Transparant, stap voor stap

Je voert één commando uit, maar de CLI logt elke stap: wat hij installeert, welke configuratiebestanden hij aanpast, en hoe hij paden en omgevingsvariabelen instelt. Jij houdt de controle; hij doet het saaie werk.

Waarom het voor ons werkt

  • Geen kost per buildminuut: de machines zijn één keer betaald.
  • Zoveel runners als we nodig hebben, zonder licenties per runner.
  • Vrijheid om de CI-omgeving precies op te zetten zoals onze projecten het nodig hebben.
  • Elke machine gelijk, dus een build die op de ene werkt, werkt op allemaal.

Staat Xcode erop, dan is een nieuwe Mac mini in ongeveer vijf minuten klaar. Meer over waarom we onze eigen CLI's bouwen.

Probeer het

Gebruik je GitHub Actions en wil je lagere CI-kosten? Begin op GitHub, op pub.dev of in de documentatie. En laat je het liever voor je opzetten: we zetten builds en releases zo op voor elke app die we maken.

Alle blogs