젠킨스 파이프라인을 생성해보자!
우선 credentials를 먼저 만들어줘야한다.
jenkins가 git clone 을 하기 위해서는, 클론하려는 깃 레포지토리에 대한 권한이 필요하다. 따라서 credentials를 등록해주자
→ github 레포지토리가 공개인 경우는 단순 clone은 권한이 없어도 된다.
github에서 사용할 credentials를 등록해야햔다.
add를 누르면 다음과 같이 Jenkins Credentials 를 등록하는 창이 나온다.
kind
를 secret text
로 설정username
에 git id 입력, email 형식이 아닌 git 프로필에 나오는 이름 입력 해야함!!!!Password
에 github token
입력!!!! 매우 중요!!add
를 눌러 credentials
설정을 마치면 다음과 원래 페이지로 넘어온다.
Credentials
를 방금 생성한 git_token
으로 지정해주자
하단에 Test connection
을 누르면 제대로 생성 되었는지 확인 할 수 있다.
→ 4999
가 나오면 제대로 생성됨
이제 jenkins
가 Job
을 수행 할 수 있도록 Item
을 생성해보자.
Item
을 생성하는 것은 freestyle
방식과 Pipeline
방식이 있다.
freestyle
방식 : 세팅이 단순하다.Job
을 수행하는 로직을 명령어만 넣으면 간단하게 넣을 수 있다.Job
을 수행할때 상세한 세팅을 할 수가 없다.Pipeline
방식:Job
을 실행하기 때문에 상세한 세팅을 할 수 있고, 각 Job
의 실행 상황을 확인 할 수 있다.두가지 방법을 다 해봤는데, 활용도가 높다는 측면에서 Pipeline
방식이 더 낫다고 생각을 했기에 Pipeline
방식을 선택했다. 또한 후에 sonarqube
를 적용해야하기도 했고, CD(Continuous Integration)
을 추가 할 것을 고려해서 pipeline
방식으로 Job
을 생성했다.
Item
을 생성한다.Jenkins
대시보드 → Item
생성 → Pipeline
선택
생성할 Item
의 이름을 작성
이제 생성한 Item에 Job을 만들어 주자.
우선 첫번째로 수행할 Job은 내 GitHub 레포지토리를 클론을 하는 것이다.
pipeline 스크립트 작성을 하기 전에!!
연습을 해보자.
Hello Job이 수행 되었다.
하단에 ✅#1
을 누르면 해당 빌드의 상세 정보를 확인 할 수 있다.
상세 정보를 확인 시에 Console Output
을 누르면 해당 job의 쉘 스크립트가 실행 된 로그를 확인 할 수 있다.
이제 깃 레파지토리를 clone 해서 build 해보자!
구성 → Pipeline
git clone을 하기 위해서는 git 레포지토리의 정보를 가져와야한다. 그렇기 위해서 이전에 생성해둔 Credentials
을 사용하면 된다.
우선 pipeline 의 Script 하단에 Pipeline Syntax 를 눌러보자
해당 페이지에서 git:git 을 누르면
다음과 같은 페이지를 확인 할 수 있다.
정보를 입력 후 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 되었는지 확인
이제 빌드를 해보자. 내 레포지토리에 있는 프로젝트는 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 생성
로직으로 빌드를 한다.
아무튼 다음부터는 스프링 프로젝트 세팅 시 패키지 설정부터 꼼꼼히 해야겠다는 교훈을 얻음/