AIN’T NOBODY GOT TIME FOR THAT!
MATT FROST @SHRTWHITEBLDGUY HTTPS://JOIND.IN/16027
WHO AM I?INTRODUCTION
WHAT IS AUTOMATION?DEFINITION
WHY AUTOMATE?DEFINING PURPOSE
• TASKS BECOME CLEARLY DEFINED IN ONE LOCATION
• OFFERS AN OPPORTUNITY TO REFINE PROCESSES
• ELIMINATES PROCESS VARIATION
• ELIMINATES DISRUPTIONS
WHY AUTOMATE?
WHAT WE’LL COVER
• CHALLENGES
• WHAT/WHERE/WHEN/WHY/HOW?
• OVERVIEW OF AUTOMATION TOOLS/TECHNIQUES
WHAT WE’LL COVER
AUTOMATION CHALLENGESCHALLENGES
• REQUIRES A STRONG UNDERSTANDING OF THE PROCESS
• REQUIRES A LOT OF TRUST IN THE PROCESS
• REQUIRES A PLAN IF SOMETHING GOES SIDEWAYS
AUTOMATION CHALLENGES
HOW DO WE AUTOMATE?OBJECTIVE
• TOOLS
• SCRIPTING
• EXPERIENCE
HOW DO WE AUTOMATE?
WHERE CAN WE AUTOMATE?OBJECTIVE
• LOCALLY
• DEV ENVIRONMENTS
• PRODUCTION
WHERE CAN WE AUTOMATE
LOCALLYWHERE CAN WE AUTOMATE?
WHEN YOU THINK ABOUT ALL THE THINGS YOU HAVE TO DO TO START WORKING, IT’S ANNOYING RIGHT?
THERE ARE SOME EASY OPTIONS…BUT
ALFRED!
SWEET RIGHT?
WORKFLOWS!
LOCAL SCRIPTING
TOOLS
DEPLOYMENT/CI• PHING • JENKINS • ANSIBLE • TRAVIS CI • CUSTOM SHELL SCRIPTS
MONITORING• NEW RELIC • PINGDOM • CUSTOM SHELL SCRIPTS • TESTING TOOLS
TESTING TOOLS• PHPUNIT • PHPSPEC • BEHAT • CODECEPTION • RUNSCOPE
PROVISIONING• ANSIBLE • CHEF • PUPPET • SHELL SCRIPTS
THERE ARE OPTIONSYOU DON’T NEED ALL THESE TOOLS BUT…
CREATING A SOLUTION
SERVER DEPLOYMENTCREATING A SOLUTION
DIGITAL OCEAN APICREATING A SOLUTION
I DON’T WANT TO CLICK THAT MANY TIMES…
CREATING A SOLUTION
ANSIBLECREATING A SOLUTION
SERVER SETUP CAN BE HARDCREATING A SOLUTION
HERE’S WHAT I NEEDEDCREATING A SOLUTION
• PHP (AND DEPS) • MYSQL (AND DEPS) • APACHE (I KNOW…) • WORDPRESS CONFIGS
ANSIBLE STRUCTURECREATING A SOLUTION
ROLES
• Files
• Handlers
• Meta
• Tasks
• Templates
• Vars
PLAYBOOK
--- - name: Install Apache2 apt: pkg=apache2 state=installed update_cache=true register: apache2
- name: Install Apache2 MPM Prefork apt: pkg=apache2-pmp-prefork state=installed when: apache2|success register: prefork
- name: Install Apache2 MPM Prefork apt: pkg=apache2-pmp-prefork state=installed when: apache2|success register: prefork
--- - hosts: bd roles: - setup - iptables-setup - apache2-setup - mysql-setup - php-setup - users-setup
PLAYBOOK EXAMPLE
PHINGCREATING A SOLUTION
CONSIDERATIONSCREATING A SOLUTION
<?xml version="1.0" encoding="UTF-8"?> <project name="BDSO" default="build" basedir="./"> <property file="bdso.properties" /> <target name="composer"> <echo msg="Composer automatic updates aren't enabled at this point" /> <echo msg="Running self-update on composer" /> <exec command="sudo composer self-update" passthru="true" /> <echo msg="Installing new dependencies (if necessary)" /> <exec command="composer install --no-dev --no-scripts" passthru="true" /> </target>
<target name="build"> <phingcall target="composer" /> </target>
COMPOSER INSTALL WITH PHING
INSTALLING PHINGCREATING A SOLUTION
“phing/phing”: “2.*”
RUNNING PHINGCREATING A SOLUTION
vendor/bin/phing -f path/to/build.xml
BASH SCRIPTINGCREATING A SOLUTION
SCRIPTING COMMANDSCREATING A SOLUTION
MY FAVORITE UNIX COMMAND
find ./ -type f -name ‘*.php’ -print0 | xargs -0 grep -n ‘SearchTerm’
finder -s ‘SearchTerm’
MONITORING WITH SHELL SCRIPTS
CREATING A SOLUTION
THE BASICSCREATING A SOLUTION
• MAKE SURE SERVICES ARE RUNNING • CHECK SERVER LOAD • NOTIFICATIONS
SIMPLICITY OVER ALL ELSECONCLUSION
SECURITYCONCLUSION
AUTOMATION IS ATTAINABLECONCLUSION
QUESTIONS?CONCLUSION
FEEDBACKCONCLUSION
https://joind.in/16027
Twitter: @shrtwhitebldguy
IRC: mfrost503