본문 바로가기
CICD

젠킨스 를 통한 build, aws 배포

by windy7271 2024. 3. 12.
728x90
반응형

젠킨스는 간단하게 말하면 배포 자동화 도구이다.

크게 순서를 나누면 

 

1. 젠킨스 설치

2. 젠킨스를. 통해 build 및 aws로 배포

 

github의 스크립트와 차이는 : actions X (tools), secrets X (credential)

 

 

1. docker 이미지 가져오기 

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins-server jenkins/jenkins:lts

 

2. 도커 로그를 보시면 가운데에 비밀번호가 있다. 이걸로 로그인 먼저하고 계정을 만들어준다.  계정을 삭제하지 않는 한 아이디 비번은 유지다.

 

3. localhost8080 들어가서 비밀번호 입력하시면 됩니다.

 

4. 계정 생성

 

만들어 줬다 ..

 

새로운 아이템을 생성해줍니다.

가장 많이쓰는것은 freestyle과 , pipeline이다

freestyle 은 ui로 하는것이고  pipeline 은 스크립트로 하는것이다. 

 

먼저 freestyle로 가보도록 하겠다.

 

만들고 난 후 dashboard를 눌러서 들어가 왼쪽에 구성을 누르고 설정을 하고 나서 빌드를 하면 된다.

 

 

안에 들어가서 구성 누르고, git 주소도 써준다.

 

두개 추가 해준다.

password는 깃허브에서 토큰을 만든 비밀번호를 넣으면 된다.

branch 는 나는 main이라 main으로 바꿔주었다. 

 

빌드유발

수동으로 일단 빌드하고, 나중에 poll SCM 을 할 예정이다

poll SCM . 은 1분마다 최신화 하는것이다.

 

내려와서 build Steps를 수정해준다. gradle로 바꿔주고, Tasks도 추가해준다.

 

빌드  후 조치 

 

아카이브 시킨다는것이다. *.jar 형태로 만든다는 뜻

jenkins 들어가기

 

 

 

들어오면 snapshot이 들어 가 있다

 

아까 위에서 말한 poll

1분마다 깃허브와 비교해서 올라가게 해보기

 

H 이 아니라  * 이다.


 

 

pipline으로 만들기

 

 

 

여기서 작성을 해주면 된다.

 

 

플러그인 깔려 있는지 확인

jdk 도 추가 해줘야한다. 추가를 . 안해주면 찾지 못해서 에러가 날 것이다.

 

pipeline{
    // 어떠한 agent 로도 실행해도 된다는 의미 
    
    agent any
    triggers{
        pollSCM("*/1 * * * *")
    }
    stages{
        stage('Checkout'){
            steps{
                git url:'https://github.com/fa7271/jenkins_private.git',
                credentialsId: 'github_token',
                branch: 'main'
            }
        }
        stage('setup jdk 11'){
            steps{
                script{
                    def javaHome = tool name: 'JDK11', type: 'jdk'
                    env.JAVAHOME = "${javaHome}"
                    env.PATH = "${javaHome}/bin:${env.PATH}"
                }
            }
        }
        stage('build with gradle'){
            steps{
                sh '''
                chmod +x ./gradlew || true
                ./gradlew bootJar
                '''
            }
        }
        stage('archive jar'){
            steps{
                archiveArtifacts artifacts: '**/*.jar', onlyIfSuccessful: true
            }
        }
    }
}

 

Agent

"agent"는 Jenkins Pipeline 스크립트에서 사용되는 키워드. Jenkins는 자동화된 빌드, 테스트 및 배포 파이프라인을 생성하는 데 사용되는 오픈 소스 자동화 도구 위의 코드에서 "agent any"는 Jenkins가 파이프라인을 실행할 때 사용할 에이전트(또는 노드)를 지정하는 부분입니다. "any"는 모든 에이전트를 사용할 수 있음을 의미하며,

 

즉 어떤 에이전트든 사용하여 파이프라인을 실행할 수 있다는 것을 나타낸다

 


EC2 로 해보기

 

똑같이 pipeline으로 하나 만들어준다.

그 대신 다른 내용은

ssh키로 로그인 . 후scp로 전송하고 ssh로 로그인해서 java jar를 하면 된다.

 

 

ec2 인스턴스 만들기, 보안그룹 8081 을 추가해줘야한다.

보안그룹 수정

보안그룹 8081 과 22 는 있어야한다.

 

연결완료

 

pipeline{
    // 어떠한 agent 로도 실행해도 된다는 의미 
    
    agent any
    triggers{
        pollSCM("*/1 * * * *")
    }
    stages{
        stage('Checkout'){
            steps{
                git url:'https://github.com/fa7271/jenkins_private.git',
                credentialsId: 'github_token',
                branch: 'main'
            }
        }
        stage('setup jdk 11'){
            steps{
                script{
                    def javaHome = tool name: 'JDK11', type: 'jdk'
                    env.JAVAHOME = "${javaHome}"
                    env.PATH = "${javaHome}/bin:${env.PATH}"
                }
            }
        }
        stage('build with gradle'){
            steps{
                sh '''
                chmod +x ./gradlew || true
                ./gradlew bootJar
                '''
            }
        }
        stage('deploy to EC2'){
            steps{
                sshagent(['ec2-ssh-key']){
                    sh '''
                    scp -o StrictHostKeyChecking=no /var/jenkins_home/workspace/pipeline_jar_build_ec2/build/libs/*.jar ubuntu@내 ec2 인스턴스:/home/ubuntu/
                    ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'if ! type java > dev/null; then sudo apt update && sudo apt install openjdk-11-jdk -y; fi'
                    ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'sudo killall java || true'
                    ssh -o StrictHostKeyChecking=no ubuntu@내 ec2 인스턴스 'sudo nohup java -jar /home/ubuntu/*.jar > /home/ubuntu/app.log 2>&1 &'
                    '''
                }
            }
        }
    }
}

 

지금 위에 부분은 전송까지만 테스트이다 .ssh 는 밑에서 다시 해보겠다.

 

 

ssh agent, ssh Credential 을 젠킨스에서 설치해준다.

설치

설치해준다.

젠킨스 관리에 들어가서 credentials에 들어가서

 

add credentilas 눌러준다.

key는 permkey를 다 복사해서 붙여넣으면 된다.

 

이렇게 생성완료.

1개 떠있다

 


(S3)프론트엔드 배포

 

nodejs, aws credentials 설치

nodejs 다운로드, aws 다운로드 해준다

S3를 AWS에 올려야하기때문에 엑세스키,비밀번호, 지역등이 필요하다

 

S3 IAM 만들어준다.

키는 CLI 하고 나머지는 . 다 default로 간다.

 

그리고 값 설정해준다. 

이런식으로 3개를 넣어주면된다.

 

 

 

2. nodejs installaions 활성화 시키기

 

스크립트의 이름과 맞춰줘야한다.

s3 버킷도 만들어준다 .

 

pipeline{
    // 어떠한 agent 로도 실행해도 된다는 의미 
    
    agent any
    triggers{
        pollSCM("*/1 * * * *")
    }
    
    tools{
        // node js 플러그인 설치 및 nnodejs 20 에 대한 version 설정정보 
        nodejs 'nodejs20'
    }
    environment{
        $AWS_ACCESS_KEY_ID = credentials('$AWS_ACCESS_KEY_ID')
        $AWS_SECRET_ACCESS_KEY = credentials('$AWS_SECRET_ACCESS_KEY')
        $AWS_REGION = 'ap-northeast-2'
    }
    stages{
        stage('Checkout'){
            steps{
                git url:'https://github.com/fa7271/vue.git',
                credentialsId: 'github_token',
                branch: 'main'
            }
        }
        stage('npm install'){
            steps{
                sh 'npm install'
            }
        }
        stage('npm run build'){
            steps{
                sh 'npm run build'
            }
        }
        stage('aws cli configure'){
            sh '''
            aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
            aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
            aws configure set default.region $AWS_REGION
            '''
        }
        // 전송하기
        stage('deploy to s3'){
            steps{
                sh 'aws s3 cp ./dist s3://boseok-jenkins-build/ --recursive'
            }
        }
    }
}

 

 

cli 에러 난다. 설치만 해주면 된다.

- docker exec -u 0 -it jenkins-server /bin/bash # root 접속
- mkdir awscli && cd awscli
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
- unzip awscliv2.zip
- sudo ./aws/install

 

버킷에 프론트 코드 dist폴더를 추가해주면 된다.

반응형

댓글