Judaeng
Jenkins를 이용한 자동 배포환경 만들어보기 본문
최근에 배포에 대해 배우고, 연습해보니 매우 중요하다는 것을 느꼈습니다. <- 개인적인 생각!
그래서 "Git과 Jenkins를 연동해서 내 레포를 자동 배포 환경으로 연습해보자"라는 마음으로 만들게 되었습니다!
귀엽게 봐주세요!!!✊
😠글쓴이의 무지성 Jenkins 설치 진행과정 요약
1. AWS EC2 서버에 젠킨스 설치(글쓴이는 AMI, OS는 Ubuntu 20.04.1 LTS 버전이었다.)
2. Jenkins에 액세스 하기(Jenkins의 기본 포트는 8080이기 때문에 보안 그룹에 들어가서 인바운드 규칙을 편집해야 한다.)
3. Jenkins 잠금 해제(젠킨스의 잠금을 해제하려면 비밀번호를 제공해야 한다. 이 부분은 다른 블로그를 찾아보자.)
4. 비밀번호를 입력하고 플러그인 설치를 선택한다.
5. 관리자 생성(회원 가입)
6. Jenkins 시작하기 -> Start using Jenkins
7. Jenkins 설치 완료
자동으로 배포하기 전 손으로 직접 배포하기(Jenkins를 사용하기 전 Deploy 과정 => ⚡중요함)
첫 번째 과정
1. EC2 인스턴스 생성
2. 패키지 설치(git, java 등 설치)
3. git clone(EC2 인스턴스에 clone 한다.)
4. EC2 서버에서 프로젝트를 빌드한다.
5. 빌드 완료된 것(jar or war)들을 실행해준다.(서버 실행)
6. EC2 인스턴스 인바운드 규칙 설정해주기(포트 열어주기)
7. 테스트를 진행한다. (Hello World 테스트 완료)
두 번째 과정
1. 수정되거나 새로 만든 사항들을 Git feature 브랜치에 push 한다.
2. Local 환경에서 프로젝트를 build(빌드)한다.
3. 빌드 완료된 추출물(jar or war)을 테스트 서버(EC2 server)로 전송한다.
4. 배포 스크립트를 통해 배포한다.
5. 테스트를 진행한다.(수정 사항이 있다면 1~5번 반복한다. 여기 부분이 Hello world 테스트 부분이다.)
6. 테스트 완료된 release 브랜치에 push 한다.
7. 버저닝 후 Local 환경에서 프로젝트를 빌드한다.
8. 다시 빌드 완료된 추출물을 중앙 관리 서버로 전송한다.
9. 중앙 배포 스크립트를 실행하여 QA 서버로 복사 및 배포한다.
10 QA가 진행된다.(수정 사항이 있다면 6~10번 반복)
11. 중앙 배포 스크립트를 실행하여 Product로 복사 및 배포한다.
위 과정을 보면 푸시-빌드-전송-배포 과정이 많다. 반복적인 과정이 굉장히 많다.
위에 과정의 도움을 줄 여기
GitHub과 Jenkins 연결하기
1. Git에서 Credential 생성하기
GitHub 자신의 계정으로 로그인 후 내 프로필 쪽에 Setting을 들어가면 Developer Settings 메뉴로 들어간다.
아래 사진과 같이 Personal access tokens 메뉴로 들어간다.
그리고 Generate new token 메뉴를 선택한다.
2. 다음은 토큰으로 접근할 수 있는 범위를 설정한다.
접근 범위는 "repo"와 "admin:repo_hook"을 선택한다.
선택이 끝나고 토큰을 생성하면 문자열로 된 토큰이 생성된다. => 기억하고 있는 것이 좋다.
3. Jenkins에서 GitHub 연결 설정
위에서 생성된 토큰을 Jenkins의 GitHub 연결 부분에 설정해보자.
Jenkins 초기화면에서 Jenkins -> Manage Jenkins -> Configure System 메뉴로 들어가면 GitHub 계정을 설정하는 부분이 나온다.
나는 한글이 나와서 Jenkins 관리 -> 시스템 관리를 들어가면 GitHub 계정을 설정하는 부분이 나온다.
Name은 GitHub 연결 설정을 구별할 이름으로 정의하고 API URL은 default로 https://api.github.com로 설정되어 있는데 default 값을 사용한다.
다음 접속 Credential을 설정해야 하는데, Credential 부분에서 Add 버튼을 눌러서 Credential 설정 메뉴를 실행한다.
위와 같은 화면이 나온다면 Kind는 "Secret text"를 선택해주고, Secret 앞에 github에서 생성한 토큰 키를 입력한다.
ID에는 본인의 github ID를 입력한다. => 이메일 혹은 닉네임
Credential 입력이 끝나면, 아래 그림과 같이 Credentials 메뉴 아래에 Test Connection 버튼이 있는데, 이 버튼을 누르고 github이랑 연결이 제대로 되는지 테스트해보자.
Jenkins 프로젝트 생성 및 설정
Jenkins와 github 연결 설정이 끝났다면, Jenkins에서 프로젝트를 생성한다.
Jenkins 메뉴에서 새로운 Item(New Item)을 클릭한 후
Freestyle project를 생성한다.
1. Git 연결 설정
프로젝트 설정에서 아래와 같이 Git 메뉴로 이동한다.
여기서 Repository URL을 입력한다.
Repository URL은 본인 github Repository에서 녹색 Code를 누르면 나오는 Clone HTTPS로 된 URL을 입력하면 된다.
다음 이 repository에 연결할 연결 정보를 입력해야 하는데, Jenkins에서 credentials 메뉴로 들어간다.
이 메뉴에서 Kind를 “Username with password”를 선택하고 Username에는 본인의 github id, Password에는 github 비밀번호를 입력한다. => 나는 github 이메일 또는 닉네임을 입력하고 비밀번호를 입력했다.
1.2 빌드 트리거 설정
다음 어떤 조건에서 Jenkins 빌드를 실행할지를 설정하는데, GitHub에 코드가 푸시되면 빌드를 트리거링 하도록 설정을 할 것이다.
아래 그림과 같이 Build Triggers(빌드 유발) 메뉴에서 GitHub hook trigger for GitScm Polling을 선택한다.
이렇게 설정하면 GitHub에서 코드 푸시가 될 때 webHook 메시지를 Jenkins에 보내주는데, 이 WebHook 메시지를 받을 때마다 빌드를 하게 된다.
2. GitHub에서 WebHook 설정
Jenkins 가 GitHub에서 보내는 WebHook에 의해서 Triggering이 되도록 설정했으면, 이제 GitHub에서 코드가 푸시될 때마다 WebHook을 Jenkins에 보내도록 설정해야 한다.
GitHub Repository로 들어가면 우측 상단에 Settings라는 메뉴가 있다.
이 메뉴에 들어가서 좌측에 Integration & Service라는 메뉴를 선택한다.
Services 메뉴에서 “Add service” 버튼을 클릭한 후에 “Jenkins (GitHub plugin)” 을 선택한다.
다음 플러그인 설정에 Jenkins hook url에 Jenkins가 WebHook을 받을 HTTP 경로를 입력한다.
일반적으로 http://{Jenkins server의 URL}/github-webhook 이 된다.
만약 Integration & Service 라는 메뉴가 안 뜨고 들어가도 아무것도 없다면 나랑 같은 현상이다.
나는 Webhooks 메뉴를 선택하고 Add webhook을 누르고 Content type는 application/json으로 설정하고, Payload URL에 WebHook을 받을 HTTP 경로를 입력했다.
그리고 Just the push event에 체크하고 Add webhook 버튼을 클릭했다.
이제 모든 설정이 끝났다.
제대로 작동하는 것을 확인하기 위해서 코드를 commit 한 후에 Push를 해보면 빌드가 자동으로 진행이 된다.
Jenkins의 해당 project에서 좌측의 “GitHub Hook Log”를 보면 WebHook을 잘 받았는지 확인이 가능하다.
아래는 실제로 WebHook이 발생한 내용을 확인한 화면이다.
Jenkins 배포 쉘(shell) 및 프로젝트 자동 배포 환경 만들기
위에 과정을 다 한 후에 자동 배포를 하기 위해서 검색을 시작했다.
검색을 시작하고 알아보았더니, 배포 쉘을 통해서 배포 및 프로젝트 시작을 할 수 있었다.
1. EC2 서버에서 내가 사용하게 될 프로젝트 폴더 파일을 하나 만든다. => 중요하다면 이름을 잘 정해주자.
2. 폴더 안에서 git init 명령어를 쳐주고, git remote add origin {자신이 배포하고 싶은 repo HTTPS 경로} 쳐준다.
3. git config remote.origin.url "{https://자신의_github_ID:{아까 만들어 준 토큰 값}@{자신이 배포하고 싶은 repo HTTPS 경로}} 이런 식으로 config 내용을 정해준다.
4. 그 폴더 안에서 config를 확인해보고, 내가 원하는 정보가 들어가 있다면 git pull을 입력해 가져온다.
5. 위에 과정이 잘 끝났다면, 이제 폴더 권한을 줘야 한다. (중요하다. 글쓴이의 경우 지인 찬스를 이용하여 해결했다.)
// 내가 사용한 방식
$sudo chown 소유자.그룹 -R {pwd 디렉토리 주소 확인}
// 다른 방식도 많지만 하나만 보자면
$sudo chmod 700 {pwd 디렉토리 주소 확인, 권한 폴더}
6. 폴더 권한까지 다 해결되었다면 ls 명령어로 확인해본다. => 기본적으로 README.md 가 있다.
Execute shell Command 안에 코드를 집어넣어준다.
글쓴이의 경우는 아래와 같이 코드를 집어넣었다.
경로는 자신이 어떤 폴더에서 어떤 프로젝트를 git pull 해와야 되기 때문에 적어줘야 한다.
echo "test"
cd (pwd 경로) 자신의 프로젝트를 git pull할 경로, 폴더에서 pwd로 경로를 확인해서 넣어주자.
git pull
7. EC2 인스턴스에서 서버를 실행한다. => 글쓴이의 경우, 나중에는 npm start가 된다.
8. 폴더 안에 가서 git pull이 되었는지, ls 명령어로 확인한다. => 기본적으로 README.md 가 있다.
9. 만약 잘 되었다면 자신의 레포에서 html 하나를 만들어서 "Hello World"가 자동으로 잘 배포되는지 확인한다.
그러면 다시 서버를 끄고 켜야 된다. EC2 퍼블릭 IPv4 주소에 들어가서 Hello World를 확인해보자.
위에 자동 배포 환경 만들기에 도움이 될 만한 Blog's
4. 글쓴이의 환경 Ubuntu 20.04.1 LTS에 도움이 된 블로그
⚡내가 자동 배포 환경을 만들어보고, 다시 블로그에 정리하면서 신기했던 부분을 다시 되짚어볼 수 있어서 좋았다.
그리고 블로그를 작성해보면서 자동 배포 환경 과정을 정리하고 복습을 한번 더 할 수 있어서 좋았다.
처음엔 직접 배포만 해봤는데, 이 과정을 자동화할 수도 있다는 말만 들었을 땐 "오 그렇구나"했는데 직접 구현해보니, 너무나 재밌기도 했지만, 배우는 과정이 너무 어렵기도 했다.💧
그래도 자동 배포 환경을 만드는 연습 해보니 뿌듯하기도 하고, 다음에 다른 사람에게 추천하거나 알려줄 때 도움이 될 것 같아서 좋다.
자동 배포 환경을 더 자세하게 이해를 하려면 네트워크 부분이나, 리눅스 부분도 많이 공부해야 될 것 같다.
'DevOps > Jenkins' 카테고리의 다른 글
Jenkins 알아보기 (0) | 2021.05.01 |
---|