open-source DevOps tools including: Chef, Chef Server, Test Kitchen and Omnibus Founded in 2008 (as Opscode) Approximately 200 employees (and growing fast) Offices in Seattle, San Francisco and London
Inc. Currently I’m the Release Engineering Lead for Chef Software, Inc. Previously I worked as an engineer on the Chef Server and Push Jobs products Responsible for much of Chef’s early Windows support In the past I worked for IBM and Fox Interactive Media
release infrastructure is managed by Chef! Release infrastructure currently runs on EC2 (minus obvious platforms like AIX, OS X and Solaris) We’ll be moving to completely ephemeral CI nodes later this year
installable artifacts The final artifact contains a product’s code along with ALL of its dependencies Supports all platforms we ship Chef on (Linux, FreeBSD, Mac OS X, Solaris, Windows etc.) Completely open-source and available at: https://github.com/chef/omnibus
| Using config from 'omnibus.rb' [Project] I | Loading project `chef-server' from `config/projects/chef-server.rb'. ...LOTS OF COMPILING... [HealthCheck] I | Running health check on chef-server ...LOTS OF HEALTH CHECKING... [Packager::DEB] I | Rendering `resources/deb/control.erb' to `/tmp/chef-server-core20150420-22760/DEBIAN/control' [Packager::DEB] I | Rendering `resources/deb/md5sums.erb' to `/tmp/chef-server-core20150420-22760/DEBIAN/md5sums' [Packager::DEB] I | Creating .deb file [Packager::DEB] I | $ fakeroot dpkg-deb -z9 -Zgzip -D --build /tmp/chef-server-core20150420-2276 chef-server- core_12.0.8-1_amd64.deb I | dpkg-deb: building package `chef-server-core' in `chef-server-core_12.0.8-1_amd64.deb'. [Compressor] I | No compressor defined for `debian'. [Project: chef-server] I | Building version manifest
pure-Ruby interface Lightweight (all deps come from the Ruby standard library) Smooths over rough edges in the Artifactory REST API and exposes resources which don’t exist in the main Artifactory REST API Used as the underpinning for all of Chef’s Ruby-based Artifactory integrations Completely open-source and available at: https://github.com/chef/artifactory-client
TEST omnibus-current-local omnibus-stable-local chef/current chef/stable EFFORTLESSLY PUBLISH OMNIBUS ARTIFACTS FROM CI/CD OMNIBUS ARTIFACTORY PUBLISHER
Writes the artifact to a path that adheres to the Omnibus custom repo layout Converts all Omnibus metadata values to Artifactory artifact properties Can be accessed via a command line or Ruby interface Completely open-source and ships with the Omnibus framework
chef-server-core_12.0.8-1_amd64.deb.metadata.json $ omnibus publish artifactory omnibus-current-local pkg/chef-server-core_12.0.8-1_amd64.deb # The publisher is glob-aware so uploading multiple packages at once is easy $ omnibus publish artifactory omnibus-current-local “pkg/**/*.{bff,deb,msi,rpm,sh,solaris}” [CLI] I | Using config from 'omnibus.rb' [ArtifactoryPublisher] I | Starting artifactory publisher [ArtifactoryPublisher] I | Uploading 'chef-server-core_12.0.8-1_amd64.deb' Uploaded 'chef-server-core_12.0.8-1_amd64.deb'
Plugins are implemented as Ruby gems Plugins are fully testable with RSpec Works with most any chat service including: HipChat, Slack, IRC and Campfire Completely open-source and available at: https://www.lita.io/
can be performed while on-the-go All promotions are recorded in chat history Completely open-source and available at: https://github.com/chef/lita-artifactory
DON’T HAVE TO Jenkins / Delivery PackageCloud / Omnitruck Artifactory Pro BUILD PUBLISH TEST omnibus-current-local omnibus-stable-local chef/current chef/stable
Artifactory repo and the associated PackageCloud repo Responds to all Artifactory storage events so current state of the Artifactory repo is always reflected in the associated PackageCloud repo Takes advantage of groovyx.net.http.AsyncHTTPBuilder so package pushes occur in parallel and do not block in the Artifactory user interface The script does not live in its own repo yet but source is available at: https://gist.github.com/schisamo/89336bd63e2724e87f1b
of Artifactory Pro Includes primitive resources for managing the Artifactory Pro configuration in an idempotent way Will be open sourced *soon* at: https://github.com/opscode-cookbooks/artifactory
groups ######################################################################### artifactory_group 'deployers' do description 'A group for users who can deploy artifacts to any repo' auto_join false end ######################################################################### # Permission Targets ######################################################################### artifactory_permission_target 'Deploy' do repositories ['ANY'] groups( deployers: ['deploy', 'annotate', 'read'] ) end
and service accounts ######################################################################### artifactory_users = encrypted_data_bag_item_for_environment('artifactory', 'users') artifactory_users.each do |user_name, user_data| artifactory_user user_name do email user_data['email'] password user_data['password_clear'] admin user_data['admin'] profile_updatable true groups user_data['groups'] if user_data['groups'] end end
Create an Omnibus-specific repository layout ######################################################################### artifactory_layout 'omnibus-default' do artifact_path_pattern '[orgPath]/[module]/[packageBaseVersion<[0-9A-Za-z._-]*>](+)([folderIteg...' distinctive_descriptor_path_pattern false folder_integration_revision_reg_exp '(?:\d{14})?(?:\.)?(?:git\.\d+\.[a-f0-9]{7})?' file_integration_revision_reg_exp '(?:\d{14})?(?:\.)?(?:git\.\d+\.[a-f0-9]{7})?' end ######################################################################### # Create Chef’s various Omnibus repositories ######################################################################### artifactory_repository 'omnibus-current-local' do description 'Integration/nightly builds which have passed basic testing' repo_layout_ref 'omnibus-default' max_unique_snapshots 10 end artifactory_repository 'omnibus-stable-local' do description 'Promoted builds which have passed deeper UAT' repo_layout_ref 'omnibus-default' end
for the /api/build resource Ruby Client: Add support for the Artifactory Query Language (AQL) Lita Plugin: Add a search command (think latest current or latest stable)