시작하기에 앞서 기본적인 Pipeline script 의 문법을 알아보도록 한다.
pipeline {
}
우선 가장 먼저 pipeline 을 선언하는데 이는 이제부터 이 틀안에 파이프라인을 짜겟다는 것이다. 이제 이 안에 원하는 문법을 작성하면 된다.
agent(any, none, ...)
agent는 파이프라인 블록 내 최상단에 정의해야한다.
agent는 값을 무엇으로 주느냐(any,none...)에 따라 agent를 파이프라인 전체(any)에 쓸 수 있는지 특정 stage(none)에 쓸 수 있는지 지정하게 된다.
stage('stage name'){
steps{
... do something ...
}
}
하나 이상의 stage를 포함해야 하는데 각 stage는 보통 진행해야할 일들을 단위로 잘라서 선언한다.
stage('stage name'){
steps{
steps{
... func A
}
... func B
}
}
steps 는 stage내부 block 에서 여러 번 호출 될 수 있다.
post {
always {
echo '항상 실행됩니다.'
}
changed {
echo '변경사항이 있을때 실행 됩니다.'
}
failure {
echo '에러 발생시 실행 됩니다.'
}
success {
echo '성공시 실행됩니다.'
}
}
특정스테이지 이전/이후에 실행될 condition 블록이다.
특정단계가 끝나고 할일 또는 log 남기기 등에 사용된다.
특정단계가 어떤 상태인지에 따라 남기는 문을 달리할 수도 있다.
파이프라인의 config 설정 값으로 보면된다.
environment {
SERVER_IP = '127.0.0.1'
CREDENTIAL_ID = 'ABCD156'
}
파이프라인 혹은 스테이지 내부에서 쓰일 변수값을 정의한다.
tool{
NodeJs 'Nodejs-bell'
}
자동설치나 Path에 추가할 도구를 정의할 수 있다.
parameters{
booleanParam(containername: 'hello', type: 'container')
}
script{
if(params.containername == 'hello'){
}
}
파라미터를 정의하고 params... 으로 사용이 가능하다.
when{
조건
}
steps{
조건이 맞으면 실행할 내용
}
script {
if(condition){
조건이 맞으면 실행할 내용
}
}
Git저장고로 부터 코드를 받아와 프로젝트 빌드부터 서버에 프로젝트 배포까지 Pipeline script 로 작성한다.
🔸Spring Boot 프로젝트를 기준으로 작성함
pipeline {
agent any
stages {
stage('Git clone'){ // git 저장소에서 코드 불러오기
steps{
git branch: '<브랜치명>', credentialsId: '<GITLAB 에 접속가능한 credential id>', url: ‘<GITLAB 프로젝트 url>'
}
}
stage('Build') { // Spring boot 프로젝트 빌드
steps {
sshagent (credentials: ['<SSH서버 접속이 가능한 credential id>']) {
sh """
chmod +x gradlew // gradle 빌드를 위해 권한 부여
./gradlew build // gradle 빌드
cd build/libs // 빌드된 .jar파일이 있는 경로로 이동
scp ./*.jar <계정@IP>:<웹서버 프로젝트 경로>
// 웹서버에 빌드된 .jar파일 복사
"""
}
}
}
stage('Deploy') { // 웹서버에 .jar파일 배포
steps {
sshagent (credentials: ['<SSH서버 접속이 가능한 credential id>']) {
sh """
ssh -o StrictHostKeyChecking=no <계정>@<IP> ''
cd <jar파일 복사한 경로>
docker cp *.jar <컨테이너명>:<컨테이너 내부 파일위치>
// 내부컨테이너로 .jar파일을 복사한후에 재실행한다.
docker restart <컨테이너명>
"""
}
}
}
}
생성한 Pipeline 프로젝트에 해당 스크립트를 삽입하고 깃랩에 소스코드를 푸시하여 테스트 하여본다.



