** 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 를 하면, 해당 이벤트를 감지하고 젠킨스로 알림을 보내 설정한대로 다시 젠킨스가 프로젝트를 다운로드 받고 다시 프로젝트를 실행시킨다.
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 이름도 확인할 수 있습니다. 젠킨스에서 설정을 여기 이름으로 해주면 됩니다.