2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

젠킨스(Jenkins)에서 스크립트 단계에 Groovy를 사용하는 방법은 무엇인가요?

_____
Q1: Jenkins에서 스크립트 단계란 무엇인가요?
A1: 스크립트 단계(Scripted Pipeline)는 Jenkins 파이프라인 내에서 Groovy 코드를 직접 작성하여 빌드, 테스트, 배포 등의 작업을 유연하게 제어할 수 있는 블록을 의미합니다.

Q2: Jenkins 파이프라인에서 Groovy 스크립트를 사용하는 기본 문법은 어떻게 되나요?
A2: Jenkins 파이프라인 내 `script { ... }` 블록 안에 Groovy 코드를 작성합니다. 예를 들어:
```groovy
pipeline {
agent any
stages {
stage('Example') {
steps {
script {
// 여기에 Groovy 코드 작성
echo "Hello from Groovy!"
}
}
}
}
}
```

Q3: 왜 `script` 블록 내에서 Groovy 코드를 작성해야 하나요?
A3: Declarative Pipeline은 기본적으로 제한된 명령어 집합만 허용하므로, 복잡한 로직이나 변수를 다루려면 `script` 블록으로 전환해 Groovy 코드를 자유롭게 실행해야 합니다.

Q4: Groovy 스크립트 내에서 변수를 선언하고 사용하는 방법은?
A4: `def` 키워드로 변수를 선언하거나, 간단히 변수명만 사용해 선언할 수 있습니다. 예:
```groovy
script {
def myVar = "Jenkins"
echo "Welcome, ${myVar}!"
}
```

Q5: Groovy 스크립트에서 Jenkins API에 접근하는 방법은?
A5: `currentBuild`, `env`, `params` 같은 Jenkins 전역 변수에 접근해 빌드 상태나 환경변수를 다룰 수 있습니다. 예:
```groovy
script {
echo "빌드 번호: ${currentBuild.number}"
echo "환경 변수 PATH: ${env.PATH}"
}
```

Q6: Groovy 스크립트에서 외부 쉘 명령어를 실행하려면?
A6: Declarative Pipeline에서는 `sh` 또는 `bat` 스텝을 사용하지만, `script` 블록 내에서 Groovy의 `sh`를 호출하면 쉘 명령을 실행할 수 있습니다. 예:
```groovy
script {
def result = sh(script: "ls -l", returnStdout: true).trim()
echo "디렉토리 목록:\n${result}"
}
```
Q7: Groovy 스크립트 내에서 예외 처리는 어떻게 할 수 있나요?
A7: 일반적인 Groovy 구문처럼 `try-catch`를 사용할 수 있습니다. 예:
```groovy
script {
try {
// 위험한 작업
} catch (Exception e) {
echo "에러 발생: ${e.message}"
error("빌드 실패 처리")
}
}
```

Q8: Jenkins Pipeline 스크립트를 Groovy로 완전히 작성하는 방법은?
A8: Scripted Pipeline 방식을 사용하면 스크립트 전체를 Groovy 문법으로 작성할 수 있습니다. 예:
```groovy
node {
stage('Build') {
echo '빌드 시작'
// 빌드 작업
}
stage('Test') {
echo '테스트'
// 테스트 작업
}
}
```

Q9: Groovy 스크립트 실행 시 주의할 점은?
A9: Groovy 스크립트 내 보안 제한(Sandbox)이 있을 수 있어, 필요한 권한이 없는 함수는 실행되지 않거나 승인 절차가 필요합니다. 스크립트 승인(Manage Jenkins > In-process Script Approval)을 통해 허용해야 합니다.

Q10: Jenkins에서 Groovy 스크립트 샘플 코드 예시는?
A10: 다음은 간단한 Groovy 코드 사용 예시입니다.
```groovy
pipeline {
agent any
stages {
stage('Greeting') {
steps {
script {
def name = env.USER ?: "Guest"
echo "Hello, ${name}!"
}
}
}
}
}
```

---

위와 같이 Jenkins 파이프라인 내 `script` 블록에서 Groovy를 사용하여 다양한 빌드 파이프라인 구성을 자유롭게 작성할 수 있습니다.
Jenkins에서 스크립트 단계에 Groovy를 사용하는 방법은 주로 Jenkins 파이프라인 스크립트 내에서 Groovy 코드를 활용하여 다양한 작업을 자동화하는 방식입니다.

Jenkins는 Groovy를 기본적으로 지원하며, 이를 통해 복잡한 빌드 로직과 다양한 조건을 쉽게 처리할 수 있습니다.

아래에 그 과정을 설명하겠습니다.

1. Jenkins Pipeline 설정 Jenkins에서는 Declarative Pipeline과 Scripted Pipeline 두 가지 방식으로 파이프라인을 정의할 수 있습니다.

Groovy 코드는 보통 Scripted Pipeline에서 더 많이 사용되지만, Declarative Pipeline에서도 Groovy를 사용할 수 있습니다.



2. Scripted Pipeline에서 Groovy 사용하기 Scripted Pipeline은 Groovy의 문법을 그대로 사용할 수 있는 특성을 가지고 있습니다.

아래는 Scripted Pipeline의 예시입니다: ```groovy node { stage('Build') { echo 'Building...' // Groovy 코드 예시 def version = '1.0' echo "Version: ${version}" } stage('Test') { echo 'Testing...' // Groovy 리스트 및 반복문 예시 def tests = ['unit', 'integration', 'e2e'] for (test in tests) { echo "Running ${test} tests" } } } ```

3. Declarative Pipeline에서 Groovy 사용하기 Declarative Pipeline에서도 `script` 블록 내에서 Groovy 코드를 사용할 수 있습니다.

예시는 다음과 같습니다: ```groovy pipeline { agent any stages { stage('Build') { steps { echo 'Building...' script { // Groovy 코드 예시 def version = '1.0' echo "Version: ${version}" } } } stage('Test') { steps { echo 'Testing...' script { // Groovy 리스트 및 반복문 예시 def tests = ['unit', 'integration', 'e2e'] for (test in tests) { echo "Running ${test} tests" } } } } } } ```

4. Groovy의 장점 - 유연성 : Groovy는 동적 언어로, 변수를 쉽게 정의하고 사용할 수 있으며, 다양한 데이터 구조를 처리할 수 있습니다.

- 재사용성 : Groovy 코드를 라이브러리로 정의하여 여러 파이프라인에서 재사용할 수 있습니다.

- 조건부 로직 : 복잡한 조건부 로직을 단순화하여 처리할 수 있습니다.



5. Groovy 스크립트를 외부 파일로 분리하기 Groovy 스크립트를 별도의 파일로 분리하여 Jenkins와 연동하는 방법도 있습니다.

이 경우, Groovy 스크립트를 저장한 위치를 지정하여 호출할 수 있습니다.

예를 들어, Jenkins의 "Groovy Postbuild" 플러그인을 사용하면, 빌드가 완료된 후 Groovy 스크립트를 외부 파일에서 실행할 수 있습니다.

결론 Jenkins에서 Groovy를 사용하면 파이프라인 빌드 과정을 한층 더 동적이고 강력하게 만들 수 있으며, 다양한 자동화 작업을 효율적으로 수행할 수 있습니다.

Jenkins의 Groovy 스크립팅 기능을 활용하여 보다 견고한 CI/CD 파이프라인을 구축해 보세요.

작성자: 이주희 [비회원] | 작성일자: 1년 전 2025-03-22 15:10:57
조회수: 204 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.