The release process is one of the cornerstones of every customer oriented software development effort. Although teams easily embrace different tools used to implement release management, some practices inside the release process could use an improvement (or at least some automation) - in my experience teams often still version their software manually and package their software as war or jar files.This talk will showcase two useful Gradle plugins, available in the Netflix OSS Nebula portfolio: the release plugin which takes an opinionated semantic versioning approach to versioning of software and the OsPackage plugin which allows us to package our software as native Linux RPM or DEB packages. A live demo will show you the advantages of such versioning and packaging approaches.
3. The talk...
● Software release process
● Versioning
● Packaging
● Netflix - the OSS company
● Showcase
4. Software release process
Release management is the process of managing, planning,
scheduling and controlling a software build through different
stages and environments; including testing and deploying
software releases
5. Software release process
● For a complex software product, the release process is complex
(dependencies, environments, configurations, per-customer customizations,
governance) - there are specialized tools to help manage it
● We will focus on the micro-level - the life of one software module and two
important, but sometimes neglected aspects of that life
6. Life of a software module (from the release perspective)
● All code is committed and reviewed (trunk based, pull requests, git flow….)
● The stable code point-in-time is (automatically) versioned and tagged
● The module is built, (automatically) unit/integration/functionally tested
● The module is packaged and stored to a package repository
● The module is transferred to the deployment site and executed
7. What do you do? (as far as versioning and packaging)
8. Versioning
#1 Style - snapshot/release, semantic, roll-your-own ?
#2 Support - manual version bump, mvn release plugin,
CI tool driven versioning, mvn/gradle roll-your-own
versioning implementation, gradle nebula release ?
9. Packaging
#1 Type - ear, war, jar, docker, native ?
#2 Distribution - shared drive, copy-to-target, package repo ?
#3 Execution - deployed to container/appsrv, java -jar,
docker-compose up, service MyApp start ?
10. Netflix OSS
● Everybody knows Netflix, the video streaming provider
● Netflix is an OSS provider too - https://netflix.github.io
● Microservices FTW! - Eureka, Archaius, Ribbon, Hystrix….
● Build and deployment - Nebula, Aminator, Spinnaker….
● ...and more… (big data, content encoding, data persistence...)
11. Netflix Nebula
● A set of powerful gradle plugins - https://nebula-plugins.github.io/
● Nebula Release plugin - simplifying a semantic versioning
approach to gradle releases
● Nebula Ospackage plugin - build a RPM/DEB package for native
deployment via package managers