기억의 실마리
2024. 9. 8. 15:47

Jenkins

젠킨스는 지속적 통합, 배포를 용이하게 관리해주는 CI/CD이다.

젠킨스에서 제공하는 브라우저(UI)는 UX가 좋다는 것을 느꼈고

이를 통해 불편함 없이 점진적으로 확장 가능한 것이 장점이라고 생각했다.

 

파이프라인을 직접 작성하여 의도대로 프로세스(배치 등)를 나누어

예상 가능한 작업이 가능하도록 분기할 수 있었고 staging, build,

deploy 등 에러 발생 시 빠르게 파악가능하여 디버깅 및 대응이

빠른 것이 가장 큰 이점이라고 생각했다.

 

PipeLine

젠킨스 내에서 프로젝트를 구성하고 해당 프로젝트 내로 들어갔을때

좌측 상단메뉴를 통해 접근할 수 있다.

  • 구성 -> pipeline

위와 같이 파이프라인을 작성할 수 있는 Pipeline script 블록에서 작성할 수 있다.

 

 

Script

pipeline {
    agent any
    
    tools {
        nodejs 'NodeJS 20.16.0'
    }
    

    stages {
        stage('Checkout') {
             steps {
                 cleanWs()
                 git branch: 'main', credentialsId: 'your-project-token', url: 'project-git-repository-url'
             }
        }
        
        stage('Build') {
            steps{
                sh'''
                    echo Install Node.js and npm...
                    npm --version
                    node --version
                    npm install
                    npm run build
                '''
            }
        }
        
        stage('Deploy') {
            steps{
                sshPublisher(
                publishers:
                     [
                        sshPublisherDesc(
                        configName: 'linux-server',
                        transfers:
                            [
                                sshTransfer(
                                cleanRemote: false,
                                execTimeout: 120000,
                                flatten: false,
                                makeEmptyDirs: false,
                                noDefaultExcludes: false,
                                patternSeparator: '[, ]+',
                                remoteDirectory: '/opt/project',
                                remoteDirectorySDF: false,
                                removePrefix: '',
                                sourceFiles: '.next/**, public/**, package.json, .env.development, .env.production',
                                excludes: '',
                                execCommand: 'cd /opt/project && npm install && pm2 restart ecosystem.config.json',
                                )
                            ]
                        )
                    ]
                )
            }
        }
    }
}

 

필자는 Next.js 14버전 app-router 프로젝트를 기반으로 작성하였고

간단하게 Checkout, Build, Deploy로 나누었다.

 

Checkout: 빌드하게 될 깃 레포지토리를 지정

 

Build: 젠킨스 os환경에서 sh 명령문을 활용하여 npm install, build를 실행

 

Deploy: sshPublisher의 transfers를 통해 포함할 파일을 지정하여

배포될 서버 환경으로 전달해주고 execCommand를 통해 배포서버

환경에서 실행시킬 명령어를 전달하여 pm2를 활용한 서버 재시작으로

변경사항이 배포사이트에 적용될 수 있도록 해주었다.

 

마치며...

주로 프론트엔드 기술을 주력으로 개발자로 종사하고 있지만, 기회만 주어지게 된다면 개발자적 시야를 넓히고자 자발적으로 업무를 맡아보고 있다. 실제로 개발은 프론트와 서버로 나눈다는 개념보다는 프로그램을 만드는 것 자체가 개발이라고 생각하기 때문에 앞으로도 더 다양한 분야의 개발을 경험할 예정이다. 실제로 지금 java 언어와 스프링부트 프레임워크에 대해 공부도 겸하고 있다. 언제나 새로운 개념을 알았을 때, 그리고 그러한 개념이 지금까지의 기술력과 이어질 때만큼은 정말 보람차고 즐거운 것 같다😊