젠킨스 파이프라인 생성 - CI 작업

최지환·2023년 2월 13일
1

프로젝트-모각코

목록 보기
2/7
post-thumbnail

젠킨스 파이프라인 생성 - git clone, build 작업

젠킨스 파이프라인을 생성해보자!

우선 credentials를 먼저 만들어줘야한다.

jenkins가 git clone 을 하기 위해서는, 클론하려는 깃 레포지토리에 대한 권한이 필요하다. 따라서 credentials를 등록해주자

→ github 레포지토리가 공개인 경우는 단순 clone은 권한이 없어도 된다.

Credentials 등록

github에서 사용할 credentials를 등록해야햔다.

  • Jenkins 관리 → 시스템 설정 → GitHub로 접근
  • 1.Name : 프로젝트 이름 등록
    1. add를 눌러 Credentials를 등록한다.

add를 누르면 다음과 같이 Jenkins Credentials 를 등록하는 창이 나온다.

  • kindsecret text로 설정
  • username 에 git id 입력, email 형식이 아닌 git 프로필에 나오는 이름 입력 해야함!!!!
  • Passwordgithub token 입력!!!! 매우 중요!!
  • id 는 해당 credentials의 이름으로 이해하면 된다.
    나는 git-token으로 만들었다.

add 를 눌러 credentials 설정을 마치면 다음과 원래 페이지로 넘어온다.

Credentials를 방금 생성한 git_token 으로 지정해주자

하단에 Test connection을 누르면 제대로 생성 되었는지 확인 할 수 있다.

4999가 나오면 제대로 생성됨



Item 생성

이제 jenkinsJob을 수행 할 수 있도록 Item을 생성해보자.

Item 을 생성하는 것은 freestyle 방식과 Pipeline 방식이 있다.

  • freestyle 방식 : 세팅이 단순하다.
    Job을 수행하는 로직을 명령어만 넣으면 간단하게 넣을 수 있다.
    → 하지만 복잡한 종류의 Job을 수행할때 상세한 세팅을 할 수가 없다.
  • Pipeline 방식:
    → 쉘 명령을 직접 써줘야하기 때문에 세팅이 조금 어렵다.
    → 쉘 명령을 작성을 해서 Job을 실행하기 때문에 상세한 세팅을 할 수 있고, 각 Job의 실행 상황을 확인 할 수 있다.

두가지 방법을 다 해봤는데, 활용도가 높다는 측면에서 Pipeline 방식이 더 낫다고 생각을 했기에 Pipeline 방식을 선택했다. 또한 후에 sonarqube를 적용해야하기도 했고, CD(Continuous Integration)을 추가 할 것을 고려해서 pipeline 방식으로 Job을 생성했다.

  1. Item 을 생성한다.

Jenkins 대시보드 → Item 생성 → Pipeline 선택
생성할 Item의 이름을 작성

  1. test 라는 이름으로 Item 을 생성을 확인


파이프라인 Job 연습 및 설정

이제 생성한 Item에 Job을 만들어 주자.

우선 첫번째로 수행할 Job은 내 GitHub 레포지토리를 클론을 하는 것이다.

pipeline 스크립트 작성을 하기 전에!!

연습을 해보자.

pipeline 연습

  • Item 구성 → Pipeline 클릭
  • 연습을 위해서 Sample Script를 클릭 → Hello World 클릭

  • 저장 → Item 메인으로 복귀 → 지금 빌드

Hello Job이 수행 되었다.

하단에 ✅#1 을 누르면 해당 빌드의 상세 정보를 확인 할 수 있다.

상세 정보를 확인 시에 Console Output 을 누르면 해당 job의 쉘 스크립트가 실행 된 로그를 확인 할 수 있다.

Pipeline 작성 - git clone, build

이제 깃 레파지토리를 clone 해서 build 해보자!

1. git clone

구성 → Pipeline

git clone을 하기 위해서는 git 레포지토리의 정보를 가져와야한다. 그렇기 위해서 이전에 생성해둔 Credentials을 사용하면 된다.

우선 pipeline 의 Script 하단에 Pipeline Syntax 를 눌러보자

해당 페이지에서 git:git 을 누르면

다음과 같은 페이지를 확인 할 수 있다.

  • Repository URL 은 내 프로젝트 URL을 입력해주면 된다.
  • Branch는 디폴트로 master 로 설정되어 있다. → 나는 main로 변경
  • Credentials 는 아까 만들어둔 git token과 git hub 아이디가 정보가 들어 있는 것을 사용하면 된다.

정보를 입력 후 Generate Pipeline Script를 누르면

git 정보가 입력된 PipeLine Script가 생성된다.

이를 복사해서 아까 만들어둔 Item 의 Job을 설정해보자!

Script를 다음과 같이 변경 하였다.

Stage는 해당 Item 의 Job 하나를 의미 한다고 이해하면 될 것이다.
→ stages 에 생성된 stage가 순차적으로 실행된다.

github clone라는 이름으로 하나의 Job이 수행된다.

💡 여기서 잠깐 알아둬야 할 점!! -
Linux의 경우 jenkins는 workspace 라는 공간에서 Item을 수행한다.
만약 workspace 경로를 따로 설정 해주지 않는다면 기본적으로
$ /var/lib/jenkins/workspace 에 있다.
위 Script가 실행된 경우 git 레포지토리는 /var/lib/jenkins/workspace/Item이름
형태로 clone이 된다.
만약 jenkins에서 Hamkke라는 Item을 실행한 경우 다음과 같이 workspace에 프로젝트가 clone 된다.

이제 스크립트를 실행해보자.

  • 지금 빌드

Item test 실행 시 프로젝트가 제대로 clone 되었는지 확인

2. build

이제 빌드를 해보자. 내 레포지토리에 있는 프로젝트는 gradle 세팅이 되어있다.

따라서 gradlew 명령어로 프로젝트를 빌드 할 수 있다.
다음 쉘 명령어를 추가 해주자!

stage('build'){
            steps{
                    sh '''
                        echo build start
                        ./gradlew clean bootJar
                    '''
            }
        }

💡 bootJar는 Jar 파일을 생성한다는 것
clean bootJar 는 기존에 있던 build를 비우고 build를 실행한다.

현재 script

pipeline {
    agent any
    stages{
        stage('github clone') {
                steps {
                git branch: 'main', credentialsId: 'hamkke_git_',
                url: 'https://github.com/kodesalon/HamKke'
            }
        }
        
        stage('build'){
            steps{
                    sh '''
                        echo build start
                        ./gradlew clean bootJar
                    '''
            }
        }

    }
}

이제 Item을 실행 해보면, build 까지 잘 실행 된 것을 확인 할 수 있다.


추가적으로 기록하고 싶은 것

사실 pipeline 을 작성하는 이 과정에서 정말 많은 시행착오가 있었다.

우선 script 작성을 하는데 정말 어려움이 있었는데,,,,
파이프라인 작성 - 공식문서 공식 문서를 보면 감이 살짝 온다.

그 이후로는 이것 저것 하나하나 해보면서 추가적으로 감을 익혔다.

그리고 이 과정에서 내 프로젝트 패키지 설정에 문제가 있다는 것을 인지 했다.
보통 git 레포지토리에는 프로젝트의 폴더 구조가 src/main/~~ 이런식으로 src 폴더가 최상단에 위치한다.
하지만 clone 한 내 프로젝트는 그렇지가 않았다. board/src/main~~ 이런식으로 구성 되어 있었다.

→ jenkins의 pipeline은 일반적으로 src가 최상단에 있는 걸로 파악하고 실행을 한다.
그래서 ./gradlw clean bootJar 가 엉뚱한 위치에서 실행이 되지 않았다.
이때 error 로그는 Gradle를 찾을 수 없다고 다음과 에러가 나온다.

Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Finished: FAILURE

이런 경우 script 작성을 통해서 폴더 구조를 이용을 해야하는데 이때 다음과 같이 dir 을 통해서 이동하면 된다.

pipeline {
        agent any

        stages {
            stage('github clone') {
                steps {
                    #git 정보
                }
            }
            
            stage('build'){
                steps{
                    dir('board'){ #board 폴더로 진입
                        sh'''
                            echo build start
                            ./gradlew clean bootJar
                        '''
                    }
                }
            }
        }
    }

위와 같이 작성하면, build 스테이지 실행board 폴더해당 위치에서 gradlew로 Jar 생성 로직으로 빌드를 한다.
아무튼 다음부터는 스프링 프로젝트 세팅 시 패키지 설정부터 꼼꼼히 해야겠다는 교훈을 얻음/

0개의 댓글