Project

General

Profile

JenkinsGroovy » History » Version 14

Andreas Kohlbecker, 08/15/2013 07:39 PM

1 1 Andreas Kohlbecker
2
# Groovy Scripts for Jenkins
3
4
5
You can evaluate groovy scripts in the Jenkins _Script Console_.
6
7
8
There are several plugins which can be _programmed_ with Groovy:
9
10 4 Andreas Kohlbecker
* [Groovy plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+plugin)
11
12
* [Dynamic Parameter Plug-in](https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Dynamic+Parameter+Plug-in)
13
14 9 Andreas Kohlbecker
* [Groovy Postbuild Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin)
15
16 4 Andreas Kohlbecker
* [Groovy Remote Control](http://groovy.codehaus.org/modules/remote/)
17
18
* [Scriptler plugin](https://wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin)
19 1 Andreas Kohlbecker
20
21
22
----
23
24
25 6 Andreas Kohlbecker
### Get all versions of an artifact from a maven repository
26
27 1 Andreas Kohlbecker
~~~
28
def metadata = new XmlSlurper().parse("http://wp5.e-taxonomy.eu/mavenrepo/eu/etaxonomy/cdm-server/maven-metadata.xml")
29 5 Andreas Kohlbecker
metadata.versioning.versions.version.each{
30
	  println "> " + it
31 1 Andreas Kohlbecker
}
32
~~~
33 2 Andreas Kohlbecker
34
doc:
35
36
* http://groovy.codehaus.org/api/groovy/util/XmlSlurper.html
37 3 Andreas Kohlbecker
38 1 Andreas Kohlbecker
* http://www.ibm.com/developerworks/java/library/j-pg05199/
39 6 Andreas Kohlbecker
40
41 7 Andreas Kohlbecker
the same for the **Dynamic Parameter Plug-in** which is very nice in conjunction with the *[Repository Connector Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Repository+Connector+Plugin) 
42 6 Andreas Kohlbecker
43
44
~~~
45
def metadata = new XmlSlurper().parse("http://wp5.e-taxonomy.eu/mavenrepo/eu/etaxonomy/cdm-server/maven-metadata.xml")
46
def list = []
47
metadata.versioning.versions.version.each{
48
  list.add(it)
49
}
50 8 Andreas Kohlbecker
return return list.reverse(true)
51 6 Andreas Kohlbecker
~~~
52 10 Andreas Kohlbecker
53
54
### find last bean in datasources.xml
55
56
57
~~~
58
// find last bean in datasources.xml
59
def beans = new XmlParser().parse("/etc/cdmserver/datasources.xml")
60
def lastBean = null
61
beans.bean.findAll{it.attribute("class") == "com.mchange.v2.c3p0.ComboPooledDataSource"}.each{  
62
    lastBean = it
63
}
64
println lastBean
65
~~~
66 11 Andreas Kohlbecker
67
68 12 Andreas Kohlbecker
### monitor cdm server until all instances are started up
69 11 Andreas Kohlbecker
70
71
~~~
72 1 Andreas Kohlbecker
import groovy.json.JsonSlurper
73 12 Andreas Kohlbecker
import groovy.time.TimeCategory
74 11 Andreas Kohlbecker
75 1 Andreas Kohlbecker
// Configuration
76
def cdmserverUrl = "http://test.e-taxonomy.eu/cdmserver/"
77 12 Andreas Kohlbecker
def usr = "xxx"
78
def pwd = "yyy"
79
def timeout = 1 // minutes
80
  
81
// init
82
def timeOver
83
use(TimeCategory) {
84
  timeOver = timeout.minutes.from.now
85
}
86 1 Andreas Kohlbecker
87 12 Andreas Kohlbecker
def addr = cdmserverUrl + 'manage/BootloaderService.jsp'
88
def authString = "${usr}:${pwd}".getBytes().encodeBase64().toString()
89 1 Andreas Kohlbecker
def instances = null
90 12 Andreas Kohlbecker
def lastInstance = null
91 13 Andreas Kohlbecker
def allInstancesUp = false
92 12 Andreas Kohlbecker
  
93
// monitor the cdmserver until the last instance is up or until the time is over
94
while (new Date() < timeOver) {
95
  def conn = addr.toURL().openConnection()
96
  
97
  conn.setRequestProperty( "Authorization", "Basic ${authString}" )
98
  if( conn.responseCode == 200 ) {
99
    instances = new JsonSlurper().parseText( conn.content.text )
100 13 Andreas Kohlbecker
    lastInstance = instances.pop()
101
    println lastInstance.configuration.instanceName + ": " + lastInstance.status
102
    if(lastInstance.status == "started") {
103
      println "OK"
104
      allInstancesUp = true
105
      break
106
    }
107 12 Andreas Kohlbecker
  
108
  } else {
109
    println "Error on requesting for status information"
110 13 Andreas Kohlbecker
    println "${conn.responseCode}: ${conn.responseMessage}"
111 12 Andreas Kohlbecker
    break
112
  }
113 14 Andreas Kohlbecker
  println "Timeout after ${timeout} minutes"
114 1 Andreas Kohlbecker
}
115 13 Andreas Kohlbecker
116
return allInstancesUp
117 1 Andreas Kohlbecker
118
~~~