releasing with gradle (gradle summit 2014)

Post on 27-Aug-2014

765 Views

Category:

Software

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slidedeck for "Releasing with Gradle" talk from GradleSummit 2014 in Santa Clara, CA

TRANSCRIPT

Releasing with

Gradlesnippets, puzzles, (best) practices

René GröschkePrincipal Engineer, GradlewareGradle Exchange 2014

Motivation

#gradlesummit 3/27

When doing a Release

#gradlesummit

update your project versiondeal with your vcs (tagging, branching)publish/deploy the released distributioninteract with your issue trackerdouble check your dependenciesrollback if build failed...

·

·

·

·

·

·

·

4/27

releasing manually?

#gradlesummit 5/27

!

#gradlesummit 6/27

demo app

#gradlesummit 7/27

project versioning

declaring a project version

#gradlesummit

// not optimal version = "1.1-SNAPSHOT"

// better version = file("version.txt").text ...

BUILD.GRADLE

8/27

project versioning (2)

put some semantics in your project version!

#gradlesummit

version = MyVersion.load(file("version.properties"))

class MyVersion { int major, minor, bugfix, build

String toString(){ "${major}.${minor}.${bugfix}.${build}" } ... }

BUILD.GRADLE

9/27

puzzle #1a (major|minor|bugfix) release

#gradlesummit 10/27

source versioning

interacting with your vcs (option 1)

#gradlesummit

buildscript { repositories { jcenter() } dependencies { classpath 'org.ajoberstar:gradle-git:0.8.0' } }

import org.ajoberstar.grgit.* ext.repo = Grgit.open(file('.'))

task tagRelease << { repo.tag.add {

name = version

message = "Release of ${version}"

}

}

BUILD.GRADLE

11/27

source versioning (2)

interacting with your vcs (option 2)

#gradlesummit

task tagGitWorkspace(type:Exec){ commandLine 'git', 'tag', project.version.toString() }

BUILD.GRADLE

12/27

source versioning (3)

sidenote: reading branch/commit via file io

#gradlesummit

def branch = file(".git/HEAD").text - "ref: refs/heads/" def commitId = file(".git/refs/heads/$branch").text

BUILD.GRADLE

13/27

puzzle #2a clean working copy

#gradlesummit 14/27

connect your issue tracker

worth the effort

#gradlesummit

keep version stati in syncdocument tackled issuescheck project status...

·

·

·

·

15/27

#gradlesummit 16/27

connect your issue tracker (2)

getting started

#gradlesummit

explore the api of your tool of choice!jira, youtrack, trello, githubREST is your friendREST is easy with gradle & groovy...

·

·

·

·

·

17/27

#gradlesummit

"but we have a custom tool!?"

GET RID OF IT!

18/27

puzzle #3connect your issue tracker

#gradlesummit 19/27

publishing

depends on your product

#gradlesummit

maven repository, bintray, maven-central out of the boxs3, ftp, ssh via custom gradle tasksfeed proprietary tools (e.g. liverebel)...

·

·

·

·

20/27

when something went wrong...

option 1

#gradlesummit 21/27

when something went wrong...

option 2: react on your build result

#gradlesummit

... gradle.addBuildListener(new BuildAdapter(){ void buildFinished(def result){ result.failure ? gitReset() : gitPush() } }) ...

BUILD.GRADLE

22/27

links and pointers

#gradlesummit

gradle.orggradleware.comsemantic version libraryGradle-Git Plugin (more than just a git plugin)Gradle SVN Kit pluginliverebelmy demo app

·

·

·

·

·

·

·

23/27

Q&A

#gradlesummit 24/27

Thanks for listening!

twitter @breskeby

www www.gradleware.com

github github.com/breskeby

references

#gradlesummit

http://devopsreactions.tumblr.com/post/70883605526/final-straight-on-a-projecthttp://www.youtube.com/watch?v=UyLUCnTdu7ohttp://devopsreactions.tumblr.com/post/49078186169/go-live-day

·

·

·

26/27

top related