Share
Embed
Continuous Integration with Jenkins
A workshop on using Jenkins for Continuous Integration given at the CodeConnexx 2013 conference
Mike van Riel
November 07, 2013
Transcript
48 slides
-
https://joind.in/9937 2 CodeConnexx 7 November 2013 Goals for today •
Introduce Continuous Integration for PHP • Install Jenkins • Configure Jenkins for PHP • Configure a project in Jenkins -
https://joind.in/9937 3 CodeConnexx 7 November 2013 About me • I
am Mike van Riel @mvriel -
https://joind.in/9937 4 CodeConnexx 7 November 2013 About me • I
am Mike van Riel • Lead Developer for phpDocumentor -
https://joind.in/9937 5 CodeConnexx 7 November 2013 About me • I
am Mike van Riel • Lead Developer for phpDocumentor • Software Composer at Ingewikkeld -
https://joind.in/9937 6 CodeConnexx 7 November 2013 About me • I
am Mike van Riel • Lead Developer for phpDocumentor • Software Composer at Ingewikkeld • Foster father of two cute dogs -
https://joind.in/9937 7 CodeConnexx 7 November 2013 Requirements • Virtual Machine
or VPS • Project with, at least, unit tests • PHP installed with PEAR • Java -
https://joind.in/9937 10 CodeConnexx 7 November 2013 Quality Assurance • Automated
tests • Coding style • Monitoring • Metrics and trends -
https://joind.in/9937 12 CodeConnexx 7 November 2013 Continuous Integration • A
watchdog guarding your Quality. • Immediate insight into the state of your code-base. • Detailed overview of possible issues. • A way of thinking and working. -
https://joind.in/9937 14 CodeConnexx 7 November 2013 Why? • Automated, less
error-prone • Continuous, always available • Transparent for everyone • Reduces defects -
https://joind.in/9937 16 CodeConnexx 7 November 2013 Commit / push CI
polls VCS Rinse and repeat Run steps Report failure Success -
https://joind.in/9937 18 CodeConnexx 7 November 2013 Environments • CruiseControl /
phpUnderControl • Jenkins • Thoughtworks Go • Sismo • Travis-CI • PHPCI • Scrutinizer CI -
https://joind.in/9937 20 CodeConnexx 7 November 2013 Jenkins • Java application
• Extensible with a lot of plugins • Integrates nicely with PHP QA Tools -
https://joind.in/9937 22 CodeConnexx 7 November 2013 What for? Mess detection
Automated testing Copy/paste detection Various metrics Coding Standards API Documentation -
https://joind.in/9937 23 CodeConnexx 7 November 2013 Automated testing • Unit
tests • Integration or system tests • Acceptance tests -
https://joind.in/9937 24 CodeConnexx 7 November 2013 Mess detection • Finds
possible bugs • Checks for sub-optimal code • Warns you for complex code • Detects unused code -
https://joind.in/9937 25 CodeConnexx 7 November 2013 Copy/paste detection • Prevents
copy / paste coding • Detects refactoring hotspots • Reduces maintenance costs -
https://joind.in/9937 26 CodeConnexx 7 November 2013 PHP Code Sniffer •
Checks for coding style violations • Helps to improves readability – Consistency – Best practices • Comes with PEAR, PSR-1 & PSR-2 -
https://joind.in/9937 27 CodeConnexx 7 November 2013 PHPloc & PHP_Depend •
Collects many metrics – Cyclomatic Complexity – N-path Complexity – Lines per method – Spread of classes – And a lot more -
https://joind.in/9937 29 CodeConnexx 7 November 2013 PHPDocumentor • API Reference
Documentation • Class Diagram • Documentation validation Especially useful for open source projects -
https://joind.in/9937 31 CodeConnexx 7 November 2013 Installing Jenkins Manual Installation
1. Install Java 2. Download war file 3. Put on server 4. Add to boot scripts Using a package manager 1. Add Jenkins repository 2. Update package manager 3. Run installation -
https://joind.in/9937 32 CodeConnexx 7 November 2013 Installing requirements $ apt-get
update $ apt-get install curl vim make ant daemon bash-completion openjdk-6-jre php5-cli php-pear git -
https://joind.in/9937 33 CodeConnexx 7 November 2013 Installing tools $ pear
config-set auto_discover 1 $ pear install pear.phing.info/phing $ pear install pear.phpmd.org/PHP_PMD $ pear install pear.phpunit.de/PHPUnit $ pear install pear.phpunit.de/phpcpd $ pear install pear.phpunit.de/phploc $ pear install pear.php.net/PHP_CodeSniffer $ pear install pear.phpdoc.org/phpDocumentor -
https://joind.in/9937 34 CodeConnexx 7 November 2013 “The next few slides
demonstrate how you would usually install Jenkins; but not today” -
https://joind.in/9937 35 CodeConnexx 7 November 2013 Installing Jenkins $ wget
-q -O - http://pkg.jenkins-ci.org/debian/jenkin s-ci.org.key | sudo apt-key add - deb http://pkg.jenkins-ci.org/debian binary/ Add to /etc/apt/sources.list -
https://joind.in/9937 36 CodeConnexx 7 November 2013 Installing Jenkins $ apt-get
update $ apt-get install jenkins Why not? Jenkins 1.536 and 1.538 (latest) are broken -
https://joind.in/9937 37 CodeConnexx 7 November 2013 “So .. How are
we going to install Jenkins today?” -
https://joind.in/9937 38 CodeConnexx 7 November 2013 Installing Jenkins $ dpkg
-i ~/jenkins/jenkins_1.535_all.deb -
https://joind.in/9937 41 CodeConnexx 7 November 2013 Jenkins-PHP.org • Maintained by
Sebastian Bergmann • Job template for PHP projects • Provides assistance with instructions • But: replace phpdox with phpDocumentor -
https://joind.in/9937 42 CodeConnexx 7 November 2013 Installing dependencies $ wget
http://localhost:8080/jnlpJars/jenkins-cli.jar $ java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin checkstyle cloverphp dry htmlpublisher jdepend plot pmd violations xunit git $ jenkins-cli.jar -s http://localhost:8080 safe-restart -
https://joind.in/9937 43 CodeConnexx 7 November 2013 Installing dependencies $ wget
https://raw.github.com/sebastianbergmann/php- jenkins-template/master/config.xml $ java -jar jenkins-cli.jar -s http://localhost:8080 create-job php-template < config.xml -
https://joind.in/9937 44 CodeConnexx 7 November 2013 Configuring Jenkins • Configure
security • Configure mail settings • Install additional plugins • Github • IRC -
https://joind.in/9937 46 CodeConnexx 7 November 2013 Setting up a new
project 1. Create a build file 2. Tell Jenkins to add a new Job 3. Use a copy of the existing php-template job 4. Add VCS information and schedule 5. Enable your Job