taming the deployment beast

24
Deployment Beast DallasPHP - Dallas, TX 08.11.2009 the Taming Monday, August 17, 2009

Post on 19-Sep-2014

9 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Taming the Deployment Beast

Deployment Beast

DallasPHP - Dallas, TX08.11.2009

the

Taming

Monday, August 17, 2009

Page 2: Taming the Deployment Beast

20090716-01

What is Deployment?

HERE THERE

The fun part is what happens in between...

- technology- configuration- coordination- an increase in sanity

Monday, August 17, 2009

Page 3: Taming the Deployment Beast

20090716-02

What’s included in Deployment?- code testing- building documentation- checking permissions- check coding standards- updates/uninstall of components- notifications

Monday, August 17, 2009

Page 4: Taming the Deployment Beast

20090716-02

Thinking EnvironmentallyDevelopmentEnvironment for application development (includes version control, unit testing, lint checks)

Quality Assurance/TestingEnvironment for testing applications and ensuring all is functioning well

StagingEnvironment immediately prior to deployment to production, checkout of current files marked for "production"

ProductionEnvironment for public consumption

Monday, August 17, 2009

Page 5: Taming the Deployment Beast

20090716-04

Don’t Forget the TestingIntegrationUnit/other tests designed to identify potential errors with the communication between pieces of functionality

Acceptance/SystemRun "in browser" to validate functionality of the applications

CompatibilityEnsuring that the software will work with all platforms involved

PerformanceChecking performance of the application on all sides

SecurityVerifying that no security issues exist in the code for any stage in the process

Monday, August 17, 2009

Page 6: Taming the Deployment Beast

20090716-03

Version Control Makes it SimpleCVSVersion control system, each file has its own version number, uses tags and pseudo branches for code separation

SubversionVersion control system, repository has overall version number, uses tags/branches for code separation

GitVersion control system, each checkout is a full repository in its own right, allows for offline commits, updates/merges once connected

Monday, August 17, 2009

Page 7: Taming the Deployment Beast

20090716-05

Build it OutPhingPHP-based build tool, automates the build process for a site to be deployed. XML-based build file for simple management (PHP)

AntApache's build tool, designed for flexibility for multiple deployment types. XML-based configuration files (Java)

CapistranoTool for automation of tasks on multiple servers (as opposed to just a local build). Allows for rollbacks. (Ruby)

Monday, August 17, 2009

Page 8: Taming the Deployment Beast

20090716-04

Document Your CodephpDocumentor

Uses code comments to build documentationExamples:/*** This library (MyLib) provides this bit of functionality* @author Chris Cornutt <[email protected]>* @package mylibs*/class MyLib { }//------------------/*** This method takes in things and outputs others* @param array $arr_in Input Array* @param string $str_in Input String* @return object $obj_out Output object*/public function myMethod($arr_in,$str_in,$obj_out){

return $obj_out;}

Wiki software (like MediaWiki)Used by WikipediaDocument the “why”, not really the “how”Easy to get out of control

Monday, August 17, 2009

Page 9: Taming the Deployment Beast

20090716-04

Frontend TestingSelenium

Firefox extensionSession recording for typing, clicks, etcThree flavors: Selenium IDE, Selenium Remote Control, Seleium GridMultiple browser support (IE, Firefox, Safari, Chrome)

WebTestsBased on an Ant build processBuild XML-based repeatable testsWorries more about the page than how its renderedOutput reports on test results

Monday, August 17, 2009

Page 10: Taming the Deployment Beast

20090716-04

Continuous IntegrationphpUnderControl (CruiseControl)

CruiseControl is Java-based, but build tools for Ant, Phing, Rake, etcPlugins for git, svn, cvsOutput methods include emails, ftp, http, jabber, etc

pUc adds integration for things like PHPUnit, phpDocumentor, PHP_CodeSnifferChart output for unit test coverage, coding violations, timeline

Xinc (Native PHP)Written in PHP5 with built-in SVN supportStats output for build status, testing summary, durationInstallable via PEAR

Monday, August 17, 2009

Page 11: Taming the Deployment Beast

20090716-04

Syntax ToolsTidy

Extension for PHP (http://php.net/tidy)Parsing XML and HTMLCan specify a custom configuration fileCleanRepair is your best friend

PHP_CodeSnifferReduces the code to “tokens” & checks location, surroundings to ensure complianceComes with default “sniffs” - PEAR, PHPCS, Zend, SquizCommand line tool: phpcs

FILE: /path/to/code/myfile.php--------------------------------------------------------------------------------FOUND 5 ERROR(S) AND 1 WARNING(S) AFFECTING 5 LINE(S)

-------------------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 20 | ERROR | PHP keywords must be lowercase; expected "false" but found | | "FALSE" 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6

--------------------------------------------------------------------------------

Monday, August 17, 2009

Page 12: Taming the Deployment Beast

20090716-05

Deployment Options

SVN (svn up)ssh/scprsyncftp/sftp

PEAR installerphar packages

Other manual/automatic process

Monday, August 17, 2009

Page 13: Taming the Deployment Beast

20090716-05

Enough TalkIt’s Time for Some Action

Monday, August 17, 2009

Page 14: Taming the Deployment Beast

20090716-05

Overview

DEVUnitTest

LintCheck

BuildDocs

CodeStandard

SubversionPHPUnit

phpDocumentorPHP’s lint

PHP_CodeSnifferrsync

Phing / Ant

PRODrsyncsvn co

20090716-05DB

Deploy PEAR TarZip Report

Monday, August 17, 2009

Page 15: Taming the Deployment Beast

20090716-05

Step 1 - PlanningWhat do we have right now?What business processes/workflows need to be considered?Which technologies would we need to invest in?What’s our release schedule?

Who’s going to run this thing?

Monday, August 17, 2009

Page 16: Taming the Deployment Beast

20090716-05

Step 2 - DevelopmentSingle place to pull from(You do use version control, right?)

Example:Subversion environment with developer branches as well as QA and PROD branches. PROD branch is “the point”.

PROD

DEV

QA

Monday, August 17, 2009

Page 17: Taming the Deployment Beast

20090716-05

Step 3 - The BuildDetermine the steps you’ll needThink EasyServer builds are good + Local build is even better

Example:Phing configuration that includes an anonymous checkout of the latest from the repository,a run of all unit tests for the project, generate the docs via phpDocumentor, check the syntax ofall files and run an rsync script to push it out live.

Monday, August 17, 2009

Page 18: Taming the Deployment Beast

20090716-05

Step 3 - The Build (Phing)<?xml version=”1.0”><project name=”deploy_me” default=”main”>

<property name=”version” value=”1.0” />

<target name=”unittest”><phpunit>

<batchtest><fileset dir=”/www/mysite/tests”>

<include name=”**/*Test*.php” /></fileset>

</batchtest></phpunit>

</target><target name=”phpdoc” depends=”unittest”>

<phpdoc title=”MySite Documentation” destdir=”/www/mysite/docs” output=”HTML:Smarty:PHP”><fileset dir=”/www/mysite/docroot”>

<include name=”**/*.php” /></fileset>

</phpdoc></target><target name=”lintme” depends=”phpdoc”>

<phplint><fileset dir=”/www/mysite/docroot”>

<include name=”**/*.php” /></fileset>

</phplint></target><target name=”standardsplz” depends=”lintme”>

<phpcodesniffer standard=”PEAR” format=”summary” file=”/www/mysite/docroot” allowedFileExtensions=”php php5 inc” />

</target><target name=”main” depends=”standardsplz”></target>

</project>

Monday, August 17, 2009

Page 19: Taming the Deployment Beast

20090716-05

Step 3 - The Build (Ant)<?xml version=”1.0”><project name="deploy_me" default="main" basedir="."> <property name="version" value="1.0"/> <target name="unittest"> <exec dir="${basedir}/source" executable="phpunit" failonerror="true"> <arg line="--log-xml ${basedir}/build/logs/testlog.xml"/> </exec> </target> <target name="phpdoc" depends="unittest"> <exec executable="phpdoc" dir="${basedir}/source"> <arg line="-ct type -ue on -t ${basedir}/build/api -tb /PATH/TO/YOUR/PHPUC/DATA/phpdoc -o HTML:Phpuc:phpuc -d src/"/> </exec> </target> <target name="lintme" depends="phpdoc"> </target> <target name="standardsplz" depends="lintme"> <exec executable="phpcs" dir="${basedir}/source" output="${basedir}/build/logs/checkstyle.xml"> <arg line="--report=checkstyle --standard=PEAR --ignore=src/autoload src/"/> </exec> </target> <target name="main" depends="standardsplz"> </target></project>

Monday, August 17, 2009

Page 20: Taming the Deployment Beast

20090716-05

Step 4 - The Push

Where’s “here” and where’s “there”?And what’s in between that could cause issues...

Pick the right tools & process for youThings to consider: network config, what’s already in use (piggyback on a protocol?)

Ready...Set...WaitDo you have everything you need? Is the staging environment ready?

Monday, August 17, 2009

Page 21: Taming the Deployment Beast

20090716-05

Step 4 - The Push (cont.)

2%2%4%4%

4%

5%

11%

21%

47%

SVN FTP/SFTPRSYNC CapistranoSSH/SCP AntAutomatic Cut & PasteManual

Monday, August 17, 2009

Page 22: Taming the Deployment Beast

20090716-05

Step 5 - The Aftermath

Clean up your mess, young manThis is where post-push belongs, wrap it all up

Make sure dev is ready to do it all againDeployment should be simple and automatic

Giving the “All Clear”Be sure to run your tests to ensure that all is happy in production.

Monday, August 17, 2009

Page 23: Taming the Deployment Beast

20090716-05

The Point of it All

Like flipping a switch, a good build should make deploying your website a simple task, no matter the complexity.

It should remove the burden of repetitive tasks from developers and make lives easier.

Monday, August 17, 2009

Page 24: Taming the Deployment Beast

20090716-05

Questions,Comments,

Suggestions?

[email protected]

@enygma

http://blog.phpdeveloper.org

Monday, August 17, 2009