Jenkins Job DSL / Plugin The Jenkins "Job DSL / Plugin" is made up of two parts: The Domain Specific Language (DSL) that allows users to describe Jobs using in a groovy-based language, and a Jenkins Plugin which manages the scripts and the updating of the Jenkins jobs which are created and maintained as a result. ?Background Jenkins is a wonderful system for managing builds, and people love using its UI to configure jobs. Unfortunately, as the number of jobs grows, maintaining them becomes tedious, and the paradigm of using a UI falls apart. Additionally, the common pattern in this situation is to copy jobs to create new ones, these "children" have a habit of diverging from their original "template" and consequently it becomes difficult to maintain consistency between these jobs. The Jenkins job-dsl-plugin attempts to solve this problem by allowing jobs to be defined with the absolute minimum necessary in a programmatic form, with the help of templates that are synced with the generated jobs. The goal is for your project to be able to define all the jobs they want to be related to their project, delcaring their intent for the jobs, leaving the common stuff up to a template that were defined earlier or hidden behind the DSL. For example, a project might want a unit test job, a nightly sonar build, a integration test job, and a promotion job. In this stituation, we have a job named TMPL-test that has a majority of a setup already defined (Chuck Norris plugin, email plugin, etc). We'll reuse that job for the test-based jobs, using the "using" DSL command. The template doesn't have our specific SCM settings, and we want to re-use the same one, so we'll define it in a variable called "gitUrl". We'll also limit whom can run the release job.