Python builds mit ant

  • Published on
    13-Jul-2015

  • View
    930

  • Download
    1

Embed Size (px)

Transcript

<ul><li><p>Python-Builds mit antThomas Aglassinger</p></li><li><p>Agenda Was ist ant? Grundkonzepte und allgemeine Verwendung. Konkrete Beispiele fr Python. Ausgewhlte Features von ant.</p></li><li><p>Was ist ant? Ant ist ein Build-Tool. Ursprung in der Java-Welt. Bewhrt seit 2000. Einfache Einbindung in Jenkins.</p><p> Auch fr Python-Projekte verwendbar als Ergnzung zu distutils / setup.py.</p><p> Sehr gutes Handbuch mit vielen Beispielen.</p></li><li><p>Vergleich mit anderen Build-Tools Oft kompakter als distutils / setup.py. Standard-</p><p>Aufgaben und leistungsfhige Dateimuster statt komplexe shutils-Aufrufe.</p><p> Weiter verbreitet als Scons.http://www.scons.org/</p><p> Robuster als Shell-Scripts Abbruch bei Fehlern. Deterministischeres Verhalten als Make.</p><p>http://en.wikipedia.org/wiki/Make_(software) Einfacher zu verwenden als Maven.</p><p>http://maven.apache.org/</p></li><li><p>Grundlagen zu ant Build.xml beschreibt Projekt. Projekt besteht aus Zielen (targets). Ziele fhren Aufgaben (tasks) aus und erstellen Dateien. Ziele knnen von anderen Zielen abhngig sein. Aufgaben sind i.d.R. auf mehrere Dateien anwendbar </p><p>ausgewhlt mit leistungsfhigen Dateimustern. Eigenschaften (properties) sind verwendbar als Variablen </p><p>oder Konstante. Allerdings kaum Funktionen fr String-Manipulation oder mathematische Berechnungen.</p><p> Einfache Makros zum parameterisierten Aufruf von mehreren Aufgaben.</p></li><li><p>Beispiel fr build.xml</p><p> Say hello.</p><p>Setzt Eigenschaft greeting auf Hello</p><p>Definiert Ziel build mitAbhngigkeit zu Ziel hello</p><p>Definiert Ziel hello zurAusgabe einer Begrung.</p><p>Setzt Prfix fr Zugriff auf Umgebungsvariablen.</p></li><li><p>Aufruf und Ausgabe</p><p>$ antBuildfile: /Users/someone/hello/build.xml</p><p>hello: [echo] Hello someone! How are you?</p><p>build:</p><p>BUILD SUCCESSFULTotal time: 0 seconds</p><p>Bearbeitung vonZiel hello</p><p>Bearbeitung vonZiel build</p></li><li><p>Beispiel-Ziele PEP8 Style-Prfung. Anzahl der Quellcode-Zeilen. Tests inklusive Testabdeckung. Aufrufe von setup.py.</p><p>Quelle fr vollstndiges build.xml: http://sourceforge.net/apps/trac/cutplace/browser/trunk/build.xml</p></li><li><p>PEP8 Style-Prfung Entspricht: pep8 -repeat -ignore E501 cutplace &gt;pep8.txt</p><p>Zeilen drfen mehrals 80 Zeichen haben</p><p>Lenkt Ausgabe umin Datei pep8.txt.</p></li><li><p>Anzahl der Quellcode-Zeilen </p><p>Download ber Package Manager oderhttp://www.dwheeler.com/sloccount/</p><p>Entfernt Zeilen mit .svn,um interne Kopie vonSubversion nicht mit</p><p>zu zhlen.</p></li><li><p>Tests inklusive Testabdeckung (1/2) Unter Verwendung von nose und coverage.</p><p>http://pypi.python.org/pypi/nose/http://pypi.python.org/pypi/coverage/</p><p> Ausgabe von nose im Format von JUnit. Ausgabe von coverage im Format von </p><p>Cobertura.</p></li><li><p>Tests inklusive Testabdeckung (2/2) </p><p>Keine Testabdeckung frsetup.py (Test im Rahmen</p><p> des builds) und desPerformance-Test (erfolgt</p><p>mit eigenem Ziel).</p><p>Nach fehlgeschlagenen Testsden Build fortsetzen und</p><p>Jenkins-Berichte erzeugen.</p></li><li><p>Performance-Test </p></li><li><p>Aufruf von setup.py (1/2) </p><p>Definiert Macro </p><p>Definiert Parameter command</p><p>Aufruf vonpython setup.py</p><p>bergabe von Parametercommand mit @{...}</p><p>statt ${...}. </p></li><li><p>Aufruf von setup.py (2/2) </p><p>Aufruf:$ ant bdist_egg$ sudo ant develop</p><p>Entspricht:python setup.py bdist_egg</p><p>Entspricht:python setup.py develop</p></li><li><p>Ntzliche Ant-Aufgaben , , - Dateioperationen. - Ordner anlegen (auch verschachtelt). - Download einer URL. - Suchen und Ersetzen von Texten. - Zeilenenden vereinheitlichen. - Secure remote copy. , - Dateien und Ordner komprimieren. - XML mit DTD prfen. - XSL Transformationen.</p></li><li><p>Plugins, Muster, Filter</p><p>** = alle Ordner undenthaltene Unterordner</p><p>Aufruf derimportierten</p><p>Aufgabe</p><p>Import einer externen Aufgabe</p><p>Dateien, auf dieAufgabe an zu</p><p>wenden ist.</p></li><li><p>Zusammenfassung Bewhrtes Werkzeug aus der Java-Welt. Vergleichsweise einfach und deterministisch. Viele fertige Aufgaben (Tasks). Einfache Einbindung von Python-Projekten in </p><p>Jenkins.</p><p>Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18</p></li></ul>