Continuous Integration mit dem
Transcription
Continuous Integration mit dem
Continuous Integration mit dem Embedded Computing Conference 31. Mai 2016, © Markus Kappeler Continuous Integration mit Yocto Project Agenda ● Was ist Continuous Integration ● Was ist das yocto Project ● Continuous Integration & Yocto ● Yocto: CI vs. One shot ● Zusammenfassung Continous Integration ● Wer macht CI? ● Was ist das Gegenteil von CI? ● Was ist CI? Continous Integration Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early. CI: One Repository ● ● ● Nutzung von Software Version Managament Tool: git, svn Alles in einem Repository ● Source Code ● IDE Setup / Compiler settings ● Resourcen: Bilder, Audio, etc. Ein Branch ● ● Branches nur für Maintenance von alten Versionen Alle Entwickler commiten Änderungen laufend CI: Automate Build ● ● Alles mit einem Script ● Von Unix / Linux kennt man make / automake ● Java Entwickler kennen ant oder maven ● Qt Entwickler kennen qmake ● .NET kennt MS Build Jeder kann build starten und bekommt Resultat ● ● Kein Build-Master Auch DB-Entities müssen erzeugt werden ● SQL create table, etc. CI: Self testing ● Unit Test ● Komplexere Klassen mit Unit Test ● Junit, cppunit, gtest, ptest ● TestCase ideal von anderer Person ● Test Driven Design als Inspiration ● ● Write test before code Integration and AcceptanceTest ● Tool-Support: FitNesse, sahi (web apps) CI: every commit builds ● Build auf Integration-Server ● ● ● ● Abbild vom Zustand des Repositories Ideal wenn jeder einzelne Commit zu einem Build führt und start von Test-Cases Einsatz von Tools: ● Jenkins, Hudson ● Travis ● Bamboo Nightly Build ist nicht gut genug ● Zuviele Änderungen ● Aufwändige suche nach der Ursache bei broken build CI: fix broken build ● Sofort ● Keep it green ● CI baut auf einem sauberen Build auf. ● Geht es zu lange, revert letzten commit ● Entwickler muss zuerst lokal bauen, vor commit. CI: keep build fast ● Faustregel: build sollte unter 10 Minuten sein ● Spare nicht bei CPU-Speed, RAM, SSD ● Benutze ccache und parallel builds ● Analysiere build periodisch, wenn er mehr als 10 Minuten geht ● Neue / anderer compiler ● Neue / andere Tools ● Schnellere HW yocto ● ● ● The yocto project is not a embedded linux distribution – It creates a custom one for you! Das yocto Projekt ist nicht ein einzelnes open source Projekt – es ist ein Ecosystem. yocto ist eine Kombination von ready to run LinuxDistro mit der Flexibilität eines custom Linux-OS. Was ist das yocto project ● Opensource Projekt mit aktiver Community ● Ein Sammlung von embedded Projekten und Tools: ● ● Board Support Packages ● Application Development Tools (Eclipse Plugins) Referenz Distro Poky ● ● Kompletes Build-System basierend auf bitbake Release alle 6 Monate (April und Oktober) mit aktuellem Kernel LTS, Toolchain und Package Versionen. It's not an embedded Linux distribution, It creates a custom one for you. yocto build process source yocto project yocto Layers Layers beinhalten Rezepte ● Layers können bestehende Rezepte erweitern, ändern ● Layers nach Funktionen gruppieren ● Developer Specific Commercial UI-Specific Hardware Specific BSP yocto Layer (meta-yocto) Open embedded core Layer (meta) CI & Yocto: One repository ● ● Min. 4 Repositories (meist noch mehr) ● Yocto Project ● Openembedded ● BSP Layer ● Eigentliche Applikation in separaten layer git submodule um Stand zusammen zu halten CI & Yocto: Automate build ● ● ● Yocto und bitbake Ganze Images oder auch nur einzelne Packages Autobuilder ist buildbot von Yocto CI & Yocto: Automate build ● Toaster Web-Interface zu Yocto Project ● Jeder kann build ausführen ● Demo CI & Yocto: Self testing ● Yocto hat build in Test-Framework ● ● Ptest Framework in phyton Architecture spezifische Test ● qemu ● Direkt auf target via ssh und/oder serial console CI & Yocto: every commit builds ● Yocto lässt sich mit CI-Tool kombinieren ● ● Jenkins Hängt von Repository Setup ab ● Erfahrung nicht zwingend CI & Yocto: fix broken builds ● Sofort ● Keep it green ● Kent Beck: „Es gibt kein wichtigeren Task, als build zu fixen!“ CI & Yocto: keep build fast ● Yocto hat built-in build cache ● Share downloads folder ● ● ● Wurde ein Package schon downloaded, profitieren die nächsten Share sstate ● Wird nicht alles von scratch gebaut ● Bis zu 80% Zeit Einsparung Mirror sstate und download Yocto: CI vs. One shot Ausgangslage: ● ● Yocto beinhaltet auch Toolchain, BSP Zu Beginn wird Toolchain, Libraries (z.B Qt Version), Kernel (BSP) für das Projekt definiert. ● Yocto hat fixen Release Zyklus von 6 Monaten ● Geplante Einführung von Projekt in 18 Monate Soll man bei Projekt-Start Stand einmal Yocto-Version festlegen oder fortlaufend aktuell halten? Yocto: One shot ● Bei Projekt Start werden Versionen festgelegt. ● Grosse Anzahl mit der man sich vertraut macht ● Was muss man selber implementieren ● Folgt open source Yocto: One shot April - Sep. Okt – März April - Sept. Okt. - März Yocto 2.x Applikation ● ● ● Kann eigenen Design nicht an neue Features anpassen. Erweiterungen an open source Packages müssen backported werden. Vielleicht wurden Bugs bereits von Community gefixed.... Yocto: One shot April - Sep. Okt – März April - Sept. Okt. - März Yocto 2.x Applikation ● ● ● Beim Release Datum ist Infra bereits +18 Monate, vielfach schon 2 jährig. Beim Release Datum ist bereits End of Life von dieser Yocto Version erreicht. Was tun bei neuem Feature? ● Update Toolchain, Kernel, Libraries ● Aufwand? Je nach Komplexität 3-6 Monate Yocto: CI approach April - Sep. Yocto 2.x Okt – März Yocto 2.x April - Sept. Okt. - März Yocto 2.x EoL Yocto 2.x+1 Yocto 2.x+2 Yocto 2.x+3 Applikation ● Aktuell bleiben ● Beeinflussung der Community. ● Feature Request stellen und Requirements besprechen. ● ● Kann eigenen Design anpassen an neue Features aus Libraries / Toolchains Braucht zusätzliche Resourcen Yocto: CI vs. One shot ● ● Für grösserer Projekte lohnt sich CI ● Follow master ● Aktiv bugtracking ● Up to date Toolchain, BSB den Silicon Hersteller folgen ● ● Kernel LTS Generell: follow Yocto stable version ● Alle 6 Monate alles updaten Zusammenfassung ● ● ● CI mehr als nur Tool installieren Yocto bietet viel Infrastruktur, welche CI erlauben Aktuell bleiben auch bei Toolchain, BSB Weitere Infos ● Website: https://www.yoctoproject.org/ ● Wiki: https://wiki.yoctoproject.org/wiki/Main_Page ● Quick Start: https://www.yoctoproject.org/docs/current/yoctoproject-qs/yocto-project-qs.html ● Git: http://git.yoctoproject.org ● Yocto Test-Suite: Vielen Dank an - yocto project: https://www.yoctoproject.org [email protected] http://www.bytesatwork.ch