Jenkins에서 GitLab CI/CD로 Maven 빌드 마이그레이션하기
Jenkins에서 Maven 빌드를 실행 중이라면, Java Spring 프로젝트 템플릿을 사용하여 GitLab로 마이그레이션할 수 있습니다. 이 템플릿은 Maven을 사용하여 종속성 관리를 합니다.
Jenkins 구성의 샘플
다음 세 가지 Jenkins 예제는 각각 다른 방법으로 Maven 프로젝트를 테스트하고 빌드하며 쉘 에이전트에 설치합니다:
- 쉘 실행으로 구성된 자유 형식
- Maven 작업 플러그인을 사용한 자유 형식
- Jenkinsfile을 사용한 선언적 파이프라인
세 가지 예제 모두 세 단계에서 동일한 세 개의 명령을 순서대로 실행합니다:
-
mvn test
: 코드베이스에서 찾은 테스트 실행 -
mvn package -DskipTests
: 코드를 POM에서 정의된 실행 가능한 유형으로 컴파일하며 첫 번째 단계에서 테스트를 실행했기 때문에 테스트를 건너뜁니다. -
mvn install -DskipTests
: 컴파일된 실행 파일을 에이전트의 로컬 Maven.m2
저장소에 설치하고 다시 테스트를 건너뜁니다.
이러한 예제는 Maven이 에이전트에 사전 설치되어야 하는 단일하고 지속적인 Jenkins 에이전트를 사용합니다. 이 실행 방법은 shell executor를 사용하는 GitLab Runner와 유사합니다.
쉘 실행으로 구성된 자유 형식
Jenkins의 내장 쉘 실행 옵션을 사용하여 에이전트에서 쉘을 직접 호출하는 경우, 구성은 아래와 유사할 수 있습니다:
Maven 작업 플러그인을 사용한 자유 형식
Jenkins에서 Maven 플러그인을 사용하여 Maven 빌드 라이프사이클에서 특정 목표를 선언하고 실행하는 경우, 구성은 아래와 유사할 수 있습니다:
이 플러그인은 Jenkins 에이전트에 Maven이 설치되어 있어야 하며, Maven 명령을 호출하기 위해 스크립트 래퍼를 사용합니다.
선언적 파이프라인 사용
선언적 파이프라인을 사용하는 경우, 구성은 아래와 유사할 수 있습니다:
pipeline {
agent any
tools {
maven 'maven-3.6.3'
jdk 'jdk11'
}
stages {
stage('Build') {
steps {
sh "mvn package -DskipTests"
}
}
stage('Test') {
steps {
sh "mvn test"
}
}
stage('Install') {
steps {
sh "mvn install -DskipTests"
}
}
}
}
이 예제는 플러그인 대신 쉘 실행 명령을 사용합니다.
기본적으로 선언적 파이프라인 구성은 Jenkins 파이프라인 구성 또는 Jenkinsfile
에 직접 저장됩니다.
Jenkins 구성을 GitLab CI/CD로 변환하기
위 예제는 모두 약간 다릅니다만, 모두 동일한 파이프라인 구성을 사용하여 GitLab CI/CD로 마이그레이션할 수 있습니다.
전제 조건:
- Shell 에그젼터를 사용하는 GitLab Runner
- 쉘 러너에 설치된 Maven 3.6.3 및 Java 11 JDK
이 예제에서는 Jenkins에서 빌드, 테스트 및 설치 구문의 행동 및 구문을 흉내냅니다.
GitLab CI/CD 파이프라인에서 명령어는 “작업”으로 실행되며, 이러한 작업은 “단계”로 그룹화됩니다. .gitlab-ci.yml
구성 파일의 마이그레이션된 구성은 두 개의 전역 키워드(stages
및 variables
) 다음에 3개의 작업이 따릅니다:
stages:
- build
- test
- install
variables:
MAVEN_OPTS: >-
-Dhttps.protocols=TLSv1.2
-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
MAVEN_CLI_OPTS: >-
-DskipTests
build-JAR:
stage: build
script:
- mvn $MAVEN_CLI_OPTS package
test-code:
stage: test
script:
- mvn test
install-JAR:
stage: install
script:
- mvn $MAVEN_CLI_OPTS install
이 예제에서:
-
stages
는 순서대로 실행되는 세 단계를 정의합니다. 위의 Jenkins 예제와 마찬가지로 테스트 작업이 먼저 실행되고, 빌드 작업이 실행되며, 마지막으로 설치 작업이 실행됩니다. -
variables
는 모든 작업에서 사용할 수 있는 CI/CD 변수를 정의합니다. -
test-code
,build-JAR
, 및install-JAR
는 파이프라인에서 실행되는 작업들의 사용자 정의된 이름입니다.
Docker 컨테이너에서 작업 실행하기
Jenkins 샘플과 같이 이 빌드 프로세스를 처리하기 위해 지속적인 머신 대신 일시적인 Docker 컨테이너를 사용하며, 모든 것을 이미 설치한 공식 Maven Docker 이미지를 사용합니다.
전제 조건:
- 프로젝트에서 사용할 수 있는 Docker 에그젼터가 있는 GitLab Runner GitLab.com을 사용 중이라면 공개 인스턴스 러너를 사용할 수 있습니다.
이 마이그레이션된 파이프라인 구성은 세 개의 전역 키워드(stages
, default
, variables
) 뒤에 3개의 작업이 옵니다. 이 구성은 위의 예제에 비해 개선된 파이프라인을 위해 추가적인 GitLab CI/CD 기능을 사용합니다:
stages:
- build
- test
- install
default:
image: maven:3.6.3-openjdk-11
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- .m2/
variables:
MAVEN_OPTS: >-
-Dhttps.protocols=TLSv1.2
-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
MAVEN_CLI_OPTS: >-
-DskipTests
build-JAR:
stage: build
script:
- mvn $MAVEN_CLI_OPTS package
test-code:
stage: test
script:
- mvn test
install-JAR:
stage: install
script:
- mvn $MAVEN_CLI_OPTS install