본문 바로가기
dev

Jenkins Job DSL을 사용하여 Job 관리하기

by igooo 2025. 9. 5.
728x90

개요

Spring Batch로 개발한 Batch를 관리하기 위해서 사용하고 관리하기 쉬운 Jenkins(https://www.jenkins.io)을 사용하는 경우가 많다. 운영하는 Batch Job이 많아지고, 지속적인 관리가 필요한 경우 많은 Batch Job을 Jenkins의 UI를 통해서 관리하는 일은 쉬운 일이 아니다. 예를 들어 동일한 파라미터를 사용하지만 특정 설정만 다른 Batch Job이 여러 개 있는 경우 공통 파라미터 수정을 위하여 Jenkins UI를 통해서 여러 Job을 설정하다 보면 시간도 오래 걸리고, 입력 실수를 할 수도 있다.

그래서 인프라를 코드로 관리하는(Infrastructure as Code) Terraform, Ancible처럼 Jenkins Job을 Groovy 스크립트로 관리할 수 있는 Job DSL Plugin을 사용하여 Jenkins Job을 생성 및 관리하는 방법을 알아보자.

 

Getting Started

Job DSL 플러그인 설치

Jenkins 플러그인은 3가지 방법으로 설치가 가능하니 상황에 맞는 설치 방법으로 Job DSL 플러그인을 설치해 준다.

  • Jenkins UI를 사용하여 Manage Jenkins > Manage Plugins 메뉴에 Available탭에서 job-dsl을 검색하여 설치한다.
  • Cli 툴을 사용하여 jenkins-plugin-cli --plugins job-dsl:1.93 명령으로 설치한다.
  • 직접 플러그인을 다운로드하여 Jenkins에 업로드한다.(https://plugins.jenkins.io/job-dsl/)

 

Seed Job 생성

Job DSL을 사용하여 Job 관리할 Job을 생성한다.

  • Job을 관리할 Job의 이름을 지정한다.
  • item type은 Freestyle Project를 선택한다.

 

 

Build Steps에 Process Job DSLs 추가

Seed Job이 생성되고 Job을 설정하는 화면에서 Build Steps 영역에서 Add build Step 버튼을 사용하여 Step을 추가할 때 Job DSL 플러그인이 정상적으로 설치가 되었다면 Process Job DSLs를 선택할 수 있다. Process Job DSLs Step이 추가되면 Use the provided DSL Script를 선택하고 아래 groovy 스크립트를 입력하고 저장한다.

job('example-job') {
  steps {
    shell('echo Hello igooo!')
  }
}
jenkins 서버가 윈도우에서 구동 중이라면 shell함수를 batchFile로 변경한다. 

 

Seed Job 실행

생성된 Seed Job을 실행하면 example-job이 Jenkins에 추가되고, 추가된 example-job을 실행해 보면 콘솔 출력에 Hello igooo!라는 문자열이 출력된 것을 볼 수 있다.

Started by user igooo
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/example-job
[example-job] $ /bin/sh -ex /tmp/jenkins16211417341048901248012.sh
+ echo Hello igooo!
Seed Job 실행 시 스크립트 실행 관련 오류가 발생한다면 Manage Jenkins > In-process Script Approval 메뉴에서 pending 된 스크립트를 허용(Approval) 처리를 해줘야 한다.

 

example-job 변경하기

example-job의 출력 메시지를 변경하기 위해서는 Job DSL로 생성된 example-job의 설정을 변경해도 상관없지만 DSL을 사용하여 Job을 관리하기로 했으니까 Seed Job에서 DSL 스크립트를 변경하고 Seed Job을 다시 실행하면 example-job에 수정한 스크립트의 내용이 반영된다.

 

 

파라미터가 다른 Job 여러 개 생성하기

위에 간단한 예제를 사용하여 Job DSL을 사용하는 방법을 알아보았다. Job DSL을 사용하여 파라미터만 다른 Jenkins Job을 여러 개 생성해 보자.

 

Job 요구사항

예제로 생성할 Job은 대부분의 파라미터는 동일하지만 언어 코드(language)와 실행주기(triggers)만 다른 job이다.

변경이 필요한 파라미터

  • language
  • trigger

Seed Job에  파라미터 추가 

Seed Job도 Jenkins의 다른 Job과 동일하게 파라미터를 설정할 수 있다.

생성이 Job은 언어 코드와 실행주기를 동적으로 설정해야 하기 때문에 아래 그림에 String Parameter를 2개 선택하여 각각 매개변수 명에 language, trigger로 2개의 파라미터를 추가한다.

 

Seed Job 스크립트 변경

Seed Job에서 설정한 두 개의 파라미터 language, trigger를 사용하여 생성될 Job의 파라미터를 동적으로 구성할 수 있다.

Seed Job에서 설정한 파라미터는 DSL 스크립트의 ${파라미터 이름}의 구문으로 치환되어 Seed Job을 실행할 때 입력한 파라미터에 따라 Job에 다양하게 생성되고, 관리할 수 있다. 

job("collect_comment_${language}") {
    desciption("언어: ${language} 댓글 수집")
    logRotator {
    	numToKeep(10)
    }
    parameters {
    	stringParam('language', "${language}", '언어코드')
    	stringParam('type', 'comment', '수집 타입')
    }
    triggers {
    	cron("${trigger}")
    }
    steps {
    	shell('''
        	"bash collect_job.sh -t ${type} -l ${language}"
        ''')
    }

}

 

DSL의 자세한 문법은  https://jenkinsci.github.io/job-dsl-plugin/ 공식 문서를 참고한다.

 

 

마무리

Job DSL 플러그인을 사용하여 Jenkins Job을 코드로 관리하는 방법에 대하여 알아보았다. 스크립트를 git에 등록하여 연동하는 방법도 있으니 필요한 기능이 있다면 공식 문서를 참고하길 바란다. 동일한 Job을 다양하게 관리해야 하는 경우에는 쉽게 사용할 수 있으니 서비스에 적용해 보자.

 

 

728x90

'dev' 카테고리의 다른 글

oha - HTTP load generator (성능 테스트)  (0) 2025.05.20
LLM 프롬프트 디자인  (0) 2024.11.12
Dapr Quick Start  (0) 2024.06.05
docker  (0) 2016.02.24
git remote 변경, hook 처리  (0) 2014.01.10