Med ett växande mobilt team och veckovisa releaser är det viktigt att ha en pålitlig CI-pipeline. Vi måste kunna bygga och testa våra appar och distribuera dem till App Store och Google Play Store. Vi underhåller också interna förhandsversioner för att testa de senaste funktionerna.
Lär dig hur vi använder ClickUp, Fastlane och GitHub Actions för att automatisera vår kontinuerliga integration (CI) och kontinuerliga leverans (CD).
Livet för en bugg 🐜
Låt oss börja med att snabbt gå igenom vår process för hantering och åtgärdande av buggar.
- En bugg (eller funktionsförfrågan) rapporteras och en uppgift skapas i ClickUp.
- Uppgiften tilldelas en utvecklare och fixeras i en PR mot staging-grenen.
- CI kör alla tester, bygger appen, distribuerar en webbförhandsvisning och laddar upp allt till ClickUp-uppgiften.
- Vårt QA-team verifierar korrigeringen och om den är godkänd markeras uppgiften som klar.
- PR slås automatiskt samman med staging.
- Staging-grenen byggs och distribueras till vårt interna TestFlight.
- Varje onsdag skapas, byggs och testas en release-gren.
- På fredagar skapar vi en release på GitHub och CI distribuerar releasen till App Store och Play Store.
En ClickUp-uppgift innehåller all information om felet. Vi använder anpassade statusar som Pågående eller Kodgranskning för att hålla reda på felet. CI-arbetsflödena ändrar statusen automatiskt. Anpassade fält innehåller ytterligare information som vem som rapporterade felet, vem som arbetar med det, när det kommer att släppas osv.
PR-arbetsflöde 📜
De två första stegen som beskrivs ovan är inte direkt relaterade till CI, men det tredje är intressant...
Vårt utvecklingsarbetsflöde körs för alla PR. Det kontrollerar lints, formatering och kör alla tester innan det börjar bygga Android- och iOS-artefakter.
När en build är lyckad publicerar CI ett meddelande i den länkade uppgiften. QA-ingenjörer kan gå till PR, ladda ner build-artefakterna eller använda webbförhandsvisningen.

Ett automatiserat CI-meddelande publicerat i den länkade ClickUp-uppgiften efter en lyckad byggnation.
Konfigurera Flutter på CI-runner 🛠
Vi använder den välkända GitHub-åtgärden subosito/flutter-action för att konfigurera Flutter på CI. Som standard installeras den senaste stabila versionen av Flutter. För att undvika att dina CI-arbetsflöden störs när en ny version av Flutter släpps bör du ange versionen manuellt.
Om du har flera arbetsflöden är det bättre att lagra flutter-versionen i en fil. Vi använder FLUTTER_VERSION i roten av arkivet.
En annan enkel lösning är att lagra Flutter-versionen som GitHub-hemlighet och komma åt den med {{ secrets. FLUTER_VERSION }}.
Webbförhandsgranskning 🕸
Tack vare Flutters förmåga att köras på webben kan vi skapa en fullt fungerande webbförhandsgranskning av pull-förfrågningar. Med hjälp av device_preview-paketet kan enhetens storlek och inställningar justeras.
Förhandsvisningen har visat sig vara mycket användbar och används inte bara av vårt QA-team. Även designers och produktchefer uppskattar den för att snabbt kunna iterera nya funktioner.

via Flutter
Hur man skapar en webbförhandsgranskning 🐶
För att komma igång, se till att din app är kompatibel med Flutter web – alla API:er stöds inte.
I vår app behövde vi till exempel inaktivera push-meddelanden och webb-socklar.
Det här exempelarbetsflödet skapar en webbförhandsgranskning av din Flutter-app och laddar upp den till en S3-bucket. Vi använder en ENABLE_DEVICE_PREVIEW-miljövariabel för att inaktivera device_preview i produktion.
Steget Fix base href behövs eftersom förhandsgranskningen inte kommer att finnas i rotkatalogen för bucketen.
Och lite kod för att villkorligt aktivera device_preview.
Miljövariabler är ett kraftfullt verktyg som gör det möjligt för Flutters trädskakningsalgoritm att ta bort felsökningskod för release-builds.
Fastlane 💨
Fastlane förenklar avsevärt skapandet, signeringen och distributionen av Flutter-appar. Det hanterar våra certifikat, provisioneringsprofiler och andra inställningar. Vi använder GitHub-hemligheter för att lagra lösenord och tokens på ett säkert sätt.
Användbara Fastlane-åtgärder:
- fastlane match för att skapa och lagra iOS-nycklar och profiler i ett GitHub-arkiv
- build_app för att bygga iOS- och Android-appar
- upload_to_testflight och leverera för att distribuera iOS-byggnader
- upload_to_play_store för att distribuera Android-byggnader
Exempel på iOS-utvecklingsversion 🍏
Glöm inte setup_ci, det kommer att rädda dig från konstiga fel 👾. Läs mer om Fastlane för Flutter-appar.
Android-signering 🔒
Det enklaste sättet att signera Android-releasebuilder på ett säkert sätt är att lagra token som GitHub-hemligheter och använda miljövariabler och en tillfällig nyckel. jks skapade av CI:
Vi lagrar nyckeln jks som en base64-kodad sträng i Github Secrets och avkodar den i arbetsflödet:
Release- och produktionsarbetsflöde 🚀
Arbetsflödet före release körs för grenar som börjar med release/v. Det tar bort all felsökning och intern kod för att säkerställa att vi testar samma kod som kommer att släppas.
Dessutom publiceras arbetsflödet före lanseringen på olika Slack-kanaler för att meddela QA- och marknadsföringsteamen om en ny lansering med hjälp av inkommande webhooks.
När allt har testats noggrant skapar vi en release på GitHub som aktiverar produktionsarbetsflödet. Den bygger och signerar appen med produktionscertifikat och skickar den till App Store.
Fler tips för din CI 🦾
Om du använder push-triggern för GitHub Actions kommer du sannolikt att stöta på problem om det sker flera pushar till samma gren i snabb följd. Fler än en instans av arbetsflödet kommer att starta och ta upp byggminuter eller orsaka andra problem.
- Vi rekommenderar att du använder åtgärden Avbryt arbetsflöde för att avbryta alla tidigare instanser av arbetsflödet.
- Om du letar efter en enkel och underhållsvänlig lösning för att generera sekventiella byggnummer, prova Build Number Generator. Du kan också använda GITHUB_RUN_ID, men det kan inte anpassas.
- Kolla in ClickUp GitHub-appen för att se grenar, commit och GitHub-status direkt i dina ClickUp-uppgifter. Använd ClickUp Automations eller ClickUps offentliga API för avancerade automatiseringar.
Sammanfattning 🍩
Att bygga upp din CI är en rolig process. Det är enkelt att komma igång och du kan utveckla den efter hand. Vår CI följer en av ClickUps kärnvärden: Progress towards perfection (Framsteg mot perfektion). Vi arbetar ständigt med att förbättra CI för våra QA- och teknikteam.
Kombinationen av ClickUp, GitHub Actions och Fastlane är mycket kraftfull och gör det möjligt att bygga en flexibel och helt automatiserad CI/CD-pipeline på mindre än en timme. Prova själv!
Vi har många spännande ämnen på gång, så fortsätt att kolla in ClickUps teknikblogg! 🦄

