More Related Content
Similar to Groovy in the Cloud (20)
More from Daniel Woods (9)
Groovy in the Cloud
- 1. Groovy in the Cloud
Dan Woods
@danveloper
Code: h(ps://github.com/danveloper/groovy-in-the-cloud
- 13. At the end of the day, Groovy is
Java, so anything Java can do,
Groovy can do -- and simpler!
- 14. Groovy can act in mu.ple roles: as a powerful, dynamic scrip.ng
tool or as a fully compiled programming language.
- 16. Agenda
• Groovy microservices with Ratpack
• Immutable infrastructure
• Gradle OS Package Plugin
• Gradle + Docker
• sshoogr
• Jenkins Job DSL
• Spinnaker
- 17. Microservices with Groovy and Ratpack
@Grab('io.ratpack:ratpack-groovy:1.4.0-rc-1')
import static ratpack.groovy.Groovy.ratpack
import static ratpack.jackson.Jackson.json
ratpack {
handlers {
get {
render(json([message: "Hello World!"]))
}
}
}
- 20. Gradle OS Package Plugin
buildscript {
repositories {
jcenter()
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'io.ratpack:ratpack-gradle:1.4.0-rc-1'
classpath 'gradle.plugin.com.netflix.nebula:gradle-ospackage-plugin:3.6.1'
}
}
apply plugin: 'io.ratpack.ratpack-groovy'
apply plugin: 'nebula.ospackage'
version = "1.0.0"
repositories {
jcenter()
}
ospackage {
// ...
}
buildDeb {
// ...
}
- 21. Gradle OS Package Plugin
ospackage {
packageName = "myapp"
release '3'
into "/opt/myapp"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") { into "/" }
}
buildDeb {
dependsOn installDist
//requires("nginx")
//requires("mysql-client")
preInstall file("scripts/preInstall.sh")
postInstall file("scripts/postInstall.sh")
}
- 22. Gradle Docker Plugin
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'io.ratpack:ratpack-gradle:1.4.0-rc-1'
classpath 'com.bmuschko:gradle-docker-plugin:3.0.1'
}
}
apply plugin: 'io.ratpack.ratpack-groovy'
apply plugin: 'com.bmuschko.docker-remote-api'
apply plugin: 'com.bmuschko.docker-java-application'
version = "1.0.0"
repositories {
jcenter()
}
docker {
javaApplication {
maintainer = 'Dan Woods "daniel.p.woods@gmail.com"'
}
}
- 23. Gradle Docker Plugin - Build Image
$ ./gradlew dockerBuildImage
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:startScripts UP-TO-DATE
:distTar UP-TO-DATE
:dockerCopyDistResources UP-TO-DATE
:dockerDistTar
:dockerBuildImage
Building image using context '/Users/danw/Documents/uberconf-2016/groovy-cloud-code/docker-plugin/build/docker'.
Using tag 'docker-plugin:1.0.0' for image.
Step 1 : FROM java
---> 264282a59a95
Step 2 : MAINTAINER Dan Woods "daniel.p.woods@gmail.com"
---> Using cache
---> 46c65408f762
Step 3 : ADD docker-plugin-1.0.0.tar /
---> Using cache
---> 41dc34567fae
Step 4 : ENTRYPOINT /docker-plugin-1.0.0/bin/docker-plugin
---> Using cache
---> fad9ba971b19
Step 5 : EXPOSE 5050
---> Running in 0bd76fcb5e15
---> 43b2d30640e2
Removing intermediate container 0bd76fcb5e15
Successfully built 43b2d30640e2
Created image with ID '43b2d30640e2'.
BUILD SUCCESSFUL
Total time: 10.974 secs
- 25. Serverless is a great choice for super lightweight microservices that
ingest some data, process it, and respond quickly.
- 33. Ensures that if your Jenkins CI
system crashes, you can quickly and
safely recover
- 34. Wri$en in Groovy, so you can do
any programma5c processing you
want when configuring your builds!
- 35. Jenkins Job DSL
def gitUrl = 'git://github.com/myorg/myapp.git'
def allowedUsers = ['dan', 'ben', 'ernest']
job('PROJ-build') {
scm {
git(gitUrl)
}
// no trigger
authorization {
allowedUsers.each { user ->
permission('hudson.model.Item.Build', user)
}
}
steps {
shell('gradlew clean build')
}
}
- 42. Easy to build plugins and adjust
na1ve func1onality by incorpora1ng
Groovy modules