반응형

토이 프로젝트로 혼자서 클라우드 서비스를 이용하여 웹 개발부터 배포까지 온 과정을 경험해 보았습니다.

이 과정을 단계별로 나누어서 정리해 보려고 합니다.!

많은 피드백은 감사합니다!

 

목차 

STEP 01) NCP 서버 

STEP 02) AWS RDS, S3

STEP 03) Web Application 개발

STEP 04) Jenkins pipeline 배포

STEP 05) Domain 등록


이번에는 젠킨스 파이프라인을 구축해보도록 하겠습니다.

 

젠킨스 파이프라인 구성 순서

1. pipeline 구조 생성

2. github clone

3. gradle build

4. ssh를 이용해서 파일 전송 후 applicaton 기동

 

1. pipeline 구조 생성

젠킨스 파이프라인 구성에 앞서 구조부터 생성해보도록 하겠습니다.

 

1.1) pipeline 생성

Dashboard > 새로운 Item > name 작성하고 OK

 

 

1.2) 샘플을 실행 시켜봅시다. (Advanced Project Options 탭에서 우측상단의 Hello Wold 선택하고 저장)

 

1.3) 파이프라인 실행

  - 파이프라인 구조를 생성하고 샘플 Script를 실행해보았습니다. 이제 본격으로 파이프라인 구성을 해보도록 하겠습니다.

 

2. github clone

jenkins pipeline은 Pipeline Syntax를 이용해서 Script를 생성해서 구성합니다.

 

2.1) Pipeline Syntax > Sample Step(git: Git 선택 혹시 안보이신다면 jenkins관리에서 github plugin을 설치하시기 바랍니다.)

 

2.2) github repository url을 작성하시고 배포할 Branch를 선택합니다.

 

2.3) 첫 Jenkins 세팅이라면 Credentials 없으실텐데요. 아래 Add > Jenkins 클릭하시면 아래와 같은 창이 나옵니다.

    - Kind를 Username with password를 선택 후 Password에는 github token을 넣어줍니다. github token 발급은 바로 아래에서 설명드리겠습니다.

    - ID는 중복되지 않도록 작성하시면 됩니다.

 

2.4) github token 발급

github > Settings > 오르쪽 카테고리에서 Developer settings 선택

 

 

Note - token을 구분할 수 있도록 작성하고 Expiration으로 토큰의 기간을 정한다.

Select scopes - 필요한 권한을 체크한다.(저는 repo, admin:repo_hook 체크)

repo : repository 권한

admin:repo_hook : webhook에 필요한 hook 권한

 

Generate token을 클릭하면 token이 발급됩니다.

아래와같이 발급된 토큰을 복사해서 사용하면됩니다. 토큰 기간만료 또는 분실시 같은 방법으로 토큰을 발급받으면 됩니다.

 

 

다시 jenkins로 위에서 추가한 Credentials를 선택하고 Generate Pipeline Script 클릭하면 Script가 생성됩니다.

 

 

Syntax에서 생성한 Script를 pipeline으로 가져와서 그대로 붙여줍니다.

 

 

github clone에 성공하였습니다!

 

 

3. gradle build

build stage를 추가하도록 하겠습니다.

  - build는 clone으로 가져온 소스에 포함되어 있는 gradle wrapper를 이용합니다. 자신의 소스코드에 맞게 위치를 지정해서 gradle          build를 해주시면 됩니다.

 

 

build까지 성공하였습니다! 애플리케이션이 배포되기까지 거의 다 왔습니다!

 

 

4. ssh를 이용해서 파일 전송 후 applicaton 기동

빌드된 파일을 전달하기위해서는 jenkins에 publish over ssh plugin이 설치되어있어야 합니다.

 

플러그인이 설치되면 Dashboard > Jenkins 관리 > Configure System으로 이동해서 Publish over SSH에 서버 정보를 입력하면 됩니다.

 

저는 AWS EC2 서버를 사용하고있습니다.

EC2 접속에 필요한 pem 키를 Key에 붙여넣어줍니다.

Name : syntax에서 참조될 이름

Hostname : private ip

Username : ec2에서 사용되는 username

Remote Dircetory : 베이스 디렉토리(참고, 이 디렉터리 기준으로 파일이 전송되고, 스크립트가 실행된다.)

 

 

모두 작성하시고 Test Configuration를 클릭하시면 문제 없으면 Success가 표시됩니다.

 

Pipeline Syntax로 돌아가서 Step : sshPublisher: Send build artifacts over SSH 선택

Souce files : 빌드된 파일 위치입니다.

Remove prefix : 소스파일에서 원본 파일의 디렉토리를 어디까지 포함할 것인지 설정입니다.(여기서는 jar 파일 하나만 선택되도록 설정)

Remote directory : 위에서 선택된 jar 파일을 해당 디렉터리 아래에 위치시킵니다.

Exec command : 파일을 전송한 다음 실행할 shell

 

마지막으로 Pipeline에 stage를 추가해서 위 script를 붙여줍니다.

 

최종 pipeline script

pipeline {
    agent any

    stages {
        stage('github clone') {
            steps {
                git credentialsId: 'tutorial-jenkins-token', url: 'https://github.com/kgc0120/daily_special.git'
            }
        }
        
        stage('build'){
            steps{
                sh'''
                    echo build start
                    ./gradlew clean bootJar
                '''
            }
        }
        
        stage('publish over ssh'){
            steps{
                sshPublisher(publishers: [sshPublisherDesc(configName: 'aws-daily-special'
                , transfers: [sshTransfer(cleanRemote: false
                , excludes: ''
                , execCommand: 'sh /dailySpecial/app/nonstop/deploy.sh'
                , execTimeout: 120000, flatten: false, makeEmptyDirs: false
                , noDefaultExcludes: false
                , patternSeparator: '[, ]+'
                , remoteDirectory: '/app/nonstop/springboot-webservice/build/libs'
                , remoteDirectorySDF: false
                , removePrefix: 'build/libs', sourceFiles: 'build/libs/*.jar')]
                , usePromotionTimestamp: false
                , useWorkspaceInPromotion: false
                , verbose: false
                )])
            }
        }
    }
}

 

pipeline을 실행시켜보면 서버 배포까지 정상적으로 성공하였습니다!!

 

 

정말 시행착오도 많았고 길었던 Jenkins pipeline 구축이었습니다... ㅜ

다음번에는 github webhooke을 이용해서 소스코드를 push 하면 젠킨시가 자동으로 배포되도록 해보겠습니다.

728x90
반응형

+ Recent posts