#jinja2: lstrip_blocks: True
#!/usr/bin/env groovy
import com.cloudbees.hudson.plugins.folder.Folder
import org.apache.commons.lang3.StringUtils;
// Create a folder in a parent folder
Folder create_folder(def parent_folder, String folder_name) {
// Actual create method call
parent_folder.createProject(Folder.class, folder_name)
// Below is unfortunately needed because createProject() doesn't return the
// newly created folder. Therefore need to query the full path again to fetch.
Jenkins jenkins = Jenkins.instance
String folder_path
if (parent_folder == jenkins) {
folder_path = folder_name
} else {
folder_path = parent_folder.fullName + "/" + folder_name
}
return jenkins.getItemByFullName(folder_path)
}
// Create a folder and its parent folders
Folder create_folder_recursively(String folder_path) {
// If the folder already exists, return
Folder jenkins_folder = Jenkins.instance.getItemByFullName(folder_path)
if (jenkins_folder)
return jenkins_folder
String folder_name, parent_path
def parent_folder
// If the folder is top level, set parent to Jenkins itself
if (!folder_path.contains("/")) {
parent_folder = Jenkins.instance
folder_name = folder_path
}
// If the folder is a sub-folder, recurse to create/fetch the parent folder
else {
folder_name = StringUtils.substringAfterLast(folder_path, "/")
parent_path = StringUtils.substringBeforeLast(folder_path, "/")
parent_folder = create_folder_recursively(parent_path)
}
// Create the folder in the parent folder
return create_folder(parent_folder, folder_name)
}
// Collect the names of all jobs and credentials
ArrayList<String> names = new ArrayList<String>();
{% for pipeline in pipelines %}
names.add("{{ pipeline.name }}")
{% endfor %}
{% for cred in credential_store %}
names.add("{{ cred.id }}")
{% endfor %}
// Filter to collect the names of all folders
ArrayList<String> folders = new ArrayList<String>();
for (String name : names) {
if (name.contains("/")) {
folders.add(StringUtils.substringBeforeLast(name, "/"))
}
}
// Remove duplicates
folders.unique().sort()
// Create folders and sub-folders
for (String folder_path : folders)
create_folder_recursively(folder_path)