Base/CI, CD

Jenkins Maven 기반 빌드잡 만들기

findmypiece 2021. 12. 1. 14:48
728x90

Maven 이든 Gradle 이든 최근에 Wrapper 만 사용하다보니 별도 구축된 빌드툴을 활용한 젠킨스 잡 구성이 잘 기억나지 않아 작업내역을 기록해 놓는다. Wrapper 를 사용하는 것과 일부 겹치기도 한다.

 

여기에서는 Jenkins Pipeline 를 이용해서 잡을 만들 예정이며 Scripted Pipeline 를 사용할 예정이다. 그리고 젠킨스 내 잡에 스크립트를 포함하지 않고 각 프로젝트에 Jenkinsfile 이라는 파일에 포함하는 방식을 사용한다.

 

참고로 Pipeline 작성방법은 Scripted Pipeline, Declarative Pipeline 두가지가 존재하는데 Declarative Pipeline 이 더 나중에 도입되었고 Jenkins Community 에서도 지향하는 방식이라고 한다. 다만 사내 레퍼런스가 대부분 Scripted Pipeline 이고 여기에서는 전반적인 빌드잡을 만드는 과정만 정리할 예정이기 때문에 Scripted Pipeline 기준으로 작성한다. 추후 기회가 된다면 Declarative Pipeline 방식으로도 작성해보고 싶지만 시간이 허락할지..

 

Jenkinsfile의 경우 최근에 많이 사용하는 방식으로 프로젝트에 포함되어 형상관리가 가능하고 코드리뷰도 용이하다는 장점이 있다.

 

1. Jenkins 에서 필요한 Plugin 설치

Git

Config File Provider

AdoptOpenJDK installer

Pipeline

오라클 자바는 유료화 되었기 때문에 나는 AdoptOpenJDK 를 사용한다.

혹시 더 필요한 플러그인이 있을지도 모른다. 이 부분은 이미 다 설치해버려서 잘 기억이 안난다..


2. Jenkins 에 자바 설치

Jenkins관리 > Global Tool Configuration 메뉴로 이동해서 사용할 jdk 설정


3.  Jenkins 에 Maven 설치

Jenkins관리 > Global Tool Configuration 메뉴로 이동해서 사용할 maven 설정

 

4. maven settings.xml 파일 Jenkins 에 등록

Jenkins관리 > Managed files 메뉴로 이동해서 Global Maven settings.xml 생성

아래에서 설정하는 ID 값 매우 중요하다 젠킨스 잡 작성시 활용되니 적절한 걸 지정할 것.

 

4. 프로젝트에 Jenkinsfile 생성하고 github 저장소에 push

프로젝트 내 적당한 경로에 Jenkinsfile 이라는 파일을 만들고 Pipeline 스크립트 작성하고 github 저장소에 push 해 놓는다.파일 이름이 꼭 Jenkinsfile 일 필요는 없다. 스크립트 내용은 대략 아래와 같은데 각 환경에 맞게 설정해야 하는 부분은 ... 으로 처리했으니 각자 환경에 맞게 적절하게 대입하면 된다.

node {

    try{

        // def JAVA_HOME = "${tool 'adoptopenjdk8'}"
        // def M3_HOME = "${tool 'maven3.8.4'}"
        // withEnv ([
        //     "JAVA_HOME=${JAVA_HOME}",
        //     "M3_HOME=${M3_HOME}",
        //     "PATH=${JAVA_HOME}/bin:${M3_HOME}/bin:${env.PATH}"]){
        //     //...
        // }
        ////////////////////////////////////////////
        env.JAVA_HOME = "${tool 'adoptopenjdk8'}"
        env.M3_HOME = "${tool 'maven3.8.4'}"
        env.PATH = "${env.JAVA_HOME}/bin:${env.M3_HOME}/bin:${env.PATH}"

        stage('git checkout') {
//             git (
//                 branch: "master",
//                 credentialsId: "github-ssh",
//                 url: "git@github.....git"
//             )
            checkout scm
        }

        stage('maven build') {
            configFileProvider([configFile(fileId: 'maven-settings-xml', variable: 'MVN_SETTINGS')]) {
            	sh "mvn -s $MVN_SETTINGS ..."
            }
        }

    }catch(err){
        echo "Build Fail!!"
        throw err
    }

    echo "Build Success!!"

}

 

5. Jenkins 내 Pipeline 잡 생성

나머지는 그냥 본인의 필요에 따라 지정하면 되고 중요한 건 아래 Pipeline 부분이다.

Repository URL 부분에 github 저장소 url을 적으면 된다.

Credentials 부분에 생성한 Credentials id를 명시하면 된다. 나는 ssh 방식을 사용해서 ssh Credentials를 Jenkins에 생성해 놓았는데 Jenkins Credentials 생성은 다른 포스팅을 참고하자. 여기 적자니 양이 너무 방대해진다.

Branchs to build 부분에는 checkout 받을 branch를 지정한다. 나는 cbt를 지정했다.

Script Path 부분에는 프로젝트에 생성한 Jenkinsfile 를 지정한다. 만약 프로젝트 root 에 생성했다면 그냥 Jenkinsfile를 적으면 되고 특정 디렉토리 하위에 생성했다면 프로젝트 root 기준 상대경로로 작성하면 된다.

 

https://cwal.tistory.com/24
https://velog.io/@seunghyeon/Jenkins-선언적Declarative-파이프라인
728x90

'Base > CI, CD' 카테고리의 다른 글

maven default properties  (0) 2022.04.27
Jenkins 에서 갑자기 Job 생성이 안될 때  (0) 2022.01.10
maven execution  (0) 2021.06.07
Jenkins Master/Slave 연동  (0) 2021.06.05
Jenkins Kubernetes Plagin 구성시 주의사항  (0) 2021.06.05