내맘대로 개발일지

[AWS] Jenkins 로 배포하기 [Node] 본문

IT

[AWS] Jenkins 로 배포하기 [Node]

eulBlue 2025. 11. 24. 10:52
 

[Jenkins] EC2 안에서 설치하고 실행하기

[EC2] 안에서 nginx 사용하기[AWS] 아무것도 모르는데 EC2 + Docker + MariaDB + nginx진짜 아무것도 모른다.개발만 해봤지 인프라 처음해본다.곁눈질도 안해봤고 해주는대로 떠먹어서 개발만 해봤다.근데

8735.tistory.com

이제 Jenkins 로 배포하는 연습을 해볼거다.

나는 Spring BackEnd 와 Vue FrontEnd 총 2개를 배포해야하는데

먼저 FrontEnd 먼저 배포하도록 하겠다!

Jenkins 설정 > Credentials

오른쪽 상단에 있는 톱니바퀴의 Jenkins 설정 누르고

Security 에 Credentials 누르고 나면

global

다음과 같은 화면이 있는데 여기서 (global) 버튼마냥 파란색버튼 있는데 눌러주면된다

Add Credentials

오른쪽 상단의 Add Credentials 버튼 클릭

SSH Username with private key

Kind 에서 SSH Username with private key 누르고나서

Private Key > Enter directly 누르면 Add 버튼이 보인다 클릭

젠킨스 터미널로 돌아가서

ssh-keygen -t ed25519 -C "jenkins" -f ~/.ssh/id_ed25519

cat ~/.ssh/id_ed25519.pub

// 결과
ssh-ed25519 ...

cat ~/.ssh/id_ed25519

// 결과
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----

첫번째 결과는 깃허브에 가서 SSH 등록해주고

두번째 나온 결과를 Add 누른 화면에 Key 에 입력해주면된다.

그다음 Create 버튼 클릭

ssh -T git@github.com

// 결과
Hi {깃헙닉네임}! You've successfully authenticated, but GitHub does not provide shell access.

 

이런 결과를 반환받았다면 정상적으로 연결된걸 확인할 수 있다.

그다음 Node 를 확인해야하는데,

node -v
yarn -v

했을때 결과가 나오지 않는다면 설치해주면된다.

sudo npm install -g yarn

나같은경우는 노드는 있어서 yarn 만 추가적으로 설치해줬다.

설정이 완료되었으니 다음으로 프로젝트를 등록해보도록 하겠다.

새로운 Item

새로운 아이템 클릭

Enter an item name 에 이름 적고

Pipeline 선택하고 OK 버튼 클릭

여기에 이제 스크립트를 작성하면되는데

pipeline {
    agent any
    options { timestamps() }

    environment {
        PROJECT_NAME = '{PROJECT_NAME}'                    // 예: my-frontend
        GIT_URL      = '{GIT_REPOSITORY_SSH_URL}'         // 예: git@github.com:ORG/REPO.git
        GIT_BRANCH   = '{BRANCH_NAME}'                    // 예: main, dev, release
        CREDENTIALS = '{CREDENTIAL_ID}'                  // Jenkins Git Credential ID (SSH Key or PAT)
        DEPLOY_PATH = '{DEPLOY_DIRECTORY}'               // 예: /var/www/my-frontend
        BUILD_CMD   = '{BUILD_COMMAND}'                  // 예: yarn build or npm run build
    }

    stages {

        stage('Clone Repository') {
            steps {
                sh "node -v"
                sh "git --version"
                sh "yarn -v || npm -v"

                git branch: "${GIT_BRANCH}", credentialsId: "${CREDENTIALS}", url: "${GIT_URL}"
            }
        }

        stage('Install Dependencies') {
            steps {
                sh 'yarn install || npm install'
            }
        }

        stage('Build') {
            steps {
                sh "${BUILD_CMD}"
            }
        }

        stage('Deploy') {
            steps {
                sh """
                    echo "📦 Deploying ${PROJECT_NAME} → ${DEPLOY_PATH}"

                    rm -rf ${DEPLOY_PATH}/*

                    cp -r dist/* ${DEPLOY_PATH}/ || cp -r build/* ${DEPLOY_PATH}/ || echo "⚠️ dist/build 폴더 없음"

                    # Optional: enable after visudo setup
                    # sudo systemctl reload nginx

                    echo "🎉 Deployment completed!"
                """
            }
        }
    }
}

중괄호 처리한건 알아서 맞춰서 설정하면되고

여기서 중요한건 sudo systemctl reload nginx 인데

배포가 끝나면 자동으로 재시작 하기위함이다

이를 위해서 몇가지 설정이 필요한데

1. 권한추가
sudo chown -R jenkins:jenkins /var/www/{프로젝트명}
sudo chmod -R 755 /var/www/{프로젝트명}

2. visudo 열기
sudo visudo

3. 추가 후 저장
jenkins ALL=NOPASSWD: /usr/bin/systemctl reload nginx

이렇게해주면 이제 배포가끝나면 Nginx 가 재실행되면서 배포가 완료된다.