[그린컴퓨터] Server/AWS

배포 자동화_ 1. 배포 자동화의 개념 & 젠킨스와 GITLAB + GITHUB 연동하기!

Ben의 프로그램 2023. 9. 19. 13:50
728x90

핵심 Keyword

1. 배포자동화

2. Jenkins

3. 빌드와 패키지

 

** Git Hub 도 Git Lab 과 jenkins 설치 방법 및 설정 방법을 공유하니, 함께 보면서 제일 아래 부분에 Git hub 에서 다르게 해줘야 하는 부분들을 정리해두었으니 참고해주세요~~ **


배포자동화란?
프로젝트를 개발을 하면 계속해서 코드가 변경됩니다. 코드가 변경 될 때마다 소스코드를 가지고 빌드를 한 다음 패키징을 한 다음에, 패키징한 파일을 서버에 업로드를 한 다음, 업로드한 파일을 가지고 자바 명령어를 통해서 실행을 시키는데요. 이 과정을 빌드 그리고 배포 과정이라고 부르는데요. 이 과정을 지속적으로 직접 수행을 하면 시간이 낭비가 되는데요. 이 과정을 자동화 시키게 되면 시간이 절약되겠죠. 반복되는 작업들을 자동화 시킬 수 있고 이것을 배포 자동화라고 합니다. 

빌드 : .java 파일을 byte 파일인 .class 파일로 변환합니다. 
패키징 : .class 파일들을 하나의 패키지로 변환합니다. jar 혹은 war 패키지가 생성됩니다.

 

배포자동화 도구
여러가지 배포자동화 도구가 있는데, 가장 많이 사용되는 것은 Jenkins 입니다. 

 

젠킨스란?
기본적인 틀 안에 내용을 삽입하거나 스크립트를 통해서 사용하는 방식이 있는데요. 우리는 기본 틀 안에 내용을 넣어주는 과정을 사용할 예정입니다. 

 

젠킨스 설치
LTS 버전에서 나의 운영체제에 맞는 젠킨스를 다운로드 합니다. 젠킨스의 설치는 서버에 해야합니다. (개발 컴퓨터에 설치하는 것이 아닙니다.)

계정은 나중에 웹 페이지에서 따로 생성할 것이기 때문에 생략합니다. 젠킨스는 웹 페이지를 제공하는데, 8080이 기본값입니다. 우리의 어플리케이션의 포트를 8080을 사용하기 때문에 8089 로 변경해줍니다. 8089를 넘어가는 포트를 사용하면 안되는데요. 아마존에서 8089 까지 설정을 해놓았기 때문입니다. 

JDK 경로를 지정해줄 때는 Bin 폴더말고 jdk 폴더위치까지만 지정해줍니다.

 설치가 완료되면 8089 포트로 접속하면 위와 같은 화면을 볼 수 있습니다. 

로그인 창이 나오는데요. 초기 진입 비밀번호를 알아내어 빈칸에 넣어주어야 합니다. 빨간색으로 표시된 주소를 복사해서 원격 서버에서 파일 시스템을 연 다음에 그 경로를 붙여 넣은 다음 메모장으로 열면 비밀번호를 확인할 수 있습니다. 

입력하면 위와 같은 창이 뜨는데요. 플러그인을 자동으로 선택해서 설치합니다. 

플러그인을 다 설치한 다음에 관리자 계정을 생성해야 합니다. 헷갈리는 것을 방지하기 위해서 admin / sys123 을 사용하겠습니다. 이메일은 본인이 사용하는 이메일을 입력합니다. 

설치가 완료되면 8089 포트를 통해서 위와 같은 대시보드를 확인할 수 있습니다. 

 

Git 설치
이제 원격 컴퓨터에서 Git 을 설치해야 합니다. 

 

젠킨스 환경설정
깃 까지 설치했다면, 젠킨스 환경설정을 해주어야 합니다. 

Post build task 와 Gitlab( Github 는 아까 기본 설치를 선택했을 때 같이 설치됩니다. )을 설치합니다. 

이제 Git 계정 설정을 해줄 차례입니다. 

계정을 추가해줍니다. 

Git 실행파일의 경로를 설정해줍니다. 

 

프로젝트 준비
프로젝트를 빌드할 때 기본적으로 단위테스트를 수행한 후 Build 를 하게 되는데요. 이때 단위테스트를 실패할 경우 Build 가 실패하게 됩니다. 단위 테스트가 실패해도 Build 를 수행하도록 설정을 추가합니다. 

대시보드에서 새로운 Item 메뉴를 클릭합니다. 

소스코드 관리에서 Git 을 클릭하고 소스코드를 내려 받을 주소를 입력하고 git 계정을 선택해줍니다. 

webhook url 과 Secret token 을 저장해둡니다. 

Webhook 은 특정 이벤트가 발생했을 때 서비스로 알림을 보내는 기능입니다. web hook 을 사용하면 깃 저장소에 업데이트가 발생했을 때, 젠킨스에 알림을 보냅니다. 

깃랩 프로젝트에서 웹훅 설정을 해주어야 하는데요. 

아까 복사한 웹훅 url 과 시크릿 토큰 키를 복사하여 붙여 넣습니다. 

다시 젠킨스로 돌아와서 Build Steps 에 Execute Windw 를 선택합니다. 소스코드를 빌드할 명령어를 입력해야 하는데요. 'gradlew build' 를 입력합니다. 

이번에는 빌드 후 조치 설정을 해야하는데요. Post build task 를 선택합니다. 빌드에 성공하면 build successful 이 출력되는데요. success 로그가 출력되면 실행되도록 옵션을 위와 같이 Log text 설정을 합니다. 

빌드 후 조치에 위와 같은 윈도우 스크립트 문법을 넣어줍니다. 실행중인 프로세스를 종료하고, 다시 실행하는 명령입니다. 이 명령은 사용하는 운영체제에 따라서 달려져야합니다. 지금 사용하는 것은 윈도우입니다. 

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a start /b java -jar build\libs\project12-0.0.1-SNAPSHOT.war >> history.log &

방금 사용한 스크립트 명령어를 좀 더 알아보겠습니다. in( ) 안에 'netstat -aon' 명령은 현재 실행중인 프로세스들을 찾는데요. 8080 포트를 사용하는 것중에 LISTENING 인 것 중에 token = 5 즉, 5번째로 출력되는 2512 라는 pid 를 kill 하는 명령입니다. 

여기까지 완료했다면 대시보드에 작업이 나타나게 됩니다. 

 

젠킨스 테스트 _ 1. 수동 테스트
대시보드에서 프로젝트 옆의 초록색 버튼을 클릭합니다. 

진행 중인 작업의 빌드 내역을 실시간으로 확인할 수 있습니다. 

성공적으로 완료되었는지 확인한 다음 다시 어플리케이션에 접속하면 수정한 대로 반영된 것을 확인할 수 있습니다. 

 

젠킨스 테스트 _ 2. 자동 테스트
프로젝트를 수정하고 git push 를 하면, 해당 이벤트를 감지하고 젠킨스로 알림을 보내 설정한대로 다시 젠킨스가 프로젝트를 다운로드 받고 다시 프로젝트를 실행시킨다. 

작업이 끝나면 위와 같이 수정된 것을 확인할 수 있습니다. 

 

 


GitHub 로 실행하기
https://junhyunny.github.io/information/jenkins/github/jenkins-github-webhook/
https://nirsa.tistory.com/301
참고자료는 위 2가지입니다.

1. 원격 서버에서 SSH 를 생성합니다. 
ssh-keygen 명령을 사용하면, Administrator .ssh 폴더에 id_rsa.pub 파일이 생성되는데, 이것을 사용할겁니다. 

이런 키가 생성되는데, 이 키를 복사해서 가지고 있습니다. 

2. Jenkins Plugin 에서 GitHub Integration 을 설치합니다. 

3. Github 에서 토큰 생성
주의!! 토큰을 생성한 이후, 젠킨스와 연동을 하고 나면, 깃 푸쉬를 깃 허브에 하려고 하면, Git password 를 다시 입력하라고 할 수 있는데요. 이때는 깃허브 PW를 입력하는 것이 아니라 이 토큰을 PW에 입력해야 정상적으로 PUSH가 진행됩니다!


4. Deploy keys 생성
원격 서버에서 생성한 SSH Public 키를 여기에 입력한다음 Add Key 를 수행합니다.

5. Web hooks 생성

URL은 Jenkins 에서 사용한 주소 rm대로를 사용하면 된다. 포트 뒤에 /github-webhook 으로 설정한 것은 뒤에서 나올 Jenkins 에서 Credential 의 아이디이다. 
미리 보자면 이렇게 생성할 것이다. 여기까지 설정하였다면, 이제 젠킨스에서 프로젝트를 생성하러 갑니다. 

6. Jenkins 크리덴셜 생성
만약 이전에 생성한 것이 없으면 화면이 조금 다르게 보일 수 있으나, 기본적으로 global Credential 을 생성해야하니까 맥락은 같다. global 클릭한다.
Add Credentials 클릭
Kind 와 ID, 그리고 Private Key 부분에 SSH 키를 복사해서 넣어준다. 

7. Jenkins 프로젝트 생성
우선, 프로젝트의 HTTPS 주소를 복사합니다.
Jenkins 생성 창에서 url 을 복사해온 것을 넣어줍니다. 

브랜치 설정은 배포 대상 브랜치를 지정해준다. 

Build Trigger 는 이렇게 설정한다. 여기까지 설정하면 끝!!!!!!!

주의사항 !! 

- github pw 는 토큰으로 대체
- github 사이트에서 webhook 을 설정할 때는 간편하게
생성할 때 확인할 수 있는 Build Triggers 에서 나오는 것을 그대로 가져가서 붙여넣으면 됩니다.


- 빌드가 끝난 다음 서버에서 실행 시키는 스크립트 코드의 war 파일의 이름을 내가 실행시키는 것에 맞추어서 바꾸어 줘야 합니다. 


- 원격 서버에서 아래와 같은 명령어를 통해서 젠킨스를 통해서 정상적으로 프로젝트가 실행이 되고 있는지 확인할 수 있습니다. 


- 젠킨스에서 콘솔 창을 통해 로그를 볼 수 있는데, 아래와 같이 원격 서버에 실제 파일의 위치를 확인할 수 있습니다. 


- 해당 폴더에서 build / libs 에 들어가면 war 파일이 생성된 것을 확인할 수 있고, war 이름도 확인할 수 있습니다. 젠킨스에서 설정을 여기 이름으로 해주면 됩니다. 

 

 

 

[Jenkins] 젠킨스와 github webhook 연동하는 방법

젠킨스와 github webhook 연동하는 방법 jenkins와 github webhook을 이용한 연동 방법 입니다. 1) GitHub Intergration 플러그인 설치 jenkins 웹페이지에서 Jenkins 관리 → 플러그인 관리 → 설치 가능을 선택 후 Git

nirsa.tistory.com

 

젠킨스(Jenkins) GitHub Webhooks 연동

<br /><br />

junhyunny.github.io

 

'[그린컴퓨터] Server > AWS' 카테고리의 다른 글

2. 서비스 배포하기 (AWS 서버 환경 구축)  (0) 2023.09.14
1. AWS 란?  (0) 2023.09.14