S E P H ' S

[Jenkins] Jenkins로 CI/CD 환경 구축하기 (2) 본문

Programing & Coding/Server 구축 및 CI&CD

[Jenkins] Jenkins로 CI/CD 환경 구축하기 (2)

yoseph0310 2021. 11. 24. 18:05

이전 포스팅에 이어서 이번엔 자동 배포에 대해서 더 자세하게 다뤄보겠습니다.

새로운 Item 등록

대시보드 좌측 사이드 바에서 새로운 Item 을 클릭합니다.

item의 이름을 작성하고 Freestyle project를 선택하고 좌하단의 OK 버튼을 클릭합니다.

 

GitLab과 연결하기 위한 Plugin 설치

대시보드로 이동해서 플러그인을 설치하도록 하겠습니다.

Jenkins 관리 > 플러그인 관리 > 설치가능 에서 Publish Over SSH, GitLab Plugin을 설치합니다.

 

먼저 AWS에 필요한 key파일을 지정하겠습니다.

Jenkins 관리 > 시스템 설정 > Publish over SSH 설정으로 이동합니다.

 

Key에 넣어야할 RSA 키는 서버 ssh 접속에 필요한 pem 파일을 열어 나오는 텍스트를 입력하면 됩니다. 

이때 -----BEGIN RSA PRIVATE KEY-----, -----END RSA PRIVATE KEY-----를 포함하여 작성해야합니다.

 

다음으로 접근하고자 하는 AWS의 hostname과 username을 등록합니다.

hostname은 서버 도메인, username은 ubuntu를 입력하면 됩니다.

그뒤에 Test Configuration을 눌러 Success 메세지를 확인합니다.

 

이제 GitLab에 관련된 설정을 진행하겠습니다.

jenkins 관리 > 시스템 설정 > Gitlab 으로 이동합니다.

Credentials가 없다면 Add를 눌러 추가합니다. GitLab API token을 이용해서 등록하면 됩니다.

GitLab API token은 GitLab의 Settings > Access Token에서 발급한 뒤 Add하면 됩니다.

Kind 에서 GitLab API token을 선택하고 API token에 발급받은 Access Token을 입력, ID에 Gitlab ID를 입력합니다.

마찬가지로 Test Connection을 눌러 Success 메세지를 확인합니다. 

 

 

소스 코드 관리 설정하기

git pull 을 실행할 repository를 등록합니다. 또한 원하는 branch도 설정할 수 있는데, build되기를 원하는 branch를 지정해주시면 됩니다. 따라서 branch 관리에 따라서 배포 branch를 정하여 주의 깊은 관리가 필요합니다.

생성한 프로젝트의 구성으로 들어가서 소스 코드 관리 탭을 클릭합니다.

Git 을 클릭하고 Repositories의 URL에 깃 URL을 입력하고 Credentials에 Add를 눌러 UserID와 PW를 입력하고 Add를 누르면 추가됩니다.

 

 

빌드 유발 설정하기

이제 레포지토리 설정이 끝났으니 그 레포지토리에서 push가 됐을 때, 젠킨스가 어떤 행동을 해줄지에 대한 설정을 해줍니다.

빌드 유발 탭으로 이동해서 Build when a change is pushed to GitLab을 선택합니다.

밑으로 조금 내려보면 고급버튼이 있습니다. 클릭하고 Generate를 눌러 Gitlab에 사용할 Secret token을 생성합니다.

자동으로 push 이벤트를 감지할 수 있도록 webhook을 지정해줄 겁니다. Gitlab에 로그인해서 setting > webhook으로 이동합니다.

URL에 칸에 webhook URL, Secret token에 아까 발급한 Secret token을 입력하고 Trigger부분엔 push 이벤트가 감지될 브랜치를 지정해줍시다. URL은 아래에 보이는 URL을 추가해주면 됩니다.

 

빌드 플러그인 설정

Jenkins가 깃랩으로 부터 pull을 받아 빌드를 하기 위해선 플러그인이 필요합니다. 어떤 프로젝트를 빌드하느냐에 따라서 필요한 플러그인이 다른데 예를 들어, Node.js 빌드가 필요하다면 NodeJS Plugin, maven 빌드가 필요하다면 maven 플러그인을 설치하시면 됩니다.

빌드하고 싶은 프로젝트에 따라 필요한 플러그인이 무엇인지 확인하시고 설치하시기 바랍니다. 저의 Spring 프로젝트는 Gradle 프로젝트이기 때문에 Gradle Plugin을 설치하도록 하겠습니다.

Jenkins가 npm build를 하려면 빌드 환경 구성이 필요합니다. 빌드 환경에서 다음을 클릭하고 설치한 플러그인을 선택해주세요.

환경 구성이 끝났다면 Pull을 잘 받아오는지 테스트 해봅시다.

Jenkins > "Item name" 에서 Build Now를 클릭해서 잘 빌드가 되는지 확인해보세요.

 

$ docker exec -it [젠킨스 컨테이너 이름] bash

# 예시
$ docker exec -it jenkins-docker bash

cd /var/jenkins_home/workspace

(앞의 Promise는 구성해보면서 먼저 생성됐던 다른 프로젝트입니다. 처음 이 과정을 하시는 분들이라면 2개만 생성되는 것이 맞습니다.)

 

 

빌드하기

오래 잘 따라와 주셨습니다. 이제 드디어 빌드를 해볼 차례입니다!

jenkins > "Item name" > 구성 > 빌드 에서 Execute Shell 항목을 추가하세요.

 

Command에 작성된 명령어는 workspace에 생성된 프로젝트를 기준으로 작동합니다.

개발한 프레임워크에 맞는 빌드 명령어를 사용하여 지정해주시면 됩니다.

 

빌드를 했으면 이를 AWS 서버에 올려서 실행까지 시켜야 성공적인 배포가 이루어집니다. 빌드 후 조치로 이동하여 남은 과정을 마저 작성하겠습니다.

SSH Server - Name 에는 Jenkins 시스템 설정에서 등록한 SSH 서버 중에 선택.

 

Source files는 어떤 파일을 배포할 것인지를 지정합니다. 예시로 보이는 backend/** 는 backend 폴더안의 모든 디렉토리와 파일들을 배포하겠다는 의미입니다. 프로젝트 디렉토리 구성에 맞춰서 잘 확인하고 배포할 디렉토리 및 파일을 설정하시기 바랍니다.

 

Remove prefix는 제거할 접두사를 의미합니다. 만약 backend/build/lib/java.jar로 되어있는 구조를 lib/java.jar로 배포하고 싶다면 이 부분에 lib/java.jar를 제외한 backend/build를 입력하시면 됩니다.

 

Remote directory는 배포파일을 저장할 배포 타겟 서버의 디렉토리를 설정합니다. 자동으로 생성해주지는 않기 때문에 여러분의 관리 방법에 따라 새로운 디렉토리를 생성하거나 기존의 디렉토리를 명시하면 됩니다. 개인적으로는 배포된 파일임을 알 수 있도록 새로 디렉토리를 만들어 관리하시는 것을 추천드립니다.

 

Exec command에는 배포 후에 AWS 서버 상에서 배포된 파일을 실행시킬 명령어를 적어주시면 됩니다. 프로젝트마다 실행되는 방법이 다릅니다. 그 부분을 참고해서 작성하시기 바랍니다.

 

이제 모든 설정이 끝났습니다. 커밋 후 서버가 자동으로 작동되는 것을 확인해보시기 바랍니다.

 

지금까지 젠킨스를 활용해서 자동 배포하는 방법에 대해 포스팅을 해봤습니다. 오류가 있거나 더 효율적인 방법이 있다면 얼마든지 댓글로 피드백 부탁드립니다. 더 개선점이 필요한 부분에 대해서는 공부해서 새로이 포스팅 하도록 하겠습니다.