{"id":46828,"date":"2024-08-06T03:39:42","date_gmt":"2024-08-06T03:39:42","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=46828"},"modified":"2024-08-06T03:41:38","modified_gmt":"2024-08-06T03:41:38","slug":"jenkins-pipeline-tutorials-how-to-create-folder-and-subfolder","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/jenkins-pipeline-tutorials-how-to-create-folder-and-subfolder\/","title":{"rendered":"Jenkins Pipeline Tutorials: How to create folder and subfolder?"},"content":{"rendered":"\n<p>To create folders and subfolders in Jenkins using pipeline code, you can use Jenkins Job DSL or Groovy script. Here\u2019s how you can accomplish this in a Jenkins pipeline:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using Jenkins Job DSL<\/h2>\n\n\n\n<p>The Jenkins Job DSL plugin allows you to define jobs and folders programmatically. Here\u2019s an example of how to create a folder and subfolder using Job DSL in a pipeline script:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">pipeline {\n    agent any\n\n    stages {\n        stage(<span class=\"hljs-string\">'Create Folders'<\/span>) {\n            steps {\n                script {\n                    <span class=\"hljs-comment\">\/\/ Using Job DSL to create folders<\/span>\n                    jobDsl scriptText: <span class=\"hljs-string\">''<\/span><span class=\"hljs-string\">'\n                    folder('<\/span>MainFolder<span class=\"hljs-string\">') {\n                        displayName('<\/span>Main Folder<span class=\"hljs-string\">')\n                        description('<\/span>This is the main folder<span class=\"hljs-string\">')\n                    }\n\n                    folder('<\/span>MainFolder\/SubFolder<span class=\"hljs-string\">') {\n                        displayName('<\/span>Sub Folder<span class=\"hljs-string\">')\n                        description('<\/span>This is a subfolder inside Main Folder<span class=\"hljs-string\">')\n                    }\n                    '<\/span><span class=\"hljs-string\">''<\/span>\n                }\n            }\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Explanation<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">1.  pipeline: This defines a Jenkins pipeline script.\n2.  agent any: This specifies that the pipeline can run on any available agent.\n3.  stages: The pipeline consists of stages, and each stage contains steps to execute.\n4.  script: The script block is used to execute Groovy code.\n5.  jobDsl: The jobDsl step is used to execute Job DSL scripts, which create and configure Jenkins jobs and folders.\n6.  folder(): The folder() method is used to define a folder. You specify the folder path, and optional display name and description.<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Using Jenkins Groovy Script<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> jenkins.model.*\n<span class=\"hljs-keyword\">import<\/span> com.cloudbees.hudson.plugins.folder.*\n\n<span class=\"hljs-comment\">\/\/ Function to create a folder<\/span>\ndef createFolder(folderName, parentFolder = <span class=\"hljs-literal\">null<\/span>) {\n    def jenkins = Jenkins.instance\n    def folder\n    <span class=\"hljs-keyword\">if<\/span> (parentFolder) {\n        folder = parentFolder.getItem(folderName)\n    } <span class=\"hljs-keyword\">else<\/span> {\n        folder = jenkins.getItem(folderName)\n    }\n    \n    <span class=\"hljs-keyword\">if<\/span> (folder == <span class=\"hljs-literal\">null<\/span>) {\n        def folderDescriptor = jenkins.getDescriptorByType(Folder.DescriptorImpl.class)\n        folder = folderDescriptor.newInstance(jenkins, folderName)\n        <span class=\"hljs-keyword\">if<\/span> (parentFolder) {\n            parentFolder.add(folder, folderName)\n        } <span class=\"hljs-keyword\">else<\/span> {\n            jenkins.add(folder, folderName)\n        }\n        println(<span class=\"hljs-string\">\"Folder '${folderName}' created successfully.\"<\/span>)\n    } <span class=\"hljs-keyword\">else<\/span> {\n        println(<span class=\"hljs-string\">\"Folder '${folderName}' already exists.\"<\/span>)\n    }\n    <span class=\"hljs-keyword\">return<\/span> folder\n}\n\nnode {\n    stage(<span class=\"hljs-string\">'Create Folders'<\/span>) {\n        <span class=\"hljs-comment\">\/\/ Create a top-level folder<\/span>\n        def mainFolder = createFolder(<span class=\"hljs-string\">'MainFolder'<\/span>)\n\n        <span class=\"hljs-comment\">\/\/ Create a subfolder inside the main folder<\/span>\n        createFolder(<span class=\"hljs-string\">'SubFolder'<\/span>, mainFolder)\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Explanation<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\u2022   Imports: Import Jenkins and Folder classes to interact <span class=\"hljs-keyword\">with<\/span> Jenkins and create folders.\n\u2022   createFolder <span class=\"hljs-built_in\">Function<\/span>: This <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">checks<\/span> <span class=\"hljs-title\">if<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">folder<\/span> <span class=\"hljs-title\">already<\/span> <span class=\"hljs-title\">exists<\/span> <span class=\"hljs-title\">and<\/span> <span class=\"hljs-title\">creates<\/span> <span class=\"hljs-title\">it<\/span> <span class=\"hljs-title\">if<\/span> <span class=\"hljs-title\">it<\/span> <span class=\"hljs-title\">doesn<\/span>\u2019<span class=\"hljs-title\">t<\/span>. <span class=\"hljs-title\">It<\/span> <span class=\"hljs-title\">can<\/span> <span class=\"hljs-title\">create<\/span> <span class=\"hljs-title\">both<\/span> <span class=\"hljs-title\">top<\/span>-<span class=\"hljs-title\">level<\/span> <span class=\"hljs-title\">folders<\/span> <span class=\"hljs-title\">and<\/span> <span class=\"hljs-title\">subfolders<\/span>.\n\u2022   <span class=\"hljs-title\">Jenkins<\/span> <span class=\"hljs-title\">API<\/span>: <span class=\"hljs-title\">The<\/span> <span class=\"hljs-title\">script<\/span> <span class=\"hljs-title\">uses<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">Jenkins<\/span> <span class=\"hljs-title\">API<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">create<\/span> <span class=\"hljs-title\">folders<\/span> <span class=\"hljs-title\">programmatically<\/span>.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Usage<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">\u2022   Job DSL Plugin: If using the Job DSL method, ensure the Jenkins Job DSL plugin is installed and enabled.\n\u2022   Permissions: Ensure that the Jenkins user executing the script has the necessary permissions to create folders.\n\u2022   Execution: You can execute these scripts <span class=\"hljs-keyword\">as<\/span> part <span class=\"hljs-keyword\">of<\/span> a Jenkins pipeline job to automate folder management.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<script src=\"https:\/\/gist.github.com\/rajeshkumarin\/b9cc8c6f83df4114f1cd55bda6eac261.js\"><\/script>\n","protected":false},"excerpt":{"rendered":"<p>To create folders and subfolders in Jenkins using pipeline code, you can use Jenkins Job DSL or Groovy script. Here\u2019s how you can accomplish this in a Jenkins pipeline: Using&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-46828","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46828","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=46828"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46828\/revisions"}],"predecessor-version":[{"id":46830,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/46828\/revisions\/46830"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=46828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=46828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=46828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}