본문 바로가기
개발공부/Infra

django CI/CD와 Jenkins github 연동

by dding-g 2020. 4. 21.

PHAS 캡스톤 프로젝트를 진행하면서 해보지 않았거나 익숙하지 않았던 것들을 최대한 많이 써보려고 노력하는 중이다.

이번에는 jenkins를 github와 연동해서 CI/CD를 해보려고 한다.

CI/CD란?

CI(Continous Integrations) 란?

개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. CI를 성공적으로 구현할 경우에 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드테스트되어 공유 repository에 통합 관리되므로 공유 project를 관리하기 수월해진다.

CD 란?

지속적인 서비스 제공 Continuous Delivery, 지속적인 배포 Continuous Deployment 두 가지로 읽힐 수 있다.
내가 알기로는 개발자들이 개발 --> fork 뜬 repository에 push 및 PR --> 리드 개발자가 최종 merge --> 배포 툴을 이용한 배포 자동화라고 알고 있다.

아래 링크에 더 상세하게 설명되어 있다.

Jenkins 설치

먼저 내 컴퓨터에 docker로 설치해서 사용한 후 1주일 후에 서버에서 jenkins를 동작시킬 예정이다. 설치법 정도만 다르고 세팅은 같을 테니 한번 해보자. (1주일 있다가 하는 건 학교 사정 때문에 ㅎㅎ)

docker katemetic을 사용하면 쉽게 도커 이미지를 설치할 수 있다. 다만, jenkins라고 검색하면 jenkins official이라고 나오는 이미지가 있는데, 이상하게 이 이미지로 하니까 처음 기본 plugin을 설치하는 과정에서 install이 전부 실패했다. (CL에서 docker 이미지를 받을 때 경로는 jenkins와 jenkins/jenkins 였댜.) 그래서 밑에 있는 다른 jenkinsci/jenkins 이미지로 설치하였다. 몇 가지는 실패하긴 하였으나 install이 되긴 하였다. 왜 실패한지는 잘 모르겠다.

밑의 글들은 이 블로그에서 많이 참고하였으며, django와 github 연동 및 테스트는 이 블로그를 참고하였다.

Jenkins Github 연동

  1. 왼쪽의 New items 클릭 후 적당한 item name을 입력하고 Freestyle Project로 시작.
  2. 2번Github project에 체크한 후 연동할 Repository 주소 입력.
  3. github.com/Organization명 or User명/Repo명 Git 커밋할 때 쓰는 remote URL이 아니라 사이트 URL이다.
  4. 소스코드 관리로 이동. Certicate의 Add 버튼을 누른다.
    1. 3번UsernamePassword에는 Github ID/PW인데, ID는 로그인할 때 사용하는 이메일이 아니라, Github 프로필 들어가면 사진 하단에 있는 ID이다. 밑의 ID는 구분하는 용도이기 때문에 아무거나 입력해도 된다.
  5. Github에서 Webhook 설정해주기
    1. 먼저 Jenkins System 설정에서 외부에서 접근할 수 있는 URL을 설정해주어야 한다. (도메인 or IP)4번
    2. 다음은 Github에서 Webhook을 설정해준다. Repository의 setting에서 webhook으로 들어간 다음, Add버튼을 눌러준다.image다음의 Payload URL은 아까 설정해준 https://Jenkins의 주소/github_webhook/으로 설정한다.
  6. 이제 Jenkins 설정으로 다시 돌아온다
  7. Github에서 Push 되면 자동으로 빌드가 이루어질 수 있도록 GitHub Hook trigger for GITScm polling에 체크해준다.
  8. django를 이용하여 프로젝트를 진행하기 때문에 test와 server만 올리면 된다
    1. Build 탭에서 Excute Shell로 설정해준 후, 테스트와 배포를 진행한다. 나 같은 경우는 같은 서버에 jenkins와 django를 올리기 때문에 바로 runserver를 해줘도 무관하지만, 프로젝트가 더 커지면 보통 CI/CD를 하는 서버와 Web Server는 다르기 때문에 빌드, 테스트, 배포 과정을 따로 해주는 게 맞다.

'개발공부 > Infra' 카테고리의 다른 글

FE개발자의 ECS 전환기  (0) 2024.05.25
FE개발자가 개발서버 12대 인프라 구성한 이야기  (0) 2024.05.25