[Jenkins] Jenkins 를 사용하여 Spring boot 자동 배포 해보기 (2부)

2025. 2. 4. 15:45Jenkins

1편에서 Jenkins 설치를 완료 하였습니다.

 

이제 해당 8888 포트로 접속을 해보면 아래와 같이 로그인창이 보일것입니다. 지난 1편에서 입력한 ID 와PW 를 입력하여 접속해 봅니다.

 

  

접속하면아래와같은 화면이 보일것입니다. 

 

우리의목표는 로컬에서 수정을 하여 Git 에 push 를 하면 해당 Git 의 소스를 내려받아서 빌드를 한후 해당 jar 파일을 개발서버로 전송하여 해당 jar 파일을 run 시키는것 입니다. 하나씩 차근차근 진행해 봅시다.
처음부터 완성된 파이프라인을 보여드리는것도 좋다고 생각하지만 해당 티스토리에 글을 올리는 이유는 제가 진행하면서 맞이한 무수한 실패들과 에러를 한번더 되새겨 보면서 앞으로는 해당 실패와 에러들을 반복하지 않기위함으로 해당 부분에 대해서는 양해 부탁드립니다.  

 

우선 위의 이미지에서 새로운 Item 을 클릭해서 들어가 봅시다.

 

 

우리는 jenkins 자동배포로 검색했을때 다른 곳에서도 많이 들어본 파이프라인 을 통해서 진행할 것입니다. 

Enter an item name 에 적당한 이름을 작성하고 Pipeline 을 선택후 OK 를 눌러 봅시다.

 

 

설정 화면으로 넘어왔는데 하단의 Pipeline 의 스크립트에 우리가 하고싶은 내용을 입력해주면 됩니다. 

 

해당 파이프라인의 공식 문서는 젠킨스 홈페이지에 https://www.jenkins.io/doc/book/pipeline/ 있습니다.

 

대략적으로 아래와 같은 문법으로 진행 됩니다.

 

 

그렇다면 우리도 한번 작성해 봅시다. 우리의 목표중 1번 로컬에서 소스 수정후 Push 를 했다고 햇을때 파이프라인에서 Git Repository 에서 소스를 가져오는것 부터 해당 파이프 라인 스크립트에 작성해 봅시다. 이때 레파지토리 

 

pipeline {
    
    agent any

    environment {
        GIT_REPO = '깃허브 레파지토리 주소'
    }

    stages {

        stage('Clone Repository') {
            steps {
                git branch: 'master', url: "${GIT_REPO}"
            }
        }

    }
}

 

저장을 하고 나면 아래와 같은 화면으로 돌아오게 되는데 좌측에 있는 지금 빌드를 눌러보면 

 

 

빌드가 실패 했다고 나옵니다 해당 #1 을 눌러서 들어가 보면  아래와 같이 나오고 Console Output 을 선택하면 실패에 대한 로그가 나옵니다.

 

 

 

콘솔 로그가 출력되고 이중 원인은 

stderr: remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication. fatal: Authentication failed for 'https://github.com/han1399kr/jenkins-test.git/'

 

GitHub은 2021년 8월 13일부터 비밀번호 인증을 폐지했습니다.
Jenkins에서 GitHub에 접근할 때 패스워드 기반 인증을 시도했기 때문에 실패한 것입니다.
이제 Personal Access Token (PAT) 또는 SSH 키를 사용해야 합니다.

 

 

어차피 아이디 패스워드 입력 해서 인증보다는 ssh 키 입력방식이 편할꺼 같아서 ssh키 방식으로 진행해 보겠습니다. 

 

우선 도커로 올려놓은 Jenkins 컨테이너에서 SSH 키 생성 을 해야 합니다. 

docker exec -it jenkins-docker /bin/bash

 

해당 컨테이너로 접속후 

ssh-keygen -t rsa -b 4096 -C "이메일주소입력 "

ex) ssh-keygen -t rsa -b 4096 -C "test@test.com"

 

명령어 입력후 뭔가 물어보는데 그냥 엔터키 입력하면 키가 만들어집니다. 만들어진 키를 확인 하려면

cat /var/jenkins_home/.ssh/id_rsa.pub

 아래와 같이 키값이 나옵니다.

 

이제 해당 키값을 깃허브에 등록해주면 됩니다.

 

https://github.com/settings/keys

 

GitHub · Build and ship software on a single, collaborative platform

Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.

github.com

 

 

New SSH key 를 클릭한후 적당한 Title 값과 Key 에는 id_rsa.pub 값을 입력해주면 됩니다.

입력해주고 저장하면 아래와같이 ssh 키가 등록된 것이 보일것입니다.

 

 

그리고 젠킨스 서버에서도 인증을 하기 위하여 명령어를 입력해줍니다.

ssh -T git@github.com

 

 

인증이 완료되었다고 successfully 가 뜨고  이제 다시 파이프라인 스크립트를 수정하러 가봅시다.

pipeline {
    
    agent any

    environment {
        GIT_CREDENTIALS_ID = 'jenkins-test-key'
        GIT_REPO = '깃허브 레파지토리 SSH 주소'
    }

    stages {

        stage('Clone Repository') {
            steps {
                git branch: 'master', credentialsId: "${GIT_CREDENTIALS_ID}", url: "${GIT_REPO}"
            }
        }

    }
}

 

깃허브 레파지 토리 주소에는 기존 HTTPS 주소대신 SSH 주소를 입력해줘야 합니다.

 

 

음 그런데 여기서 또 오류가 발생하였다.

오류를 확인하기 위해 열심히 구글링과 GPT 에게 물어보니 Host key verification failed. 오류를 찾아보니 GitHub가 호스트 키를 신뢰하도록 설정해야 한다고 합니다.

ssh-keyscan github.com >> ~/.ssh/known_hosts

 

 

이후 다시 젠킨스에서 빌드를 해보면 

 

 

성공이 뜹니다. 그런데? 깃에서 클론이 정상적으로 젠킨스 쪽으로 받아와졋는지 확인을 해야겟죠?

젠킨스 홈 : jenkins_home 폴더 안에 workspace 안에 hd 폴더가 들어있는것을 알수 있습니다.

깃에서 받아온 그 hd 이죠

 

그리고 다시 hd 안으로 들어가보면 

 

정상적으로 파일들이 받아와진것을 볼 수 있습니다.

 

글이 많이 길어진 관계로 3부에서 뵙겠습니다.

 

[Jenkins] Jenkins 를 사용하여 Spring boot 자동 배포 해보기 (1부)

[Jenkins] Jenkins 를 사용하여 Spring boot 자동 배포 해보기 (2부)

[Jenkins] Jenkins 를 사용하여 Spring boot 자동 배포 해보기 (3부)