호돌찌의 AI 연구소
article thumbnail

Jenkins가 각자의 환경에 맞는 곳에 설치가 되어있다고 가정하고 시작하겠습니다. Jenkinsfile의 기본적인 구조를 알아보고 생성하고 Jenkins에서 Pipeline Job을 생성하고 Build 하는 내용을 다룰 예정입니다. 또한 post, when, 환경변수 설정하는 내용을 다루겠습니다.

 

 


1. Jenkinsfile의 코드 기본 구조

- pipeline : 반드시 맨 위에 존재하여야합니다.

- agent : 어디에서 실행할 것인지 정의하여야 합니다.

- any, none, label, node, docker, dockerfile, kubernetes가 있고, agent가 none인 경우는 stage에 포함시켜야 합니다. 이 예시는 아래와 같습니다. 

pipeline {
    agent none 
    stages {
        stage('Example Build') {
            agent { docker 'maven:3-alpine' }
            steps {
                echo 'Hello, Maven'
                sh 'mvn --version'
            }
        }
        stage('Example Test') {
            agent { docker 'openjdk:8-jre' }
            steps {
                echo 'Hello, JDK'
                sh 'java -version'
            }
        }
    }
}

 

- stages는 하나 이상의 stage에 대한 모음이며, pipeline 블록 안에서 한 번만 실행이 가능합니다. 예시는 아래와 같습니다. 이 코드를 바탕으로 아래에서 Jenkins Stage Log를 확인할 예정입니다. 

pipeline {
	agent any
	stages {
		stage("build") {
			steps {
				echo 'building the applicaiton...'
			}
		}
		stage("test") {
			steps {
				echo 'testing the applicaiton...'
			}
		}
		stage("deploy") {
			steps {
				echo 'deploying the applicaiton...'
			}
		}
	}
}

 

2. Jenkins에서 PIpeline Job을 생성하고 build 해보기

각자 github에 새 repo를 생성하고 local에서 'Jenkinsfile' 파일을 생성하여 위 stages 코드를 복사한 후 github에 업로드합니다. 

 

이제 localhost:8080 jenkins를 접속해서 시작해보겠습니다. create job을 누릅니다. 

Pipeline을 생성하는데, 이름은 jenknins-pipeline으로 입력하겠습니다.

 

 

 

 

밑에 Git 내용을 추가합니다. 순서는 다음과 같습니다. 

 

위에서 생성한 Github repo의. git path를 집어넣습니다. credential은 필요 없습니다. 

 

나머지 부분은 내버려두고 저장을 하겠습니다.

 

 

Pipeline의 Status를 확인하기 위해 Build now를 누릅니다. 

 

바로 밑에 #1 누릅니다. Build 할 때마다 번호가 생깁니다. 

 

Console Output을 누르면 Stage log가 확인이 가능합니다. 

log를 보면 Building ~, testing ~ , deploying ~ 이런 식으로 jenkinsfile에 있는 echo 부분이 잘 구현되면서 success라는 문구가 뜨는 것을 확인할 수 있습니다. build가 성공했다는 뜻입니다. 

 

 

 

 

 

3. post를 이용하여 모든 Stage가 실행된 후 명령 정의

pipeline 내에 post 조건을 부여하였을 때 위의 결과와 어떻게 다른지 확인해보고자 합니다. post 조건에는 always, changed, fixed, regression, aborted, success, unsuccessful, unstable, failure, notBuilt, cleanup이 있습니다. 아래 code에서 post 아랫부분을 주의 깊게 보시길 바랍니다. jenkinsfile을 아래처럼 수정하겠습니다. 

pipeline {
	agent any
	stages {
		stage("build") {
			steps {
				echo 'building the applicaiton...'
			}
		}
		stage("test") {
			steps {
				echo 'testing the applicaiton...'
			}
		}
		stage("deploy") {
			steps {
				echo 'deploying the applicaiton...'
			}
		}
	}
	post {
			always {
				echo 'building..'
			}
			success {
	            echo 'success'
			}
			failure {
	            echo 'failure'
			}
		}
	}

 

수정한 파일을 기점으로 build를 위해 아래를 수행합니다. 

git add . 
git commit -m "commit message"
git push origin master

 

build가 된 이후에 building, success라는 것이 나타난 것을 보아 post가 성공적으로 된 것을 알 수 있습니다. 

 

4. when을 이용하여 stage가 실행되는 조건을 추가해보기

when 조건 추가는 test stage에서 Branch에 따른 조건 추가, build stage에서 Branch이름에 따른 조건 추가를 하겠습니다. 

Jenkins 내부에는 자체 환경변수 목록들이 존재하는데, 여기에서는 Custom 환경변수를 사용하겠습니다. 코드를 한번 보면, " " 큰 따옴표 부분이 있는데, Custom 환경변수를 이용할 때에 큰 따옴표로 반영을 하면 됩니다. 

 

pipeline {
	agent any
	environment {
		NEW_VERSION = '1.0.0'
	}
	stages {
		stage("build") {
			steps {
				echo 'building the applicaiton...'
				echo "building version ${NEW_VERSION}"
			}
		}
		stage("test") {
			steps {
				echo 'testing the applicaiton...'
			}
		}
		stage("deploy") {
			steps {
				echo 'deploying the applicaiton...'
			}
		}
	}
}

위 코드를 기준으로 한번 build를 하겠습니다. commit message는 "testing custom env"로 해놓겠습니다. 

git add . 
git commit -m "commit message"
git push origin master

 

연한 글씨 부분에 stage가 변하는 것을 알 수 있고, 조건에 따라 message가 다르게 출력되는 것을 알 수 있습니다. 

 

위와 같이 단순한 pipeline을 만드는 것을 정리해보았습니다. 다음 글에서는 CI Pipeline 생성을 python에 적용해보는 글로 찾아뵙겠습니다. 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!