Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CI
AMPEL
T H O M A S K O C H - @ T O M Y _ K O C H
P Y C O L O G N E - A U G U S T 2 0 1 5
WTF
CI = CONTINOUS INTEGRATION
• Continous Integration
– umfasst die automatisierte,regelmäßige Erstellung von Builds sowieAus...
JENKINS CI
Q: https://maestrano.com/apps/1-jenkins
RELATED WORK
• Build-Ampel
– Arduino, RSS-Feed, Build-Ampel (USB-device – 99 EUR)
– http://www.agile-hardware.de/tag/ampel...
RELATED WORK
• Raspberry Pi Internet Monitor
– Steuerung Industrie-Signallampe über Raspi
– http://www.instructables.com/i...
ZUTATEN
• Raspberry Pi (Modell B 512MB RAM) http://www.raspberrypi.org
• SD Card 8GB für Raspian https://www.raspbian.org
...
RASPBERRY PI
GPIO
SOFTWARE
<100 LOC
• CI-checker.py
– Polling des Jenkins-Servers via Jenkins-API
– verwendet Python-Wrapper http://python-j...
SOFTWARE
CI-CHECKER.PY
class CIChecker(object):
def __init__(self, url=JENK_URL, user=JENK_USER, token=JENK_TOKEN, verbose...
SOFTWARE
LIGHT.PY
import RPi.GPIO as GPIO
PIN_GREEN = 27
PIN_RED = 22
class Light(object):
def __init__(self, pingreen=PIN...
SOFTWARE
CONTROLLER.PY
from cichecker import CIChecker
from light import Light
import time
class LightController(object):
...
NEXT
• Vom Prototyp zum „Produkt“
– Aufbau auf Platine
– Gehäuse
– 24/7 Betrieb
Upcoming SlideShare
Loading in …5
×

CI-Ampel für Jenkins mit RaspberryPi und Python

2,284 views

Published on

Bau eine CI-Ampel für den Jenkins CI-Server mit Python und Raspberry PI in weniger als 100 Zeilen Code.
Präsentation bei der PyCologne User Group

Published in: Software
  • Be the first to comment

CI-Ampel für Jenkins mit RaspberryPi und Python

  1. 1. CI AMPEL T H O M A S K O C H - @ T O M Y _ K O C H P Y C O L O G N E - A U G U S T 2 0 1 5
  2. 2. WTF
  3. 3. CI = CONTINOUS INTEGRATION • Continous Integration – umfasst die automatisierte,regelmäßige Erstellung von Builds sowieAusführung von Tests • Vorgang wird automatisch ausgelöst durch Einchecken in dieVersionsverwaltung (SVN, git etc.) – Ziel ist Qualitätssicherung bei der Software-Entwicklung • Integrations-Probleme werden laufend entdeckt und (möglichst zeitnah) behoben • frühzeitigeWarnungen bei Fehlern (z.B. in Unittests) • Tools: CI-Server – z.B. Jenkins (Java) https://jenkins-ci.org – oder buildbot (Python)
  4. 4. JENKINS CI Q: https://maestrano.com/apps/1-jenkins
  5. 5. RELATED WORK • Build-Ampel – Arduino, RSS-Feed, Build-Ampel (USB-device – 99 EUR) – http://www.agile-hardware.de/tag/ampel/ • Using a Raspberry PI to control an extreme feedback device – Verwendet Cleware USB traffic light • http://www.cleware-shop.de/ (ca. 50 EUR) – Shell-script auf Basis curl und awk • Sowie Clewarecontrol https://blog.codecentric.de/en/2013/07/using-a-raspberry-pi-to-control-an-extreme-feedback-devices/
  6. 6. RELATED WORK • Raspberry Pi Internet Monitor – Steuerung Industrie-Signallampe über Raspi – http://www.instructables.com/id/Raspberry-Pi-Internet-Monitor
  7. 7. ZUTATEN • Raspberry Pi (Modell B 512MB RAM) http://www.raspberrypi.org • SD Card 8GB für Raspian https://www.raspbian.org • Netzteil (5v Micro USB), USB keyboard • Rot Grün LED IndustrialTower Signalleuchte (24v) - www.ebay.de • Netzteil (24v) • Netzwerklabel (oder Wireless 802.11b/g/n USB Adapter) • 2Widerstände 180 Ohm • 1 Optokoppler LTV847 • breakout board,Steckkabel • ca. 100 EUR insgesamt
  8. 8. RASPBERRY PI GPIO
  9. 9. SOFTWARE <100 LOC • CI-checker.py – Polling des Jenkins-Servers via Jenkins-API – verwendet Python-Wrapper http://python-jenkins.readthedocs.org $ pip install python-jenkins • Light.py • Steuerung der Ampel via GPIO Pins und Optokoppler-Schaltung • verwendet GPIO Python Wrapper RPi.GPIO https://pypi.python.org/pypi/RPi.GPIO • Controller.py • Integriert checker und light • Einfacher check-control-sleep Zyklus
  10. 10. SOFTWARE CI-CHECKER.PY class CIChecker(object): def __init__(self, url=JENK_URL, user=JENK_USER, token=JENK_TOKEN, verbose=False): self.jenkins = jenkins.Jenkins(url, user, token) self.verbose = verbose def log(self, msg): if self.verbose: print(msg) def check(self): """check all jobs and return True if all is 'green' False otherwise """ jobs = self.jenkins.get_jobs() self.log("checking %d jobs" % len(jobs)) i = 0 checked = True for (num, job) in enumerate(jobs): name = job['name'] color = job['color'] status = (color == 'blue') self.log("%d: '%s' - job '%s'" % (num, "OK" if status else "--", name)) if not status: checked = False break self.log("checked all jobs - result is '%s'" % ("OK" if checked else "Failed")) return checked
  11. 11. SOFTWARE LIGHT.PY import RPi.GPIO as GPIO PIN_GREEN = 27 PIN_RED = 22 class Light(object): def __init__(self, pingreen=PIN_GREEN,pinred=PIN_RED): self.pingreen = pingreen self.pinred = pinred GPIO.setmode(GPIO.BCM) GPIO.setup([pinred,pingreen], GPIO.OUT) def __del__(self): GPIO.cleanup() def red(self): GPIO.output(self.pingreen, GPIO.LOW) GPIO.output(self.pinred, GPIO.HIGH) def green(self): GPIO.output(self.pinred, GPIO.LOW) GPIO.output(self.pingreen, GPIO.HIGH) def off(self): GPIO.output(self.pinred, GPIO.LOW) GPIO.output(self.pingreen, GPIO.LOW)
  12. 12. SOFTWARE CONTROLLER.PY from cichecker import CIChecker from light import Light import time class LightController(object): def __init__(self, delay=60, verbose=False): self.checker = CIChecker(verbose=verbose) self.light = Light(verbose=verbose) self.delay = delay def wakeup(self): if self.checker.check(): self.light.green() else: self.light.red() def sleep(self): time.sleep(self.delay) def loop(self): while True: self.wakeup() self.sleep() if __name__ == "__main__": controller = LightController(verbose=True) controller.loop()
  13. 13. NEXT • Vom Prototyp zum „Produkt“ – Aufbau auf Platine – Gehäuse – 24/7 Betrieb

×