class: center, middle # Welcome to DevOps State College --- # Why DevOps State College? * Build a community and make connections * Exchange ideas * Learn * Promote DevOps culture * Fun * Not tied to one vendor/technology --- # What is DevOps? Grand unification of philosophy around how to manage Development (programmers, application analysts, application owners, project managers) and IT Operations (system admins, network admins, security, data center, storage, database admin) in a tightly-integrated way. DevOps is the belief that working together as a collaborative team will produce better results, and break down barriers and finger pointing. --- # Devops basic principles * Culture * Lean * Automation * Measurement * Sharing --- # Common DevOps Strategies - Cultural * Find individuals that have both Dev and Ops skills and make liaisons * All Production environments mirrored by identical Development environments * Dev and Ops staff all have scheduled "office hours" * Focus on automated testing of all infrastructure and software components. * No app lauches without automated testing in place at both the infrastructure and app level. * Automated monitoring or platform monitors infrastruture and software layers 7x24, and pages Dev and Ops 7x24. * Both Dev and Ops have 7x24 accountablity for the performance and availability of the environment. * Regular code reviews are required, and Ops is involved with code reviews * Regular infrastructure architecture/config/outtage reviews are required, and Dev is involved with infrastructure reviews. * Shared sign-off by Dev and Ops before any application goes live * Infrastructure Automation --- # Common DevOps Strategies - Technical * Standardized Runbooks * Fully Automated Deployments * Continuous Deployment * Advanced Test Driven Development * Minimal Marketable Features * Ship When Done * Runbook Automation * Perpetual Beta * Automated Recovery * Metrics * Process Tooling --- # Future Presentations --- # How to Get There... * DevOps is a journey * Dev and Ops need to look introspectively to understand their strengths and challenges, and look for ways to contribute towards breaking down silos * Dev sharpen skills on ops/admin, Ops sharpen skills on coding * Revisit legacy architecture * Set small goals to be awesome * Don't automate what you don't understand * CLAMS: First, be lean. --- # Job Opportunities * AppliedTrust * AppliedTrust is hiring in Philadelphia, Dallas and Boulder offices. * For more information, see https://www.appliedtrust.com/jobs/ or talk to me afterwards --- # Intro to nix * Parts * Package Management * Operating System * Devops Orchestration --- # Package Management * What are we trying to solve? * Dependency Conflicts * Rollback without side effects * Multiple package versions installed at same time * Multiple users with different packages * Reproducability --- # How nix solves it * The nix store * hash based on not just package, but the entire dependency tree * Each user has a profile * nix daemon takes requests to build so nix store is not writable by users * Atomic upgrades and rollbacks * multiple packages of same or different version can be installed * packages are built linking from nix store path, so upgrading a dependency doesn't alter the package itself. * ````/nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/```` The hash prefixing the name is a cryptographic hash of the package’s build dependency graph * nix expressions (function package language) * expressions are deterministic (most of the time) - a rebuild should be identical to the original --- # Operating System * nixos - Applying nix to the entire operating system * built on the functionally declared nix expressions of package manager * A "single" config file by default * packages installed are listed in the config * configuration files can be embedded in config * functional programming allows creating derivations of configs * Can import other .nix files to modularize the config * can override params for packages --- # Switching your config * nixos-rebuild * allows you to test a config * allows you to switch to a new config immediately and on future boots * allows you to set a config to be used on next boot without switching now * allows you to add a new grub entry for testing the new config * allows you to build the config without doing anything * allows you to upgrade a system to latest packages provided by nix channel --- # Orchestration * nixops * uses ssh to deploy nix configs to a series of servers * built on modularity and declarative definitions seen in above 2 layers --- class: center, middle # Live Demo