본문 바로가기

4.개발 및 운영 환경

[Jenkins] Jenkins의 pipeline 사용해서 maven 배포하기

들어가기

Jenkins pipeline은 지속적 전달 파이프라인(continuous delivery pipelines)을 구현하고 통합을 지원하는 플러그인이다.
CD(continuous delivery)을 설정 방식이 아닌 스크립트 방식으로 단계별로 진행하는 형태로 되어 있다.
Jenkins pipeline을 사용해서 maven을 배포하는 방법을 간단하게 살펴보겠다.

작성자: ospace114@empal.com, http://ospace.tistory.com/

간단한 파이프라인

간단한 파이프라인을 구성해보자. 말의미 그대로 여러 단계가 있고 이런 단계를 파이프라인처럼 이어졌다고 보면 된다.
각 단계를 Ready, Build, Package, Deploy라고 구성한다. 이런 구성은 자신에 상황에 맞게 변경하면 된다.
작성 방식은 Declarative와 Scripted 표기법이 있는데 여기서는 Scripted으로 하였다.

node {
    def GIT_URL = "http://foo.org/aPath/foo.git"
    def GIT_BRANCH = "master"
    def REMOTE_DIR = "/opt/foo"

    stage('Ready') {
        git branch:"${GIT_BRANCH}", credentialsId:'1234-5678-...', url:"${GIT_URL}"
    }
    stage('Build') {
        sh "mvn -Dmaven.test.skip=true clean compile"
    }
    stage('Package') {
        sh "mvn package"
    }
    stage("Deploy") {
        VERSION = readMavenPom().getVersion()
        ARTIFACT = readMavenPom().getArtifactId()
        DEPLOY_FILE = "${ARTIFACT}.jar"
        sh "echo 'Deploy ${DEPLOY_FILE}..."
        sshagent (credentials:['1234-5678-...']) {
            sh """
                ssh -v -o StrictHostKeyChecking=no -l serviceadmin 1.2.3.4 -p 1234 uname -a
                scp -P 2345 target/${DEPLOY_FILE} serviceadmin@1.2.3.4:${REMOTE_DIR}
                ssh -o StrictHostKeyChecking=no -l serviceadmin 1.2.3.4 -p 1234 uname -a "${REMOTE_DIR}/foo.sh restart"
            """
        }
    }            
}

생각보다 별게 없다. 각 단계별로 살펴보면,

  • Ready: 소스코드를 가져온다
  • Build: 소스코드를 빌드한다.
  • Package: 빌드된 결과를 패키징한다.
  • Deply: 배포한다.

참고로 Ready의 credentialsId는 git으로 연동할 때 사용하는 인증이고 Deploy의 credentials는 배포 대상 시스템과 연동할 때 사용하는 인증이다.

간단한 Tip

sh을 사용해서 간편하게 실행해서 결과 추출할 수 있다.

def GIT_BRANCH = sh (
    script: ‘git —no-pager ...’
    returnStdout: true
).trim()
echo "Branch: ${GIT_BRANCH}"

readFile()사용해 파일 읽어올 수 있다.

def msg = readFile('foo.txt')

readProperties로 프로퍼티 파일 읽어올 수 있다.

def props = readProperties file:'foo.properties'
def bar = props['bar']
echo "bar: ${bar}"

foo.properties 파일

bar=Hello

현재 작업 디렉토리를 조회할 수 있다.

def workdir = pwd()

결론

간단하게 Jenkins의 pipeline을 간단하게 사용하는 법을 살펴보았다. 느껴겠지만, 스크립트 형태로 작성하는 구조라 사용하는 환경에 따라 매우 복잡하게 작성될 수 있다. 스크립트 방식이라 처음 사용할 경우 접근이 쉽지 않다. 그러나 많은 배포 환경을 관리하고 세부적인 구성 및 다양한 플러그인에 여러 옵션을 적용할 수 있다는 장점이 있다. 부족한 글이지만 도움이 되었으면 하네요. 모드 즐프하세요. ospace.

참고

[1] https://www.jenkins.io/doc/book/pipeline/

반응형