Project

General

Profile

JenkinsGroovy » History » Version 17

Andreas Kohlbecker, 08/20/2013 02:36 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 17 Andreas Kohlbecker
The most up to date scripts are found in the jenkins scriptler folders
25
26
* http://160.45.63.176/jenkins/scriptler.git 
27
28
29
----
30
31 1 Andreas Kohlbecker
32 6 Andreas Kohlbecker
### Get all versions of an artifact from a maven repository
33
34 1 Andreas Kohlbecker
~~~
35
def metadata = new XmlSlurper().parse("http://wp5.e-taxonomy.eu/mavenrepo/eu/etaxonomy/cdm-server/maven-metadata.xml")
36 5 Andreas Kohlbecker
metadata.versioning.versions.version.each{
37
	  println "> " + it
38 1 Andreas Kohlbecker
}
39
~~~
40 2 Andreas Kohlbecker
41
doc:
42
43
* http://groovy.codehaus.org/api/groovy/util/XmlSlurper.html
44 3 Andreas Kohlbecker
45 1 Andreas Kohlbecker
* http://www.ibm.com/developerworks/java/library/j-pg05199/
46 6 Andreas Kohlbecker
47
48 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) 
49 6 Andreas Kohlbecker
50
51
~~~
52
def metadata = new XmlSlurper().parse("http://wp5.e-taxonomy.eu/mavenrepo/eu/etaxonomy/cdm-server/maven-metadata.xml")
53
def list = []
54
metadata.versioning.versions.version.each{
55
  list.add(it)
56
}
57 8 Andreas Kohlbecker
return return list.reverse(true)
58 6 Andreas Kohlbecker
~~~
59 10 Andreas Kohlbecker
60
61
### find last bean in datasources.xml
62
63
64
~~~
65
// find last bean in datasources.xml
66
def beans = new XmlParser().parse("/etc/cdmserver/datasources.xml")
67
def lastBean = null
68
beans.bean.findAll{it.attribute("class") == "com.mchange.v2.c3p0.ComboPooledDataSource"}.each{  
69
    lastBean = it
70
}
71
println lastBean
72
~~~
73 11 Andreas Kohlbecker
74
75 12 Andreas Kohlbecker
### monitor cdm server until all instances are started up
76 11 Andreas Kohlbecker
77
78
~~~
79 1 Andreas Kohlbecker
import groovy.json.JsonSlurper
80 12 Andreas Kohlbecker
import groovy.time.TimeCategory
81 11 Andreas Kohlbecker
82 1 Andreas Kohlbecker
// Configuration
83
def cdmserverUrl = "http://test.e-taxonomy.eu/cdmserver/"
84 12 Andreas Kohlbecker
def usr = "xxx"
85
def pwd = "yyy"
86
def timeout = 1 // minutes
87 16 Andreas Kohlbecker
88 12 Andreas Kohlbecker
// init
89
def timeOver
90
use(TimeCategory) {
91
  timeOver = timeout.minutes.from.now
92
}
93 1 Andreas Kohlbecker
94 12 Andreas Kohlbecker
def addr = cdmserverUrl + 'manage/BootloaderService.jsp'
95
def authString = "${usr}:${pwd}".getBytes().encodeBase64().toString()
96 1 Andreas Kohlbecker
def instances = null
97 12 Andreas Kohlbecker
def lastInstance = null
98 1 Andreas Kohlbecker
def allInstancesUp = false
99 15 Andreas Kohlbecker
def message = "Timeout"
100 12 Andreas Kohlbecker
  
101
// monitor the cdmserver until the last instance is up or until the time is over
102
while (new Date() < timeOver) {
103
  def conn = addr.toURL().openConnection()
104
  
105
  conn.setRequestProperty( "Authorization", "Basic ${authString}" )
106
  if( conn.responseCode == 200 ) {
107
    instances = new JsonSlurper().parseText( conn.content.text )
108 13 Andreas Kohlbecker
    lastInstance = instances.pop()
109
    println lastInstance.configuration.instanceName + ": " + lastInstance.status
110
    if(lastInstance.status == "started") {
111 15 Andreas Kohlbecker
      message "OK"
112 13 Andreas Kohlbecker
      allInstancesUp = true
113
      break
114
    }
115 12 Andreas Kohlbecker
  
116 1 Andreas Kohlbecker
  } else {
117 15 Andreas Kohlbecker
    message "Error on requesting for status information${conn.responseCode}: ${conn.responseMessage}"
118 1 Andreas Kohlbecker
  }
119 16 Andreas Kohlbecker
  println new Date()
120
  sleep(10000) // milliseconds
121 12 Andreas Kohlbecker
}
122 15 Andreas Kohlbecker
123
println message
124 13 Andreas Kohlbecker
125
return allInstancesUp
126 1 Andreas Kohlbecker
127
~~~