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