SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler 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

Mais conteĂşdo relacionado

Mais procurados

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
Federico DamiĂĄn Lozada Mosto
 

Mais procurados (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
 

Destaque

Telephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDBTelephony with OpenShift Twilio and MongoDB
Telephony with OpenShift Twilio and MongoDB
Mark Atwood
 
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
 

Destaque (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
 

Semelhante a Juc boston2014.pptx

Using Jenkins with iOS projects
Using Jenkins with iOS projectsUsing Jenkins with iOS projects
Using Jenkins with iOS projects
AppsDojo
 

Semelhante a 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
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Último (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

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