[CI/CD] Github, Jenkins, Docker를 활용한 CI/CD 환경 구축 - 3

chrkb1569·2024년 1월 2일
0

개인 프로젝트

목록 보기
26/28
post-thumbnail
post-custom-banner

지난 시간에는 Docker 컨테이너 위에서 Jenkins 서버를 실행해보았습니다.

오늘은 Jenkins와 Github를 연동하여 Github Repository에 커밋이 발생하였을 경우, 자동으로 Jenkins에서 빌드되는 환경을 구축해보겠습니다.

Github 설정

우리가 원하고자하는 CI/CD 환경은 github에 PR이 발생하였을 경우, github 에서 Jenkins로 PR이 발생하였다는 신호를 보내고, 해당 신호를 수신한 Jenkins가 github Repository내부에 존재하는 스크립트 파일을 읽어 스크립트에서 설정해놓은 작업을 수행하는 환경입니다.

여기서 중요한 요소는 바로 github에서 Jenkins 서버에 신호를 보내는 것과 Jenkin에서 github에 접근하는 것입니다.

이를 위해서는 github에서 발급할 수 있는 token을 Jenkins에게 넘겨주어 repository에 접근할 수 있도록 허용해야하며, github에서도 Jenkin에게 신호를 주는 webhook을 설정해야합니다.

Github Token 발급

github 메인 페이지 -> Settings -> Developer Settings -> Personal Access Tokens에 접근하여 토큰 발급



생성된 토큰은 문자열의 형태를 띄고 있는데, 이 값은 나중에 확인할 수 없다는 특징을 가지고 있기 때문에 별도로 보관하는 것이 좋다고 생각합니다.

Github WebHook 설정

다음은 Jenkins 서버에 신호를 보내기 위한 Webhook과 관련된 설정을 해보도록 하겠습니다.

다음처럼 배포할 프로젝트 -> Settings -> Webhooks로 이동

Add webhook 선택

Payload URL에는 {Jenkins 서버 주소}/github-webhook/을 입력

다음처럼 webhook이 추가되는 것을 확인할 수 있습니다.

Jenkins 설정

Jenkins 메인 화면 -> Jenkins 관리 -> Credentials로 이동해줍니다.

그럼 다음과 같은 화면을 확인할 수 있을텐데, 여기에 github Repository에 접근할 수 있는 권한을 가진 사용자를 생성해주겠습니다.

global 선택

Add Credientials 선택

Username -> github 아이디
Password -> access token
ID -> 식별자

다음처럼 사용자가 추가된 것을 확인할 수 있습니다.

Jenkins File

이전에 Jenkins만을 사용하여 CI/CD 환경을 구축하였을 때에는 FreeStyle Project를 생성하였습니다.

FreeStyle Project를 사용하여 환경을 구축하니, GUI 환경에서 작업할 수 있다는 점이 편리하였으나, 변동되는 사항이 발생하였을 경우에는 Jenkins 인스턴스에 접속하여 수정해야한다는 단점이 존재하였습니다.

이러한 단점을 극복할 수 있는 대안이 존재하는데, 바로 Jenkins Pipeline입니다.

Pipeline?

https://www.jenkins.io/doc/pipeline/tour/hello-world/

공식 문서에 명시되어 있는 Jenkins Pipeline에 대해서 간략하게 요약을 해보자면, Github Action에서 스크립트를 통해 Github Action의 동작을 미리 설정하였던 것처럼 Jenkins Pipeline 역시 별도의 파일을 통하여 Jenkins의 동작을 미리 설정할 수 있는 기능입니다.

FreeStyle Project를 통하여 CI/CD 환경을 구축하는 경우, GUI 환경이기 때문에 작업하기에 편리하다는 장점이 있지만 변동 사항이 있을 경우에는 Jenkins 서버에 접속하여 이를 변경해야한다는 점으로 인하여 조금 불편했던 경험이 있었습니다.

Jenkins Pipeline을 사용하는 경우, 별도의 스크립트 문법을 배워야하기 때문에 조금 번거롭다는 단점이 존재하지만, 유동적으로 작업을 설정할 수 있다는 점에서 시도해볼만한 가치는 있다 생각하였습니다.

Jenkins File 작성하기

Jenkins 파일은 Jenkins 공식 문서를 참고하여 작성하였습니다.

https://www.jenkins.io/doc/book/pipeline/syntax/

일단은 간단하게 Repository로부터 프로젝트 파일을 가져오는 작업만 수행해보도록 하겠습니다.

pipeline {
    agent any

    stages {
        stage('Clone Repository') {
            steps {
                git branch: 'main', url: "https://github.com/chrkb1569/DevOps-Practice"
            }
        }
    }
}

Item 생성

다음처럼 Pipeline 선택하여 프로젝트 생성

General

Github Project 옵션에 프로젝트 URL를 입력하고, Github의 webhook을 사용하기 위해서 Github Hook 옵션을 선택해줍니다.

Pipeline

Pipeline은 다음처럼 2개의 옵션이 존재하는데, 다음과 같은 특징을 가지고 있습니다.

Pipeline script -> 하단에 위치한 Script란에 아까 우리가 작성하였던 Jenkins 스크립트를 직접 작성하는 방식

Pipeline script from SCM -> github Repository에 존재하는 Jenkins 파일을 가져오는 방식

저희는 Jenkins 파일을 github Repository에 올려놨기 때문에 두 번째 옵션을 선택해줍니다.

빌드 테스트

커밋이 완료되었을 때, 자동으로 빌드가 되는 것을 확인할 수 있었습니다.

대략적인 틀은 완성된 것 같으니, Jenkins 파일을 수정하여 CI/CD 환경을 구축해보록 하겠습니다.

post-custom-banner

0개의 댓글