-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclean-up-one-by-sprint-numbers.groovy
135 lines (103 loc) · 4.14 KB
/
clean-up-one-by-sprint-numbers.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
long startTime = System.currentTimeMillis();
//Get value from String Parameter
MAX_BUILDS = manager.build.buildVariables.get("MAX_BUILDS").toInteger()
parent_job_name = "Dummy-WebBuildOnly-clone";
// Finds the parent/cause job name
for (cause in manager.build.causes)
{
if (cause.class.toString().contains("UpstreamCause")) {
manager.listener.logger.println " ____ Parent Job Name : " + cause.getUpstreamProject()
parent_job_name = cause.getUpstreamProject()
}
}
manager.listener.logger.println "Current Job Name -"+ manager.build.project.getName()
manager.addShortText(parent_job_name, "#FFF", "#000", "1", "#FF0000")
SortedMap<Integer,List<String>> sprint_paths_map = new TreeMap<Integer, List<String>>(new DescOrder());
for (job in Jenkins.instance.items)
{
manager.listener.logger.println "\n ***Job Name: "+job.name+"***"
if(parent_job_name!="" && job.name==parent_job_name)
{
if(job.workspace!=null && job.workspace!="") //Check if there is a workspace associated with the Job
{
manager.listener.logger.println "Workspace path : " + job.workspace
String workspace = job.workspace
File folder = new File(workspace)
if(folder!=null && folder.exists()) //Check if the Workspace folder exists
{
// Get all files and folders within the Workspace of current job.
// Iterate through only folders and sort em by Modified Date.
sprint_number = null
//Determine which sprint_number to delete
File[] files = new File(workspace).listFiles().each{
if(it!=null && it.exists() && !it.isFile()){
sprint_number = it.name.find( /\d+/ )!=null ? it.name.find( /\d+/ ).toInteger() : null
if(sprint_number!=null)
{
if(sprint_paths_map.containsKey(sprint_number))
sprint_paths_map.get(sprint_number).add(it.absolutePath)
else
{
List<String> list = new ArrayList<String>()
list.add(it.absolutePath);
sprint_paths_map.put(sprint_number, list)
}
}
sprint_number = null
}
}
int count = 0;
//Delete the folders based on the build number
for(Map.Entry<Integer, List<String>> entry : sprint_paths_map.entrySet())
{
if(count >= MAX_BUILDS) {
deleteFolders(entry.getValue())
}
else {
manager.listener.logger.println "Save - " + entry
}
count++
}
}
else
{
manager.listener.logger.println "Workspace is empty or doesn't exist"
}
}
else
{
manager.listener.logger.println "No Workspace is associated with this job"
}
}
else
{
//manager.listener.logger.println "--Skipped"
}
}
//Function to delete the folder
void deleteFolders(List<String> paths){
manager.listener.logger.println "To Delete"
for(String path : paths)
{
File file = new File(path)
if( ! file.isFile() && file.exists())
{
file.deleteDir()
manager.listener.logger.println "Deleted -" + path
}
}
}
//For Descending order TreeMap
class DescOrder implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
}
long endTime = System.currentTimeMillis();
long totalTime = (endTime - startTime)/1000;
manager.listener.logger.println "Total Run time in seconds : " + totalTime