Abläufe mit phing automatisieren

                                von

                      Christian Münch




1   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Für was braucht man Build-Systeme?



    Kompilieren von Quellcode (im PHP Umfeld eher weniger anzutreffen)
    Linken einer ausführbaren Datei (im PHP Umfeld ebenfalls weniger anzutreffen)
    Vorbereiten eines (idealerweise plattformunabhängigen) Rollouts
    Automatische Erstellung von Dokumentationen
    Erstellen von Distributionen
    ...




2          netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Build Systeme auf dem Markt




3   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
phing




    PHing Is Not GNU make; it's a project build system
    based on Apache Ant. You can do anything with it that
    you could do with a traditional build system like GNU
    make, and its use of simple XML build files and
    extensible PHP "task" classes make it an easy-to-use
    and highly flexible build framework.




4         netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Installation



    $> pear channel-discover pear.phing.info
    $> pear install phing/phing


    Voilá




5           netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Aufruf über Kommandozeile




6   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Auflisten der vorhandenen Targets




7   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Begrifflichkeiten

    Projekt
         Meta-Informationen
         Standard Target
    Target
         Sammlung von Projektkomponenten z.B. Tasks
         Regelt Abhängigkeiten zwischen Targets
    Task
         PHP Code der eine bestimmte Aufgabe ausführt
    Type
         Datentyp z.B. FileList, FileSet oder eine DB-Verbindung
    Mapper


    Filter
         Verändern z.B. Inhalte von Dateien
    Parser
    Property


8             netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Einfache phing Datei




9   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
BuildIn Tasks


     AdhocTaskdefTask                              IfTask
                                                   ImportTask
     AdhocTypedefTask
                                                   IncludePathTask
     AppendTask                                    InputTask
     AvailableTask                                 MkdirTask

     ChmodTask                                     MoveTask
                                                   PhingTask
     ChownTask
                                                   PhingCallTask
     ConditionTask                                 PhpEvalTask
     CopyTask                                      PropertyTask
                                                   PropertyPromptTask
     CvsTask
                                                   ReflexiveTask
     CvsPassTask
                                                   ResolvePathTask
     DeleteTask                                    TaskdefTask
     EchoTask                                      TouchTask
                                                   TstampTask
     ExecTask
                                                   TypedefTask
     ExitTask
                                                   UpToDateTask
     ForeachTask                                   XsltTask



10          netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Optionale Tasks


     DbDeployTask                                      PhpCpdTask
                                                       PhpDocumentorTask
     CoverageMergerTask
                                                       PhpDocumentorExternalTask
     CoverageReportTask
                                                       PhpLintTask
     CoverageSetupTask
                                                       PHPUnitTask
     ExportPropertiesTask                              PHPUnitReport
     FileHashTask                                      ScpTask

     FileSizeTask                                      SimpleTestTask
                                                       SvnCheckoutTask
     FtpDeployTask
                                                       SvnCommitTask
     IoncubeEncoderTask
                                                       SvnExportTask
     IoncubeLicenseTask
                                                       SvnLastRevisionTask
     JslLintTask                                       SvnUpdateTask
     JsMinTask                                         TarTask
     PDOSQLExecTask                                    UntarTask

     PearPackageTask                                   UnzipTask
                                                       VersionTask
     PearPackage2Task
                                                       XmlLintTask
     PharPackageTask
                                                       XmlPropertyTask
     PhkPackageTask                                    ZendCodeAnalyzerTask
     PhpCodeSnifferTask                                ZipTask



11               netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Property Dateien




     Orientiert sich an Java Property Dateien
     Einfache Struktur
     Ant-Kompatibel
     Verwendung von System Properties ist möglich
     Abarbeitung erfolgt „von Oben nach Unten“




12         netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
BuildIn Properties


     application.startdir / Aktuelles Arbeitsverzeichnis
     host.arch / Architektur des Systems – Nicht unter Windows
     host.domain DNS Domäne – Nicht unter windows
     host.fstype / Dateisystem – Werte können sein UNIX, WINNT and WIN32
     host.name / Name des Rechners
     host.os.release / Kernelversion – Nicht unter Windows
     host.os.version / Langer Betriebssystemname – Nicht unter Windows
     line.separator / Zeilenumbruchzeichen
     php.classpath / Die Umgebungsvariable PHP_CLASSPATH
     php.version / Version des PHP Interpreters
     phing.buildfile / Voller Pfad zur aktuellen Build-Datei
     phing.id / Prozess-ID der aktuellen Phing Instanz
     phing.version / Phing Version
     project.name / Projektname
     project.basedir / Basisverzeichnis des aktuellen Projekts
     project.description / Beschreibung des aktuellen Projekts (sofern vorhanden)
     user.home / Der Wert der Umgebungsvariablen HOME.



13             netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Einbinden der Property Datei




     Das Element „property“ kann innerhalb von „project“ und innerhalb von „target“
     augerufen werden.
     Ein mehrfaches Aufrufen einer Property-Datei ist möglich




14         netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Auslagern von Targets




     Gerade bei komplexen Build-Scripten bietet es sich an die diese auszulagern
     und mittels des ImportTask in die build.xml Datei zu importieren.

15                netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Timestamp Task




16   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Mapper




17   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Regex Mapper




18   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Eigene Tasks erstellen

     Drei Möglichkeiten:


         Task innerhalb von PEAR/phing bereitstellen




         AdHoc Tasks
         Task-Klassen innerhalb des eigenen Projekts




19               netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Adhoc Task




20   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Eigene Task Klasse im Projekt




21   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Filter



                                             Können auf Sets von Dateien
                                             angewandt werden.
                                             Nützlich zum entferenen von
                                             Entwicklungsinformationen vor der
                                             Auslieferung an den Kunden
                                             Mögliche Einsatzgebietet: Packen
                                             von JavaScript und CSS, Entfernen
                                             von Kommentaren usw.




22   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Abfragen / Conditions




23   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Typen



                                             „Typen“ sind eher „Objekte“
                                             Werden durch eine Schachtelung
                                             von XML Elementen definiert
                                             Typen werden immer an einen Task
                                             übergeben.




24   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Referenzieren von Typen




25   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Beispiel Task mit FileList Unterstützung




26   netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
Danke




                                    Danke!
                             Und jetzt eine Erfrischung



     Weiterführende Informationen
        http://phing.info - Die Phing Projektseite
        http://phing.tigris.org/files/documents/995/8019/PhingGuide_en.pdf


     Twitter: twitter.com/cmuench

27               netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de

Abläufe mit Phing automatisieren

  • 1.
    Abläufe mit phingautomatisieren von Christian Münch 1 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 2.
    Für was brauchtman Build-Systeme? Kompilieren von Quellcode (im PHP Umfeld eher weniger anzutreffen) Linken einer ausführbaren Datei (im PHP Umfeld ebenfalls weniger anzutreffen) Vorbereiten eines (idealerweise plattformunabhängigen) Rollouts Automatische Erstellung von Dokumentationen Erstellen von Distributionen ... 2 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 3.
    Build Systeme aufdem Markt 3 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 4.
    phing PHing Is Not GNU make; it's a project build system based on Apache Ant. You can do anything with it that you could do with a traditional build system like GNU make, and its use of simple XML build files and extensible PHP "task" classes make it an easy-to-use and highly flexible build framework. 4 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 5.
    Installation $> pear channel-discover pear.phing.info $> pear install phing/phing Voilá 5 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 6.
    Aufruf über Kommandozeile 6 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 7.
    Auflisten der vorhandenenTargets 7 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 8.
    Begrifflichkeiten Projekt Meta-Informationen Standard Target Target Sammlung von Projektkomponenten z.B. Tasks Regelt Abhängigkeiten zwischen Targets Task PHP Code der eine bestimmte Aufgabe ausführt Type Datentyp z.B. FileList, FileSet oder eine DB-Verbindung Mapper Filter Verändern z.B. Inhalte von Dateien Parser Property 8 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 9.
    Einfache phing Datei 9 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 10.
    BuildIn Tasks AdhocTaskdefTask IfTask ImportTask AdhocTypedefTask IncludePathTask AppendTask InputTask AvailableTask MkdirTask ChmodTask MoveTask PhingTask ChownTask PhingCallTask ConditionTask PhpEvalTask CopyTask PropertyTask PropertyPromptTask CvsTask ReflexiveTask CvsPassTask ResolvePathTask DeleteTask TaskdefTask EchoTask TouchTask TstampTask ExecTask TypedefTask ExitTask UpToDateTask ForeachTask XsltTask 10 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 11.
    Optionale Tasks DbDeployTask PhpCpdTask PhpDocumentorTask CoverageMergerTask PhpDocumentorExternalTask CoverageReportTask PhpLintTask CoverageSetupTask PHPUnitTask ExportPropertiesTask PHPUnitReport FileHashTask ScpTask FileSizeTask SimpleTestTask SvnCheckoutTask FtpDeployTask SvnCommitTask IoncubeEncoderTask SvnExportTask IoncubeLicenseTask SvnLastRevisionTask JslLintTask SvnUpdateTask JsMinTask TarTask PDOSQLExecTask UntarTask PearPackageTask UnzipTask VersionTask PearPackage2Task XmlLintTask PharPackageTask XmlPropertyTask PhkPackageTask ZendCodeAnalyzerTask PhpCodeSnifferTask ZipTask 11 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 12.
    Property Dateien Orientiert sich an Java Property Dateien Einfache Struktur Ant-Kompatibel Verwendung von System Properties ist möglich Abarbeitung erfolgt „von Oben nach Unten“ 12 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 13.
    BuildIn Properties application.startdir / Aktuelles Arbeitsverzeichnis host.arch / Architektur des Systems – Nicht unter Windows host.domain DNS Domäne – Nicht unter windows host.fstype / Dateisystem – Werte können sein UNIX, WINNT and WIN32 host.name / Name des Rechners host.os.release / Kernelversion – Nicht unter Windows host.os.version / Langer Betriebssystemname – Nicht unter Windows line.separator / Zeilenumbruchzeichen php.classpath / Die Umgebungsvariable PHP_CLASSPATH php.version / Version des PHP Interpreters phing.buildfile / Voller Pfad zur aktuellen Build-Datei phing.id / Prozess-ID der aktuellen Phing Instanz phing.version / Phing Version project.name / Projektname project.basedir / Basisverzeichnis des aktuellen Projekts project.description / Beschreibung des aktuellen Projekts (sofern vorhanden) user.home / Der Wert der Umgebungsvariablen HOME. 13 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 14.
    Einbinden der PropertyDatei Das Element „property“ kann innerhalb von „project“ und innerhalb von „target“ augerufen werden. Ein mehrfaches Aufrufen einer Property-Datei ist möglich 14 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 15.
    Auslagern von Targets Gerade bei komplexen Build-Scripten bietet es sich an die diese auszulagern und mittels des ImportTask in die build.xml Datei zu importieren. 15 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 16.
    Timestamp Task 16 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 17.
    Mapper 17 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 18.
    Regex Mapper 18 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 19.
    Eigene Tasks erstellen Drei Möglichkeiten: Task innerhalb von PEAR/phing bereitstellen AdHoc Tasks Task-Klassen innerhalb des eigenen Projekts 19 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 20.
    Adhoc Task 20 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 21.
    Eigene Task Klasseim Projekt 21 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 22.
    Filter Können auf Sets von Dateien angewandt werden. Nützlich zum entferenen von Entwicklungsinformationen vor der Auslieferung an den Kunden Mögliche Einsatzgebietet: Packen von JavaScript und CSS, Entfernen von Kommentaren usw. 22 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 23.
    Abfragen / Conditions 23 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 24.
    Typen „Typen“ sind eher „Objekte“ Werden durch eine Schachtelung von XML Elementen definiert Typen werden immer an einen Task übergeben. 24 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 25.
    Referenzieren von Typen 25 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 26.
    Beispiel Task mitFileList Unterstützung 26 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de
  • 27.
    Danke Danke! Und jetzt eine Erfrischung Weiterführende Informationen http://phing.info - Die Phing Projektseite http://phing.tigris.org/files/documents/995/8019/PhingGuide_en.pdf Twitter: twitter.com/cmuench 27 netz98 new media GmbH · Haifa-Allee 2 · 55128 Mainz · info@netz98.de · www.netz98.de