SlideShare a Scribd company logo
1 of 43
Download to read offline
Jenkins User Conference Boston #jenkinsconf
Jenkins + Gitlab +
RabbitMQ + Symfony2
+ Phing
Brandon Mueller
K12 Services, Inc
@fatmuemoo
June 18, 2014
#jenkinsconf
Jenkins User Conference Boston #jenkinsconf
About Me
• Web Developer
• Lead Engineer @ K12 Services Inc
• Total Jenkins Newbie (~6 months)
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
How I Sold CI to Executives
• We are humans, we make mistakes
• Deploying updates manually takes time and it is
error prone
• Tests and code quality assurance is
inconsistent without CI
• Automagically test and inspect before every
update
• Upfront cost can be significant, especially for a
newbie, but pays off in the long run
Jenkins User Conference Boston #jenkinsconf
Why Jenkins?
• Open Source; free as in freedom!
• Battle tested
• Huge community
• Lots of plugins
• In the Ubuntu repository
• Easy to deploy and update
• Other CI servers are either closed source or too
immature
Jenkins User Conference Boston #jenkinsconf
GitLab
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md
Jenkins User Conference Boston #jenkinsconf
What Is
Open source software to collaborate on code
• Manage Git repositories with fine grained access
controls that keep your code secure
• Perform code reviews and enhance collaboration with
merge requests
• Each project can also have an issue tracker and a wiki
• Used by more than 100,000 organizations, GitLab is the
most popular solution to manage Git repositories on-
premises
• Completely free and open source (MIT Expat license)
• Powered by Ruby on Rails
source: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md
Jenkins User Conference Boston #jenkinsconf
Why GitLab?
• Open Source; Free as in freedom!
• Runs on the Linux + Nginx + MySql + Ruby stack
• Easy to deploy and update; Digital Ocean has a
push button install
• Predictable release schedule
• Awesome access controls
Jenkins User Conference Boston #jenkinsconf
Why GitLab? Why Not GitHub or BitBucket?
• GitLab could be called a GitHub clone; Fairly
intuitive UI and workflow
• We have control of the service; no surprises
• GitHub can get pricey when you have more
than a few repositories
• We still use a free BitBucket account for a third
tier backups
• We still use GitHub for Open Source code
https://github.com/K12Labs
Jenkins User Conference Boston #jenkinsconf
Jenkins + GitLab
GitLab Merge Request Builder Plugin
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins + GitLab
GitLab Build Now Plugin
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins + GitLab Workflow
• Dev creates a feature branch following a
feature/issue_desc naming schema
• ex: feature/124_my_awsome_thing
• Dev writes some awesome code, sends a
merge request when ready
• Merge Request Builder plugin builds the project
when MR is opened and when the MR is
updated
• When a MR is accepted, Jenkins triggers a build
b/c code was pushed to the develop branch
Jenkins User Conference Boston #jenkinsconf
Jenkins + GitLab Workflow
app_dev Jenkins Project
(develop & master branch)
app_test Jenkins Project
(feature branches)
MR is created or updated MR is accepted in GitLab
Jenkins User Conference Boston #jenkinsconf
What is Phing?
PHing Is Not GNU make; it's a PHP project build
system or build tool 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.
source: phing.info
Jenkins User Conference Boston #jenkinsconf
In other words
• PHING in a build tool for automating tasks.
• Uses a build XML file.
• Lots of pre made PHING targets.
• You can tie together pre made string targets
• You can easily execute shell commands
• You can write more complex phing targets in
PHP
• PHING is Awesome. Use PHING.
Jenkins User Conference Boston #jenkinsconf
Phing in Dev
• All the things that Jenkins does for the build, we
can do locally
• No surprises if a build fails (usually)
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
Jenkins + Phing
Phing Plugin
• It works ;)
• Jenkins executes Phing targets as part of the
build process
• Passes in environment variables
Jenkins User Conference Boston #jenkinsconf
Jenkins + Phing
•
Jenkins User Conference Boston #jenkinsconf
Code Quality
Jenkins User Conference Boston #jenkinsconf
PHP Code Sniffer
• Reports on coding standards (PSR-2)
• Outputs standard checkstyle xml formats
(among other formats)
Jenkins User Conference Boston #jenkinsconf
CSSlint & JShint
• Same thing, only for CSS and JS
Jenkins User Conference Boston #jenkinsconf
Build Summary
• Make env/build specific config files
• Composer
• Bower
• Twig.js
• Assetic
• Run Analytics/Tests
• Symfony Cache
Jenkins User Conference Boston #jenkinsconf
Jenkins User Conference Boston #jenkinsconf
What About Deployment?
• Publish Over SSH Plugin
• This gets the files where they need to go, but
I need more than that
• Deploy Plugin
• Java Specific Platforms
• Bash Script
• HUH?
Jenkins User Conference Boston #jenkinsconf
RabbitMQ
• Post build task triggers a bash script that sends
a RabbitMQ message
• Jenkins no longer cares about where the app is
being deployed
• Many consumers can receive the message -
deploy the app on as many servers as needed
Jenkins User Conference Boston #jenkinsconf
A brief explanation of how RabbitMQ works
• A producer posts messages to exchanges.
• Exchanges in RabbitMQ route the message to
where it needs to go.
• A consumer connects to a queue to consume a
message.
• There are different types of exchanges
Jenkins User Conference Boston #jenkinsconf
Types of exchanges
Direct
• Message goes directly to queue
Fanout
• Every consumer connected to
queue gets the message
Topic
• The exchange routes to different queues
(or different exchanges) based on a routing key
http://www.rabbitmq.com/getstarted.html
Jenkins User Conference Boston #jenkinsconf
Message Example
Exchange ci
Routing Key ci.k12fs2_dev.bug_216_login
Payload
{
status : "complete",
gitlabMergeRequestId : "193",
gitlabSourceBranch : "bug/216_login",
gitlabSourceName : "k12fs2/app_k12fs2",
gitlabSourceRepository : "",
gitlabTargetBranch : "develop",
APP_VERSION : "2.0.2.233",
BUILD_CAUSE : "GITLABCAUSE",
BUILD_DISPLAY_NAME : "#348",
BUILD_ID : "2014-06-06_14-15-52",
BUILD_NUMBER : "348",
BUILD_TAG : "jenkins-k12fs2_dev-348",
BUILD_URL : "http://example.com/job/k12fs2_dev/348/",
GIT_BRANCH : "origin/develop",
GIT_COMMIT : "351790406a56aad54b2afe8fdf6a60b3737441d8",
GIT_PREVIOUS_COMMIT: "351790406a56aad54b2afe8fdf6a60b3737441d8",
GIT_URL : "http://example.com/",
HUDSON_URL : "http://example.com/",
JOB_NAME : "k12fs2_dev",
JOB_URL : "http://example.com/job/k12fs2_dev/"
}
Jenkins User Conference Boston #jenkinsconf
Topic
Exchange
Develop
Branch
Queue
Feature
Branch
Branch
Queue
Dev App
Server
Prod
App
Server
Staging/QA
App Server
Master
Branch
Fanout
Exchange
Prod
App
Server
Prod
App
Server
routing key: ci.project_name.branch_name
app_dev.origin_develop
app_dev.origin_master
Jenkins User Conference Boston #jenkinsconf
Symfony2 + RabbitMQ
• High quality bundle called OldSoundRabbitMq
Bundle
• Consumer code for deploying the application
lives in our Symfony app
• Consumer code drops down to the command
line to execute PHING targets etc
Jenkins User Conference Boston #jenkinsconf
OldSouundRabbitMqBundle Configz
Jenkins User Conference Boston #jenkinsconf
Consumer Codez
Jenkins User Conference Boston #jenkinsconf
Bringing It All Together
Application Server
Vagrant
Jenkins
<Phing>
Vagrant
<Phing>
Vagrant
<Phing>
Dev machines use Phing to
deploy the application
internally and run analytics
Application server(s) consume
message from Jenkins and use
Phing to deploy the application
GitLab
GitLab notifies
Jenkins of push.
Jenkins Pull down
repository
<Phing>
Jenkins uses Phing to
build the application
I’m done
building!
Message
Consumer <Phing>
Application Server
Consumer <Phing>
Application Server
Consumer <Phing>
Jenkins User Conference Boston #jenkinsconf
All The Jenkins Things
• Environment Injector Plugin
• Checkstyle Plugin
• Gitlab Build Now Plugin
• Gitlab Merge Request Builder Plugin
• Hudson Post Build Task
Jenkins User Conference Boston #jenkinsconf
Things I Feel Are missing
• RabbitMQ Post Build Producer plugin
• Better Notifications from Jenkins to GitLab CE
(Coming Soon?!?)
• Artifact publishing inside of Jenkins
• Dynamic build plan for feature branches
or I’m too incompetent to develop myself
or the solution exists and I just couldn’t figure it out it
Jenkins User Conference Boston #jenkinsconf
All (most of) the things
• https://www.gitlab.com/gitlab-ce/
• http://www.phing.info/
• https://github.com/squizlabs/PHP_CodeSniffer
• https://github.com/CSSLint/csslint
• http://www.jshint.com/
• https://getcomposer.org/
• http://bower.io/
• http://www.rabbitmq.com/
• https://github.com/videlalvaro/rabbitmqbundle
• http://www.rabbitmq.com/getstarted.html
Jenkins User Conference Boston #jenkinsconf
Thank You To Our Sponsors
Platinum Gold
Silver

More Related Content

What's hot

Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Noa Harel
 
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence Parag Gajbhiye
 
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostustaVincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostustaVincitOy
 
Code review vs pull request
Code review vs pull requestCode review vs pull request
Code review vs pull requestBryan Liu
 
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Indonesia
 
GitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorialGitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorialHeather McNamee
 
Continuous integration ( jen kins travis ci)
Continuous integration ( jen kins  travis ci)Continuous integration ( jen kins  travis ci)
Continuous integration ( jen kins travis ci)Sadani Rodrigo
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsKnoldus Inc.
 
Git Lab Introduction
Git Lab IntroductionGit Lab Introduction
Git Lab IntroductionKrunal Doshi
 
Travis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHPTravis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHPFederico Damián Lozada Mosto
 
Teaching a Designer to Use GitHub
Teaching a Designer to Use GitHubTeaching a Designer to Use GitHub
Teaching a Designer to Use GitHubLiam Dempsey
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developersDmitry Guyvoronsky
 
Git,Github,How to host using Github
Git,Github,How to host using GithubGit,Github,How to host using Github
Git,Github,How to host using GithubSujata Regoti
 
Docker for tooling
Docker for toolingDocker for tooling
Docker for toolingRafael Gomes
 
Docker from a team perspective
Docker from a team perspectiveDocker from a team perspective
Docker from a team perspectiveEdwin Vlieg
 

What's hot (20)

Travis CI
Travis CITravis CI
Travis CI
 
Introducing GitLab (June 2018)
Introducing GitLab (June 2018)Introducing GitLab (June 2018)
Introducing GitLab (June 2018)
 
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence
Introduction to Git(BitBucket) , Continuous Integration (Bamboo) & Confluence
 
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostustaVincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
Vincit Teatime 2015.2 - Niko Kurtti: SaaSiin pa(i)nostusta
 
Travis CI
Travis CITravis CI
Travis CI
 
Code review vs pull request
Code review vs pull requestCode review vs pull request
Code review vs pull request
 
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
GITS Class #16: CI/CD (Continuous Integration & Continuous Deployment) with G...
 
Up GitLab Presentation 2015
Up GitLab Presentation 2015Up GitLab Presentation 2015
Up GitLab Presentation 2015
 
GitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorialGitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorial
 
Continuous integration ( jen kins travis ci)
Continuous integration ( jen kins  travis ci)Continuous integration ( jen kins  travis ci)
Continuous integration ( jen kins travis ci)
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Git Lab Introduction
Git Lab IntroductionGit Lab Introduction
Git Lab Introduction
 
Travis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHPTravis-CI - Continuos integration in the cloud for PHP
Travis-CI - Continuos integration in the cloud for PHP
 
Git best practices 2016
Git best practices 2016Git best practices 2016
Git best practices 2016
 
Teaching a Designer to Use GitHub
Teaching a Designer to Use GitHubTeaching a Designer to Use GitHub
Teaching a Designer to Use GitHub
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
 
Git,Github,How to host using Github
Git,Github,How to host using GithubGit,Github,How to host using Github
Git,Github,How to host using Github
 
CI/CD with Github Actions
CI/CD with Github ActionsCI/CD with Github Actions
CI/CD with Github Actions
 
Docker for tooling
Docker for toolingDocker for tooling
Docker for tooling
 
Docker from a team perspective
Docker from a team perspectiveDocker from a team perspective
Docker from a team perspective
 

Viewers also liked

Introduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPIntroduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPEric Hogue
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfonyAlvaro Videla
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBMark Atwood
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingMihail Irintchev
 
Build & deploy PHP application (intro level)
Build & deploy PHP application (intro level)Build & deploy PHP application (intro level)
Build & deploy PHP application (intro level)Anton Babenko
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 Tikal Knowledge
 
Asynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simpleAsynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simpleKirill Chebunin
 
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ   at SunshinePHPScaling applications with RabbitMQ   at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHPAlvaro Videla
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Max Romanovsky
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with PhingMichiel Rook
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupScaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupKacper Gunia
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMqAlvaro Videla
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with PhingMichiel Rook
 
Speed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisSpeed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisRicard Clau
 

Viewers also liked (15)

Introduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHPIntroduction à l'intégration continue en PHP
Introduction à l'intégration continue en PHP
 
Theres a rabbit on my symfony
Theres a rabbit on my symfonyTheres a rabbit on my symfony
Theres a rabbit on my symfony
 
Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDB
 
Building and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phingBuilding and Deploying PHP Apps Using phing
Building and Deploying PHP Apps Using phing
 
Working with Asynchronous Events
Working with Asynchronous EventsWorking with Asynchronous Events
Working with Asynchronous Events
 
Build & deploy PHP application (intro level)
Build & deploy PHP application (intro level)Build & deploy PHP application (intro level)
Build & deploy PHP application (intro level)
 
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013 .Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
.Net OSS Ci & CD with Jenkins - JUC ISRAEL 2013
 
Asynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simpleAsynchronous processing with PHP and Symfony2. Do it simple
Asynchronous processing with PHP and Symfony2. Do it simple
 
Scaling applications with RabbitMQ at SunshinePHP
Scaling applications with RabbitMQ   at SunshinePHPScaling applications with RabbitMQ   at SunshinePHP
Scaling applications with RabbitMQ at SunshinePHP
 
Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...Symfony under control. Continuous Integration and Automated Deployments in Sy...
Symfony under control. Continuous Integration and Automated Deployments in Sy...
 
Deploying PHP applications with Phing
Deploying PHP applications with PhingDeploying PHP applications with Phing
Deploying PHP applications with Phing
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupScaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
 
Interoperability With RabbitMq
Interoperability With RabbitMqInteroperability With RabbitMq
Interoperability With RabbitMq
 
Building and deploying PHP applications with Phing
Building and deploying PHP applications with PhingBuilding and deploying PHP applications with Phing
Building and deploying PHP applications with Phing
 
Speed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with RedisSpeed up your Symfony2 application and build awesome features with Redis
Speed up your Symfony2 application and build awesome features with Redis
 

Similar to Juc boston2014.pptx

The Job DSL Plugin: Introduction & What’s New
The Job DSL Plugin: Introduction & What’s NewThe Job DSL Plugin: Introduction & What’s New
The Job DSL Plugin: Introduction & What’s NewDaniel Spilker
 
Continuous Integration using Jenkins with Python
Continuous Integration using Jenkins with PythonContinuous Integration using Jenkins with Python
Continuous Integration using Jenkins with PythonInexture Solutions
 
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Andrew Bayer
 
Configuration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginConfiguration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginDaniel Spilker
 
Version your build process as you version your code
Version your build process as you version your codeVersion your build process as you version your code
Version your build process as you version your codeVincent Latombe
 
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...CloudBees
 
Codifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared LibraryCodifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared LibraryAlvin Huang
 
Magento Continuous Integration & Continuous Delivery @MM17HR
Magento Continuous Integration & Continuous Delivery @MM17HRMagento Continuous Integration & Continuous Delivery @MM17HR
Magento Continuous Integration & Continuous Delivery @MM17HRDenis Ristic
 
JUC Europe 2015: Hey! What Did We Just Release?
JUC Europe 2015: Hey! What Did We Just Release?JUC Europe 2015: Hey! What Did We Just Release?
JUC Europe 2015: Hey! What Did We Just Release?CloudBees
 
Introduction to jenkins for the net developer
Introduction to jenkins for the net developerIntroduction to jenkins for the net developer
Introduction to jenkins for the net developerAbe Diaz
 
JUC Europe 2015: Configuration as Code: The Job DSL Plugin
JUC Europe 2015: Configuration as Code: The Job DSL PluginJUC Europe 2015: Configuration as Code: The Job DSL Plugin
JUC Europe 2015: Configuration as Code: The Job DSL PluginCloudBees
 
varun JENKINS.pptx
varun JENKINS.pptxvarun JENKINS.pptx
varun JENKINS.pptxVgPolampalli
 
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Aysylu Greenberg
 
Louisville Software Engineering Meet Up: Continuous Integration Using Jenkins
Louisville Software Engineering Meet Up: Continuous Integration Using JenkinsLouisville Software Engineering Meet Up: Continuous Integration Using Jenkins
Louisville Software Engineering Meet Up: Continuous Integration Using JenkinsJames Strong
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkinsAbe Diaz
 
Using Jenkins with iOS projects
Using Jenkins with iOS projectsUsing Jenkins with iOS projects
Using Jenkins with iOS projectsAppsDojo
 

Similar to Juc boston2014.pptx (20)

The Job DSL Plugin: Introduction & What’s New
The Job DSL Plugin: Introduction & What’s NewThe Job DSL Plugin: Introduction & What’s New
The Job DSL Plugin: Introduction & What’s New
 
Jenkins-CI
Jenkins-CIJenkins-CI
Jenkins-CI
 
Continuous Integration using Jenkins with Python
Continuous Integration using Jenkins with PythonContinuous Integration using Jenkins with Python
Continuous Integration using Jenkins with Python
 
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)Seven Habits of Highly Effective Jenkins Users (2014 edition!)
Seven Habits of Highly Effective Jenkins Users (2014 edition!)
 
Configuration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL PluginConfiguration As Code: The Job DSL Plugin
Configuration As Code: The Job DSL Plugin
 
Version your build process as you version your code
Version your build process as you version your codeVersion your build process as you version your code
Version your build process as you version your code
 
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...
JUC Europe 2015: From Virtual Machines to Containers: Achieving Continuous In...
 
From Virtual Machines to Containers
From Virtual Machines to ContainersFrom Virtual Machines to Containers
From Virtual Machines to Containers
 
Codifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared LibraryCodifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared Library
 
Magento Continuous Integration & Continuous Delivery @MM17HR
Magento Continuous Integration & Continuous Delivery @MM17HRMagento Continuous Integration & Continuous Delivery @MM17HR
Magento Continuous Integration & Continuous Delivery @MM17HR
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
JUC Europe 2015: Hey! What Did We Just Release?
JUC Europe 2015: Hey! What Did We Just Release?JUC Europe 2015: Hey! What Did We Just Release?
JUC Europe 2015: Hey! What Did We Just Release?
 
Introduction to jenkins for the net developer
Introduction to jenkins for the net developerIntroduction to jenkins for the net developer
Introduction to jenkins for the net developer
 
JUC Europe 2015: Configuration as Code: The Job DSL Plugin
JUC Europe 2015: Configuration as Code: The Job DSL PluginJUC Europe 2015: Configuration as Code: The Job DSL Plugin
JUC Europe 2015: Configuration as Code: The Job DSL Plugin
 
varun JENKINS.pptx
varun JENKINS.pptxvarun JENKINS.pptx
varun JENKINS.pptx
 
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)Building A Distributed Build System at Google Scale (StrangeLoop 2016)
Building A Distributed Build System at Google Scale (StrangeLoop 2016)
 
Louisville Software Engineering Meet Up: Continuous Integration Using Jenkins
Louisville Software Engineering Meet Up: Continuous Integration Using JenkinsLouisville Software Engineering Meet Up: Continuous Integration Using Jenkins
Louisville Software Engineering Meet Up: Continuous Integration Using Jenkins
 
Jenkins pipeline as code
Jenkins pipeline as codeJenkins pipeline as code
Jenkins pipeline as code
 
Introduction to jenkins
Introduction to jenkinsIntroduction to jenkins
Introduction to jenkins
 
Using Jenkins with iOS projects
Using Jenkins with iOS projectsUsing Jenkins with iOS projects
Using Jenkins with iOS projects
 

Recently uploaded

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 

Recently uploaded (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 

Juc boston2014.pptx

  • 1. Jenkins User Conference Boston #jenkinsconf Jenkins + Gitlab + RabbitMQ + Symfony2 + Phing Brandon Mueller K12 Services, Inc @fatmuemoo June 18, 2014 #jenkinsconf
  • 2. Jenkins User Conference Boston #jenkinsconf About Me • Web Developer • Lead Engineer @ K12 Services Inc • Total Jenkins Newbie (~6 months)
  • 3. Jenkins User Conference Boston #jenkinsconf
  • 4. Jenkins User Conference Boston #jenkinsconf
  • 5. Jenkins User Conference Boston #jenkinsconf How I Sold CI to Executives • We are humans, we make mistakes • Deploying updates manually takes time and it is error prone • Tests and code quality assurance is inconsistent without CI • Automagically test and inspect before every update • Upfront cost can be significant, especially for a newbie, but pays off in the long run
  • 6. Jenkins User Conference Boston #jenkinsconf Why Jenkins? • Open Source; free as in freedom! • Battle tested • Huge community • Lots of plugins • In the Ubuntu repository • Easy to deploy and update • Other CI servers are either closed source or too immature
  • 7. Jenkins User Conference Boston #jenkinsconf GitLab https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md
  • 8. Jenkins User Conference Boston #jenkinsconf What Is Open source software to collaborate on code • Manage Git repositories with fine grained access controls that keep your code secure • Perform code reviews and enhance collaboration with merge requests • Each project can also have an issue tracker and a wiki • Used by more than 100,000 organizations, GitLab is the most popular solution to manage Git repositories on- premises • Completely free and open source (MIT Expat license) • Powered by Ruby on Rails source: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/README.md
  • 9. Jenkins User Conference Boston #jenkinsconf Why GitLab? • Open Source; Free as in freedom! • Runs on the Linux + Nginx + MySql + Ruby stack • Easy to deploy and update; Digital Ocean has a push button install • Predictable release schedule • Awesome access controls
  • 10. Jenkins User Conference Boston #jenkinsconf Why GitLab? Why Not GitHub or BitBucket? • GitLab could be called a GitHub clone; Fairly intuitive UI and workflow • We have control of the service; no surprises • GitHub can get pricey when you have more than a few repositories • We still use a free BitBucket account for a third tier backups • We still use GitHub for Open Source code https://github.com/K12Labs
  • 11. Jenkins User Conference Boston #jenkinsconf Jenkins + GitLab GitLab Merge Request Builder Plugin
  • 12. Jenkins User Conference Boston #jenkinsconf
  • 13. Jenkins User Conference Boston #jenkinsconf
  • 14. Jenkins User Conference Boston #jenkinsconf Jenkins + GitLab GitLab Build Now Plugin
  • 15. Jenkins User Conference Boston #jenkinsconf
  • 16. Jenkins User Conference Boston #jenkinsconf Jenkins + GitLab Workflow • Dev creates a feature branch following a feature/issue_desc naming schema • ex: feature/124_my_awsome_thing • Dev writes some awesome code, sends a merge request when ready • Merge Request Builder plugin builds the project when MR is opened and when the MR is updated • When a MR is accepted, Jenkins triggers a build b/c code was pushed to the develop branch
  • 17. Jenkins User Conference Boston #jenkinsconf Jenkins + GitLab Workflow app_dev Jenkins Project (develop & master branch) app_test Jenkins Project (feature branches) MR is created or updated MR is accepted in GitLab
  • 18. Jenkins User Conference Boston #jenkinsconf What is Phing? PHing Is Not GNU make; it's a PHP project build system or build tool 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. source: phing.info
  • 19. Jenkins User Conference Boston #jenkinsconf In other words • PHING in a build tool for automating tasks. • Uses a build XML file. • Lots of pre made PHING targets. • You can tie together pre made string targets • You can easily execute shell commands • You can write more complex phing targets in PHP • PHING is Awesome. Use PHING.
  • 20. Jenkins User Conference Boston #jenkinsconf Phing in Dev • All the things that Jenkins does for the build, we can do locally • No surprises if a build fails (usually)
  • 21. Jenkins User Conference Boston #jenkinsconf
  • 22. Jenkins User Conference Boston #jenkinsconf
  • 23. Jenkins User Conference Boston #jenkinsconf Jenkins + Phing Phing Plugin • It works ;) • Jenkins executes Phing targets as part of the build process • Passes in environment variables
  • 24. Jenkins User Conference Boston #jenkinsconf Jenkins + Phing •
  • 25. Jenkins User Conference Boston #jenkinsconf Code Quality
  • 26. Jenkins User Conference Boston #jenkinsconf PHP Code Sniffer • Reports on coding standards (PSR-2) • Outputs standard checkstyle xml formats (among other formats)
  • 27. Jenkins User Conference Boston #jenkinsconf CSSlint & JShint • Same thing, only for CSS and JS
  • 28. Jenkins User Conference Boston #jenkinsconf Build Summary • Make env/build specific config files • Composer • Bower • Twig.js • Assetic • Run Analytics/Tests • Symfony Cache
  • 29. Jenkins User Conference Boston #jenkinsconf
  • 30. Jenkins User Conference Boston #jenkinsconf What About Deployment? • Publish Over SSH Plugin • This gets the files where they need to go, but I need more than that • Deploy Plugin • Java Specific Platforms • Bash Script • HUH?
  • 31. Jenkins User Conference Boston #jenkinsconf RabbitMQ • Post build task triggers a bash script that sends a RabbitMQ message • Jenkins no longer cares about where the app is being deployed • Many consumers can receive the message - deploy the app on as many servers as needed
  • 32. Jenkins User Conference Boston #jenkinsconf A brief explanation of how RabbitMQ works • A producer posts messages to exchanges. • Exchanges in RabbitMQ route the message to where it needs to go. • A consumer connects to a queue to consume a message. • There are different types of exchanges
  • 33. Jenkins User Conference Boston #jenkinsconf Types of exchanges Direct • Message goes directly to queue Fanout • Every consumer connected to queue gets the message Topic • The exchange routes to different queues (or different exchanges) based on a routing key http://www.rabbitmq.com/getstarted.html
  • 34. Jenkins User Conference Boston #jenkinsconf Message Example Exchange ci Routing Key ci.k12fs2_dev.bug_216_login Payload { status : "complete", gitlabMergeRequestId : "193", gitlabSourceBranch : "bug/216_login", gitlabSourceName : "k12fs2/app_k12fs2", gitlabSourceRepository : "", gitlabTargetBranch : "develop", APP_VERSION : "2.0.2.233", BUILD_CAUSE : "GITLABCAUSE", BUILD_DISPLAY_NAME : "#348", BUILD_ID : "2014-06-06_14-15-52", BUILD_NUMBER : "348", BUILD_TAG : "jenkins-k12fs2_dev-348", BUILD_URL : "http://example.com/job/k12fs2_dev/348/", GIT_BRANCH : "origin/develop", GIT_COMMIT : "351790406a56aad54b2afe8fdf6a60b3737441d8", GIT_PREVIOUS_COMMIT: "351790406a56aad54b2afe8fdf6a60b3737441d8", GIT_URL : "http://example.com/", HUDSON_URL : "http://example.com/", JOB_NAME : "k12fs2_dev", JOB_URL : "http://example.com/job/k12fs2_dev/" }
  • 35. Jenkins User Conference Boston #jenkinsconf Topic Exchange Develop Branch Queue Feature Branch Branch Queue Dev App Server Prod App Server Staging/QA App Server Master Branch Fanout Exchange Prod App Server Prod App Server routing key: ci.project_name.branch_name app_dev.origin_develop app_dev.origin_master
  • 36. Jenkins User Conference Boston #jenkinsconf Symfony2 + RabbitMQ • High quality bundle called OldSoundRabbitMq Bundle • Consumer code for deploying the application lives in our Symfony app • Consumer code drops down to the command line to execute PHING targets etc
  • 37. Jenkins User Conference Boston #jenkinsconf OldSouundRabbitMqBundle Configz
  • 38. Jenkins User Conference Boston #jenkinsconf Consumer Codez
  • 39. Jenkins User Conference Boston #jenkinsconf Bringing It All Together Application Server Vagrant Jenkins <Phing> Vagrant <Phing> Vagrant <Phing> Dev machines use Phing to deploy the application internally and run analytics Application server(s) consume message from Jenkins and use Phing to deploy the application GitLab GitLab notifies Jenkins of push. Jenkins Pull down repository <Phing> Jenkins uses Phing to build the application I’m done building! Message Consumer <Phing> Application Server Consumer <Phing> Application Server Consumer <Phing>
  • 40. Jenkins User Conference Boston #jenkinsconf All The Jenkins Things • Environment Injector Plugin • Checkstyle Plugin • Gitlab Build Now Plugin • Gitlab Merge Request Builder Plugin • Hudson Post Build Task
  • 41. Jenkins User Conference Boston #jenkinsconf Things I Feel Are missing • RabbitMQ Post Build Producer plugin • Better Notifications from Jenkins to GitLab CE (Coming Soon?!?) • Artifact publishing inside of Jenkins • Dynamic build plan for feature branches or I’m too incompetent to develop myself or the solution exists and I just couldn’t figure it out it
  • 42. Jenkins User Conference Boston #jenkinsconf All (most of) the things • https://www.gitlab.com/gitlab-ce/ • http://www.phing.info/ • https://github.com/squizlabs/PHP_CodeSniffer • https://github.com/CSSLint/csslint • http://www.jshint.com/ • https://getcomposer.org/ • http://bower.io/ • http://www.rabbitmq.com/ • https://github.com/videlalvaro/rabbitmqbundle • http://www.rabbitmq.com/getstarted.html
  • 43. Jenkins User Conference Boston #jenkinsconf Thank You To Our Sponsors Platinum Gold Silver