Creating a dynamic software deployment solution using free/libre software



Similar documents
Continuous Integration using Docker & Jenkins

Using Vagrant for Magento development. Alexander

DevOps Course Content

DevOps and SUSE From check-in to deployment

depl Documentation Release depl contributors

Automated deployment of virtualization-based research models of distributed computer systems

System management with Spacewalk

How Bigtop Leveraged Docker for Build Automation and One-Click Hadoop Provisioning

Of Pets and Cattle and Hearts

Platform as a Service and Container Clouds

DevOps. Building a Continuous Delivery Pipeline

System management with Spacewalk

Automation & Open Source. How to tame the Cloud?

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Tools and Integration

Open Source Datacenter Conference 2011 System Management with RHN Satellite. Dirk Herrmann, Solution Architect, Red Hat

"Infrastructure as Code" für Anfänger. XP Days Germany David Völkel

Our Puppet Story Patterns and Learnings

Timofey Turenko. Kirill Krinkin St-Petersburg Electrotechnical University

Ansible. Configuration management tool and ad hoc solution. Marcel Nijenhof

SUSE Manager. A Comprehensive Linux Server Management the Linux Way. Name. Title

Citrix XenServer 5.6 OpenSource Xen 2.6 on RHEL 5 OpenSource Xen 3.2 on Debian 5.0(Lenny)

Jenkins and Chef Infrastructure CI and Application Deployment

Cloud-init. Marc Skinner - Principal Solutions Architect Michael Heldebrant - Solutions Architect Red Hat

Continuous Integration and Automatic Testing for the FLUKA release using Jenkins (and Docker)

Software Defined Everything

lxc and cgroups in practice sesja linuksowa 2012 wojciech wirkijowski wojciech /at/ wirkijowski /dot/ pl

Practicing Continuous Delivery using Hudson. Winston Prakash Oracle Corporation

Skip the But it Works on My Machine Excuse with Vagrant

ISLET: Jon Schipp, Ohio Linux Fest An Attempt to Improve Linux-based Software Training

Advanced Systems Management with Machinery

Continuous Delivery for Alfresco Solutions. Satisfied customers and happy developers with!! Continuous Delivery!

Jenkins World Tour 2015 Santa Clara, CA, September 2-3

Deploying Foreman in Enterprise Environments 2.0. best practices and lessons learned. Nils Domrose Cologne, August,

Deploy the ExtraHop Discover Appliance with Hyper-V

Managing your Red Hat Enterprise Linux guests with RHN Satellite

Jenkins: The Definitive Guide

Red Hat System Administration 1(RH124) is Designed for IT Professionals who are new to Linux.

Déployer son propre cloud avec OpenStack. GULL François Deppierraz

My DevOps Journey by Billy Foss, Engineering Services Architect, CA Technologies

Simple and powerful site deployment with capistrano

CI Pipeline with Docker

Continuous Integration and Delivery at NSIDC

Deploy and test ovirt using nested virtualization environments. Mark Wu

DevOoops Increase awareness around DevOps infra security. Gianluca

Continuous Integration In challenging environments w/ Ansible. PyCon5 Italy, Cesare Placanica

Hudson Continous Integration Server. Stefan Saasen,

DevOps Stack. Reid Holmes. Chris Parnin:

Prepared for: How to Become Cloud Backup Provider

What Does Tequila Have to Do with Managing Macs? Using Open Source Tools to Manage Mac OS in the Enterprise!

Enterprise PaaS Evaluation Guide

Syncplicity On-Premise Storage Connector

Application Release Automation (ARA) Vs. Continuous Delivery

Automated build service to facilitate Continuous Delivery

Zero-Touch Drupal Deployment

How To Set Up Egnyte For Netapp Sync For Netapp

Introduction to CloudScript

MuL SDN Controller HOWTO for pre-packaged VM

Java PaaS Enabling CI, CD, and DevOps

OnCommand Performance Manager 1.1

Remote Desktop With P2P VNC

Taking Drupal development to the Cloud. Karel Bemelmans

The Bro Network Security Monitor

Version Control Your Jenkins Jobs with Jenkins Job Builder

Paul Barham Program Manager - Java. David Staheli (dastahel@microsoft.com) Software Development Manager - Java

Building a Continuous Integration Pipeline with Docker

Advantages and Disadvantages of Application Network Marketing Systems

AlienVault Unified Security Management (USM) 4.x-5.x. Deploying HIDS Agents to Linux Hosts

How To Install Eucalyptus (Cont'D) On A Cloud) On An Ubuntu Or Linux (Contd) Or A Windows 7 (Cont') (Cont'T) (Bsd) (Dll) (Amd)

Beginners guide to continuous integration. Gilles QUERRET Riverside Software

Alinto Mail Server Pro

A central continuous integration platform

ALERT installation setup

You ll need to have: It d be great if you have:

Options in Open Source Virtualization and Cloud Computing. Andrew Hadinyoto Republic Polytechnic

Using DevOps Tools to Achieve Continuous Integration

SIG-NOC Meeting - Stuttgart 04/08/2015 Icinga - Open Source Monitoring

Xen Virtualization: Xen (source) and XenServer

Continuous security audit automation with Spacewalk, Puppet, Mcollective and SCAP

Monitoring Clearswift Gateways with SCOM

Cloud Simulator for Scalability Testing

Cloud Computing for Control Systems CERN Openlab Summer Student Program 9/9/2011 ARSALAAN AHMED SHAIKH

OS Installation: CentOS 5.8

White Paper Server. SUSE Linux Enterprise Server 12 Modules

Continuous Delivery of Debian packages. Michael Prokop

Release Notes for Fuel and Fuel Web Version 3.0.1

Cloud Security with Stackato

Continuous integration with Jenkins CI

A Complete Open Cloud Storage, Virt, IaaS, PaaS. Dave Neary Open Source and Standards, Red Hat

Configuring an OpenNMS Stand-by Server

Eucalyptus Hybrid Cloud Guide

KVM, OpenStack, and the Open Cloud

Beginner s guide to continuous integration. Gilles QUERRET Riverside Software

How OpenStack is implemented at GMO Public Cloud service

From Idea to Working Deployment:

Transcription:

Creating a dynamic software deployment solution using free/libre software LinuxTag 2014 08.05.2014 Mattias Giese Solutions Architect for Systems Management and Monitoring giese@b1-systems.de - Linux/Open Source Consulting, Training, Support & Development

Agenda solution using free/libre software 2 / 51

Agenda Workflow/Process Overview SCM Hooks Jenkins Open Build Service Spacewalk Puppet/Foreman solution using free/libre software 3 / 51

Process Overview solution using free/libre software 4 / 51

What are we trying to accomplish? Continuous Integration New features should be merged as quickly as possible Confidence that changes don t break production Base for test-driven development (TDD) Continuous Delivery We don t want to deploy every revision of our software But would be cool if we could solution using free/libre software 5 / 51

Process Overview solution using free/libre software 6 / 51

Code Changes and Commit solution using free/libre software 7 / 51

solution using free/libre software 8 / 51

Using SCM-Hooks Hooks do stuff supported in many SCMs git-hooks may be run at different phases Use Cases: Syntax check Linter Enforcement of other policy Triggering of other processes We want to trigger Jenkins! solution using free/libre software 9 / 51

Using SCM-Hooks Simple post-receive hook #!/bin/bash AUTH= myuser:pass JOB=myjob TOKEN=mybuildtoken echo Poking jenkins /usr/bin/curl --user $AUTH -s \ "http://jenkins:8080/job/$job/build?token=$token" solution using free/libre software 10 / 51

Testing with Jenkins solution using free/libre software 11 / 51

Testing with Jenkins solution using free/libre software 12 / 51

Jenkins Overview The artist formerly known as Hudson The first address for CI can be used as Cron, general Job-Scheduler or Monitor 600+ plugins (nifty) Alternatives: Travis-CI, CruiseControl, Bamboo solution using free/libre software 13 / 51

Jenkins Overview Must-Have Plugins Warnings Post-Build Build Pipeline Promoted Builds Git Chuck Norris solution using free/libre software 14 / 51

Usage in this scenario Jenkins is triggered through git post-receive hook checks out git-repo (specific branch) runs configured build steps after successful build: trigger packaging process solution using free/libre software 15 / 51

Jenkins Post-Build Post-Build Step, complete #!/bin/bash auth= obsuser:passwd project= foobar main_project= internal-tools git_host= git.example.com obs_api= https://api.obs.example.com branch= development service="<services> <service name="tar_scm"> <param name="scm">git</param> <param name="url">git://${git_url}/${project}.git</param> <param name="revision">$git_commit</param> </service> [...] </services>" echo $service curl -u $auth -s -X PUT -T - \ "$obs_api/source/$main_project/$project/_service" solution using free/libre software 16 / 51

Post-Build Step, Service File <services> <service name="tar_scm"> <param name="scm">git</param> <param name="url">git://${git_url}/${project}.git</param> <param name="revision">$git_commit</param> </service> <service name="recompress"> <param name="file">*$project*.tar</param> <param name="compression">bz2</param> </service> <service name="download_url"> <param name="path">/$project/$branch/${project}.spec</param> <param name="host">$git_host</param> <param name="protocol">https</param> </service> <service name="set_version"> </service> </services> solution using free/libre software 17 / 51

Jenkins Post-Build Post-Build Step, the trigger itself echo $service curl -u $auth -s -X PUT -T - \ "$obs_api/source/$main_project/$project/_service" solution using free/libre software 18 / 51

Packaging solution using free/libre software 19 / 51

Packaging with OBS solution using free/libre software 20 / 51

Open Build Service Overview Build Platform for packages or live media (kiwi) builds RPM (SUSE/RHEL), DPKG (Debian/Ubuntu) and Pacman (Archlinux) public reference install at build.opensuse.org Central build platform for opensuse solution using free/libre software 21 / 51

Open Build Service Overview Extensive API (CLI is an API client) can run hooks after successful publishing of a package/project Alternatives: None, koji if all you want is RHEL solution using free/libre software 22 / 51

Open Build Service Overview solution using free/libre software 23 / 51

Usage in this scenario Open Build Service is used to build packages for different distributions/architectures to trigger Spacewalk to sync packages solution using free/libre software 24 / 51

Open Build Service Overview solution using free/libre software 25 / 51

OBS should trigger Spacewalk! OBS published-hook #!/usr/bin/env python2 import xmlrpclib import sys SPACEWALK_URL = "http://spacewalk.example.com/rpc/api" SPACEWALK_LOGIN = "apiuser" SPACEWALK_PASSWORD = "testing" try: channel = sys.argv[1] client = xmlrpclib.server(spacewalk_url, verbose=0) key = client.auth.login(spacewalk_login, SPACEWALK_PASSWORD) client.channel.software.syncrepo(key,channel) client.auth.logout(key) except Exception, e: # Gotta catch em all print Failed to sync channel:, e sys.exit(1) solution using free/libre software 26 / 51

Publishing solution using free/libre software 27 / 51

Package Publishing with Spacewalk solution using free/libre software 28 / 51

Spacewalk Overview System Lifecycle Management Extensive API runs on RHEL/Fedora and Derivatives supports SUSE/RHEL and Derivatives, Debian somewhat. Base for SUSE Manager and Satellite (changing with 6.x) Alternatives: Pulp, if all you want is RHEL solution using free/libre software 29 / 51

Usage in this scenario Provisioning of packages Staging of packages Automatic synchronization of packages in Development channel On-Demand/automatic promotion of channel contents to integration/production stages solution using free/libre software 30 / 51

Delivery solution using free/libre software 31 / 51

Package Delivery with Puppet/Foreman solution using free/libre software 32 / 51

Puppet Configuration Management Tool based on Ruby, easy to learn DSL runs on many platforms (Linux, *nix, Windows) abstracts differences between those platforms is idempotent features Inventory and Reporting on Infrastructure changes Alternatives: CFEngine, Chef, maybe Ansible or SaltStack solution using free/libre software 33 / 51

Simple Puppet manifest package{ myapp : ensure => latest, } file{ /etc/myapp/config : ensure => file, owner => serviceuser, group => servicegroup, mode => 0640, content => template( myapp-config.erb ), require => Package[ myapp ], notify => Service[ myapp ], } service{ myapp : ensure => running, enable => true, require => Package[ myapp ], } solution using free/libre software 34 / 51

The Foreman WebApp and API to automate infrastructure integrates well with Puppet can manage DHCP, DNS, TFTP, Puppet, Clouds" features nice reporting and auditing Alternatives: Provisioning: Cobbler, Razor Management: Puppet Dashboard/Puppet Enterprise Console, Rudder (CFEngine) solution using free/libre software 35 / 51

Architecture Overview solution using free/libre software 36 / 51

Usage of Foreman in this setup Provisioning of new bare-metal or virtual machines Single source of truth for Puppet Reporting and Auditing of Infrastructure Idea: Use Foreman-API to trigger VM provisioning for acceptance tests solution using free/libre software 37 / 51

System/Acceptance Tests solution using free/libre software 38 / 51

System/Acceptance Tests solution using free/libre software 39 / 51

Overview Vagrant Docker Smoketests Serverspec solution using free/libre software 40 / 51

Vagrant Wrapper around different Hypervisors and Provisioners supports VirtualBox (First Class), VMware (commercial), libvirtd (somewhat) and Docker runs on Linux, Mac OS X, Windows Provisioners may be Shell, Puppet, Chef and so on Easy to use: 1 mkdir myvm; cd myvm 2 vagrant init precise64 http://files.vagrantup.com/precise64.box 3 vagrant up 4 vagrant ssh 5 vagrant halt/destroy solution using free/libre software 41 / 51

Docker chroot on steroids designed to execute and contain one process uses LXC, cgroups, UnionFS(AUFS) does not need a custom kernel (anymore) runs on many current Linux distributions yep, it also runs on current RHEL6(.5) and SLES12 once released not useful in every scenario (no mounts, modules, init and so on) solution using free/libre software 42 / 51

VM with no VM overhead Example: Initialization, Execution, Destruction $ time docker run -t -i smoketest-suse hostname d20cdb21deb3 real 0m0.230s user 0m0.007s sys 0m0.003s $ time docker run -t -i --rm \ smoketest-suse hostname e1e1b445465d real 0m4.250s user 0m0.000s sys 0m0.010s solution using free/libre software 43 / 51

Smoketest with Docker Application of Puppet Manifest: Does it blow up? $ docker run -t -i smoketest-suse \ bash -c "r10k deploy -p; puppet apply \ --detailed-exitcodes --modulepath=/test/modules \ -e include memcached " solution using free/libre software 44 / 51

Serverspec based on RSpec executes tests locally or remotely (ssh) integrates with Vagrant somewhat Supported resources: cgroup, command, cron, default_gateway, file, group, host, iis_app_pool, iis_website, interface, ipfilter, iptables, kernel_module and more solution using free/libre software 45 / 51

Serverspec - Example Spec Simple System/Acceptance Test for memcached (excerpt) describe package( memcached ) do it { should be_installed } end describe service( memcached ) do it { should be_enabled } it { should be_running } end describe port(11211) do it { should be_listening.with( tcp ) } it { should be_listening.with( udp ) } end solution using free/libre software 46 / 51

Serverspec Example Spec Simple System/Acceptance Test for memcached (excerpt) describe file( /etc/sysconfig/memcached ) do it { should be_readable } its(:content) { should match /PORT="11211"/ } end describe command( echo -e \ "add Test 0 60 11\r\nHello World\r" nc localhost 11211 ) do it { should return_stdout /^STORED$/ } end describe command( echo -e "get Test\r" nc localhost 11211 ) do it { should return_stdout /^Hello World$/ } end solution using free/libre software 47 / 51

Serverspec Example Run Test Run for memcached, Part 1 $ rake spec SPEC_OPTS="-fd" (in /home/b1user/serverspec) /usr/bin/ruby -S rspec spec/default/memcached_spec.rb Package "memcached" should be installed Service "memcached" should be enabled (FAILED - 1) should be running Port "11211" should be listening should be listening solution using free/libre software 48 / 51

Test Run for memcached, Part 2 File "/etc/sysconfig/memcached" should be readable content should match /PORT="11211"/ Command "echo -e "add Test 0 60 11\r\nHello World\r" nc localhost 11211" should return stdout /^STORED$/ Command "echo -e "get Test\r" nc localhost 11211" should return stdout /^Hello World$/ [...] Failures: 1) Service "memcached" should be enabled Failure/Error: it { should be_enabled } sudo chkconfig --list memcached grep 3:on expected Service "memcached" to be enabled #./spec/default/memcached_spec.rb:8 Finished in 11.36 seconds 12 examples, 1 failure [...] solution using free/libre software 49 / 51

What s Next? After successful acceptance test 1 Promotion of packages from Dev to Test/Integration software channel (Spacewalk) 2 Integration Test of packages 3 Promotion of packages from Test to Prod 4 Canary Testing does it blow up in Prod? 5 Profit solution using free/libre software 50 / 51

Thank you for your attention! If you have further questions please contact info@b1-systems.de or call +49 (0)8457-931096 - Linux/Open Source Consulting, Training, Support & Development