07 Jenkins Pipeline Script를 작성하여 빌드 및 배포

유영국·2024년 4월 30일

CICD자동화

목록 보기
8/9

Pipeline Script 문법

시작하기에 앞서 기본적인 Pipeline script 의 문법을 알아보도록 한다.

1. pipeline{...}

pipeline {

}

우선 가장 먼저 pipeline 을 선언하는데 이는 이제부터 이 틀안에 파이프라인을 짜겟다는 것이다. 이제 이 안에 원하는 문법을 작성하면 된다.

2. section

2-1. agent

agent(any, none, ...)

agent는 파이프라인 블록 내 최상단에 정의해야한다.
agent는 값을 무엇으로 주느냐(any,none...)에 따라 agent를 파이프라인 전체(any)에 쓸 수 있는지 특정 stage(none)에 쓸 수 있는지 지정하게 된다.

2-2. stage

stage('stage name'){
	steps{
		... do something ...
	}
}

하나 이상의 stage를 포함해야 하는데 각 stage는 보통 진행해야할 일들을 단위로 잘라서 선언한다.

2-3. steps

stage('stage name'){
	steps{
		steps{
			... func A
		}
		... func B
	}
}

steps 는 stage내부 block 에서 여러 번 호출 될 수 있다.

2-4. post

post {
	always {
		echo '항상 실행됩니다.'
	}
	changed {
		echo '변경사항이 있을때 실행 됩니다.'
	}
	failure {
		echo '에러 발생시 실행 됩니다.'
	}
	success {
		echo '성공시 실행됩니다.'
	}
}

특정스테이지 이전/이후에 실행될 condition 블록이다.
특정단계가 끝나고 할일 또는 log 남기기 등에 사용된다.
특정단계가 어떤 상태인지에 따라 남기는 문을 달리할 수도 있다.

3. Directives

파이프라인의 config 설정 값으로 보면된다.

3-1. environment

environment {
	SERVER_IP = '127.0.0.1'
	CREDENTIAL_ID = 'ABCD156'
}

파이프라인 혹은 스테이지 내부에서 쓰일 변수값을 정의한다.

3-2. tool

tool{
	NodeJs 'Nodejs-bell'
}

자동설치나 Path에 추가할 도구를 정의할 수 있다.

3-3. parameter

parameters{
	booleanParam(containername: 'hello', type: 'container')
}
script{
	if(params.containername == 'hello'){
	}
}

파라미터를 정의하고 params... 으로 사용이 가능하다.

4. If문

4-1. when, steps

when{
	조건
}
steps{
	조건이 맞으면 실행할 내용
}

4-2. if

script {
	if(condition){
		조건이 맞으면 실행할 내용
	}
}

2. Pipe라인 작성해보기

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 프로젝트에 해당 스크립트를 삽입하고 깃랩에 소스코드를 푸시하여 테스트 하여본다.

Pipeline 실행 로그 확인하기.

profile
맘대로 생각해서 만든거라 안맞는 정보가 많아요

0개의 댓글