TY_Daily

Jenkins를 이용한 CI/CD 구축하기 -2 본문

SSAFY프로젝트

Jenkins를 이용한 CI/CD 구축하기 -2

TY_TaeYeon 2024. 7. 30. 03:38

 

 

 

 

 

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

주의 점이 있다면 아래 작성하는거는 블로그 마다 다른게 너무 많은데 일단 내가 성공한 방식은 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 는 관리자모드!)

 

 

- 아래와 같이 ip 가 바뀌는걸 확인한후 탐색 시작! 

 

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

$  sudo docker run -d -p 8080:8080 -v /home/ubuntu/jenkins-data:/var/jenkins_home --name jenkins jenkins/jenkins:jdk21

 

- 같은 원리로 /home/ubuntu/jenkins-data/workspace/ 로컬에서 이 경로를 통해 들어가면 도커의 폴더구조를 쉽게 이해할수 있음!

 

 

-  gradle 발견!

// 일단 에러 발생! 스톱!!!! 원인 : application-aws 즉 우리가 올리지 않은 데이터에 대한 오류 발생했어!

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 명령어의 오류가 발생해서 하기전에 지우고 이런식으로 진행하였다!