TY_Daily

젠킨슨 최종 정리 -2 본문

SSAFY프로젝트

젠킨슨 최종 정리 -2

TY_TaeYeon 2024. 10. 15. 12:20

 

여러가지가 방식이 있는데 어차피 자기 인증만 하면 되는거니 필요한걸로 아무꺼나 해도 상관무!

주의 점이 있다면 아래 작성하는거는 블로그 마다 다른게 너무 많은데 일단 내가 성공한 방식은 Username에는 github 아이디, Password는 github 비밀번호 아래 ID는 진짜 아무꺼나 jenkins내에 불릴 이름(KTY2) 같은걸로 했다!

 

아래와 같이 credentialsId(위의 ID에 한 걸로 하면 아래와 같이 성공!)

pipeline{
	agent any
    
    stages{
    	stage('Checkout'){
        	steps{
            	git branch: 'master',
             	credentialsId: 'KTY2', 
            	url: "https://lab.ssafy.com/s11-webmobile3-sub2/S11P12D101.git"
            }
        }
    }
}

 

 

- docker ps 명령어를 통해 container ID를 확인해주고!

 

sudo docker exec -it -u 0 [도커 컨테이너 ID] /bin/bash

 

인제 파이프라인 구축을 위해 도커안에 직접 접근해보자! (파라미터 의미는 인터넷 처보면 나옴! -u 0 는 관리자모드!)

이렇게 들어간다면! 아래와 같이 @ 뒤에 주소가 어지럽게 바뀐것을 확인할수 있을것이다!

 

<Tip> 여기서 경로는 아까 앞에서 docker run 처음할때 연결했던 포트와 폴더 기억나지 거기에서 찾아보면됨!

(아래는 도커 container 실행 명령어로 ! -v 을 통해 볼륨이 연결된것을 확인할 수 있을것이다!)

 

sudo docker run -d -p 8080:8080 -v /home/ubuntu/jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name jenkins2 jenkins_backup:latest

 

-v 볼륨으로 연결된 파일 경로를 통해서 보면  /home/ubuntu/jenkins-data/workspace/ 로컬에서 이 경로를 통해 들어가면 도커의 폴더구조를 쉽게 이해할수 있음!

 

 

만약에 gradle 같은 경우 보안상의 이유로 git에 올리지 않고 직접적으로 복사하거나 파일을 넣어야 할 경우가 존재할수 있다 이럴때는 젠킨슨 내에 있는 기능 사용하면 됨! 사용 방법은 일단 아래와 같다! (일단 정리 순서는 파이프라인 -> 기능 순서로 정리될것 같은데 아래까지 쭉읽어보고 다시 파이프라인을 본다면 이해학 쉬울것이다!)

pipeline{
	agent any
    
    stages{
    	stage('gitclone'){
        	steps{
            	git branch: 'master',
             	credentialsId: 'KTY2', 
            	url: "https://lab.ssafy.com/s11-webmobile3-sub2/S11P12D101.git"
            }
        }

        stage('Build Backend'){
            steps {
                dir('/var/jenkins_home/workspace/D101-final/BE/o2o/'){
                    sh 'pwd'
                    sh 'ls -al'
                    sh 'chmod +x ./gradlew'
                    sh 'chmod +x ./gradlew.bat'
                    sh 'java --version'
                    sh './gradlew clean build '
                    }
                }
            }
        }
    }

 

- 우리 프로젝트 기준으로 application-aws.properties 파일이 안올라가서 생긴 build 에러 라 생각해 거기에 맞게 세팅하는 방법해보려함!

 

 

 

- Add Credential 을 누른후 Secret file , file을 첨부한후 ID를 지정한다 이때의 ID는 해당 credentials를 사용할 ID라 생각하면 됨!!!

 

pipeline{
	agent any
    
    stages{
    	stage('gitclone'){
        	steps{
            	git branch: 'master',
             	credentialsId: 'KTY2', 
            	url: "https://lab.ssafy.com/s11-webmobile3-sub2/S11P12D101.git"
            }
        }
        
        
        
        stage('aws property file download play cp execute') {
	        steps {
    	        withCredentials([file(credentialsId: 'db_properties', variable: 'dbConfigFile')]) {
        	        script {
                    sh 'rm /var/jenkins_home/workspace/D101-final/BE/o2o/src/main/resources/application-aws.properties'
            	        sh 'cp $dbConfigFile /var/jenkins_home/workspace/D101-final/BE/o2o/src/main/resources/application-aws.properties'
                    }
		        }
	        }
        }
        
        }
    }

 

- 다음과 같은 명령어로 Credential에 저장된 secret 파일에 대한 처리를 할수 있었다! 추가적인 설명을 해보자면!

- credentialsId : jenkins-credentials에 등록한 credentials의 ID

- deConfigFile : jenkins-credentials에 등록한 credentials의 파일 경로! 해당 이름으로 위 코드 기준으로 $dbConfigFile 변수에 할당된다! 

- sh 'cp 원래파일경로 복사될위치경로' 이렇게 작성해주면 cp 명령어를 통해 복사됨!

 

+ 추가적으로 rm 명령어를 통해 해당 application property 파일을 삭제했는데 그이유는 git을 통한 이벤트 발생시 cp 명령어의 오류가 발생해서 하기전에 지우고 이런식으로 진행하였다!

 

 

 

+ 혹시 프로젝트에 따라 특정 서버에 접속해야할일이 생긴다면 ? (pem키 있을때)

마찬가지로 credentials에 Global credentials 부분으로 가기!

 

ID나 Description 현재 젠킨슨 안에서 사용할 이름 Username같은 경우 aws 에서 사용한 username Private Key 같은경우 

pem 파일 메모장으로 열면 그 파일 그대로 복사해서 붙여넣으면됨!

 

 

stage('Deploy') {
            steps {
                sshagent(credentials: ['ssafy_aws_key']) {
                    sh '''
                        ssh -o StrictHostKeyChecking=no ubuntu@i11d101.p.ssafy.io uptime
                        scp /var/jenkins_home/workspace/D101-final/BE/o2o/build/libs/o2o-0.0.1-SNAPSHOT.jar ubuntu@i11d101.p.ssafy.io:/home/ubuntu/BEserver
                        ssh -t ubuntu@i11d101.p.ssafy.io ./deploy.sh
 
                    '''
                }
            }
        }

 

- 위의 명령어를 통해 중간에 진행하는동안 에러가 발생했음! 

 

(원인) sshagent 플러그인을 설치안했었음! - 마찬가지로 Dashboard > Jenkins 관리 > Plugins 에 가서 해당 plugin을 설치해주자!

 

또한 ./deploy.sh 의 권한 이슈가 생겨서 코드를 아래와 같이 수정했음!

 

stage('Deploy') {
            steps {
                sshagent(credentials: ['ssafy_aws_key']) {
                    sh '''
                        ssh -o StrictHostKeyChecking=no ubuntu@i11d101.p.ssafy.io uptime
                        scp /var/jenkins_home/workspace/D101-final/BE/o2o/build/libs/o2o-0.0.1-SNAPSHOT.jar ubuntu@i11d101.p.ssafy.io:/home/ubuntu/BEserver
                        ssh -t ubuntu@i11d101.p.ssafy.io "chmod +x ./deploy.sh && ./deploy.sh"
                    '''
                }
            }
        }

- && 명령어를 통해 권한 chmod 실패 하면 뒤에것을 실패하도록 설계하였음!

- 위 코드에 대해 간단한 설명을 추가해보자면 StrictHostKeyChecking 의미는 연결 및 인증단계 중 호스트 키 검사 방법을 지정하는것으로 무시하고 진행하도록 비활성화 시킨것!

- scp 명령어를 통해 빌드된 jar 파일을 운영 서버로 전송, 운영 서버에 미리 작성한 deploy.sh 파일 을 통한 빌드된 파일을 실행하는 것으로 명령어를 실행하는것이다!

 

이렇게되면 결국 접속까지는 하는것이니! 결국 실행하면 되는것이다. deploy.sh 는 특정 명령어들이 모여있는것이라 필요에 따라 커스텀 해서 될것같다!

'SSAFY프로젝트' 카테고리의 다른 글

젠킨슨 최종 정리 -3  (1) 2024.10.17
젠킨슨 최종 정리 -1  (3) 2024.10.13
젠킨슨 공통2  (0) 2024.10.10
젠킨슨 백업  (0) 2024.08.07
Jenkins를 이용한 CI/CD 구축하기 -4 (백엔드 build & 배포 성공)  (0) 2024.08.02