Skip to content

Jenkins folders as a Code

Archived (pre-2022)

Preserved for reference only -- likely outdated. View original | Last updated: January 2021

Root folders

Root folders can be created by adding(via PR) appropriate entry into Jenkins configuration config file: projects-config.groovy (Bitbucket)

Each Jenkins instance has ints own configuration located at environments...rootFolders path.

Example for Jenkins in Fyber Core account (eks-common k8s cluster):

environments {
    fybercore {
        production {
            rootFolders = [
                [name: "devops", displayName: "DevOps", desc: "Folder for DevOps"],
                [name: "acp-edge", displayName: "ACP EDGE", desc: "Folder for project ACP EDGE"]
            ]
        .......
        }
    ......
    }
}

Project placement and project folders

Project's jobs and views can be created in specific folder by prefixing project's name with appropriate path. This creates project's seed job inside specified path, thus seed job's artefacts  will be located in this path too.

Project's jobs/views can be created inside Root folder or inside Nested folders.

Example of putting a project inside Root folder:

            projectsToAutomate = [
                [projectName: "devops/bln-k8s-common-helmfile", url: "git@bitbucket.org:inneractive-ondemand/bln-k8s-common-helm.git", scriptPath: "automation/dsl/Jenkinsfile", credentials: "bitbucket_jenkins_deploy_key"],

Here we put all project's stuff(views and jobs) into previously created root folder devops by adding this folder to project's name:

  • projectName: "devops/bln-k8s-common-helmfile"

Nested folders can be created by adding folders parameter holding list of project specific folders to create.

Example of a project with Nested folders:

            projectsToAutomate = [
                [projectName: "devops/infra/bln-k8s-common-helmfile", url: "git@bitbucket.org:inneractive-ondemand/bln-k8s-common-helm.git", scriptPath: "automation/dsl/Jenkinsfile", credentials: "bitbucket_jenkins_deploy_key", folders: ["devops/infra", "devops/config"]],

Here you can see that project creates two nested folders inside devops root folder: folders: ["devops/infra", "devops/config"] and uses devops/infra folder by prefixing projectName with it:

  • projectName: "devops/infra/bln-k8s-common-helmfile"

Note

Please bear in mind that making such changes to existing jobs/views will not move them but recreates everything from scratch. Thus job history can be lost.