본문 바로가기
프로그래밍/웹서버

[Jenkins] 설치 및 Github와 연동, Ngrok을 이용해 공인 Url받기

by 오답노트의 주인 2022. 4. 10.
== Version ==
Jenkins        v2.33.2
Ubuntu        18-04 LTS
Ngrok        2.3.40
NodeJS        16.9.0

목표

  • Jenkins의 설치와 기본 설정
  • ngrok을 이용해 공인 url 생성
  • Github와 Jenkins 연동

 

문제상황

AWS EC2 인스턴스를 백엔드로 구축한 후, 프론트 서버 역할을 할 공간을 네이버 클라우드에 마련했다.

 

Github에 커밋된 프로젝트에서 Pull Request가 일어날 때, 프론트 서버에 설치된 Jenkins에서 정적 파일을 생성하려고 했다.

 

그런데, 네이버 클라우드의 마이크로 서버에 Jenkins를 깔고 빌드를 돌리니, 서버가 응답하지 않는 사태가 벌어졌다.

 

마이크로 서버에 많은 기대를 한 잘못이었다. 결국 로컬에서 빌드를 돌리고, 결과물만 서버에 갖다주는 방법을 선택했다.

 

보통 Jenkins 서버를 따로 마련해두고 빌드를 맡기지만, 나는 학생이므로 그렇게 하지 않기로 했다.

요약도

내 환경 요약도

로컬 환경에 Jenkins를 설치해둔 상황이다. develop branch에 commit후 master로 pull request를 넣었을 때, 미리 설정해둔 Webhook을 통해 로컬에 있는 Jenkins로 요청이 들어온다. 

 

그 후 Jenkins가 빌드를 성공하고 결과물을 네이버 클라우드에 전송하면 Github에 성공 메시지가 나타난다.

 

3일간 삽질을 한 결과 다소 복잡하지만 정상적으로 작동하는 CI환경을 구축했다.

 

Jenkins 설치

나는 Docker를 이용하지 않고 있고, WSL2를 이용하는 환경이라 설치 과정이 약간 다를 수 있다.

 

아래의 사이트에 있는 내용대로 진행하되, 방화벽 부분만 건너뛰었다.

 

무엇보다 로컬환경이어서 공인IP를 갖지 않기 때문에... 이 문제는 후술할 Ngrok을 이용해 해결할 수 있다.

 

https://dev.to/davidkou/install-jenkins-in-windows-subsystem-for-linux-wsl2-209

 

🌟Install Jenkins in Windows Subsystem for Linux (WSL2)

Jenkins Jenkins is one of the most popular tools DevOps tools, originally designed with on...

dev.to

 

sudo apt install openjdk-8-jdk           # choose this or next line
sudo apt install openjdk-11-jre-headless # or Install Java 11 JDK/JRE
sudo apt install Jenkins

# if you have an error, run below commands

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add
sudo bash -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt-get install jenkins

여기까지 마친 후 Jenkins의 포트를 변경한다. Spring의 경우 8080을 이용하기 때문이다. 

 

나는 Vue프로젝트가 8080을 이용하고 있어서 겹치지 않도록 9000번으로 변경했다.

sudo vi /etc/default/jenkins

// /etc/default/jenkins
...
HTTP_PORT=8080 
# ^ 이 값을 바꾸세요
...

이렇게 한 후 localhost:9000으로 접속한 후 나머지 설치과정을 진행하면 된다.

Ngrok 설정

Jenkins가 로컬에 있다보니, Github와 소통하기 위해 공인 Url이 필요하다. 다행히도 매우 쉽게 연결해주는 소프트웨어인 Ngrok을 이용하면 된다.

 

https://ngrok.com/

 

ngrok - secure introspectable tunnels to localhost

@Botto ngrok, probably the best tool I have started to use for my webwork since firebug also great support

ngrok.com

간단한 가입과정을 거친 후, download for windows를 눌러 ngrok.exe가 담긴 압축파일을 받는다.

 

압축을 해제하고 exe파일을 실행하면 cmd창이 열리고 사용가능한 명령어들이 터미널에 출력되어있다.

로컬의 특정 포트를 공인 url로 접근할 수 있게 만들어주기 위해 ngrok http 9000처럼 사용하면 된다.

ip정보가 담긴 url이 생성되어 가렸다.. 아무튼 이렇게 forwarding 항목에 url이 생성되어 로컬호스트에 접속할 수 있게 되었다.

이 주소는 Jenkins 관리 > 시스템 설정 (system configure) > Jenkins Location에 등록해두면 된다. 

 

단지 번거로운 점은 ngrok을 실행할 때마다 url의 앞부분이 달라지기 때문에, jenkins를 사용할 때마다 이 url의 앞부분을 고쳐야한다. 안 고칠 수 있다면 좋겠지만 돈을 내야한다고 한다.

 

Jenkins를 사용하게 된다면 ngrok을 켜두고 진행하면 되겠다.

Github ↔ Jenkins

Repository에서 Pull Request가 일어날 때마다 Jenkins에게 자동으로 날아갈 수 있도록 Webhook을 이용해야한다.

 

ngrok으로 생성한 url 뒷부분에 ghprbhook/를 붙여야 요청을 받을 수 있다.

Content type은 application/json으로, Let me select individual events를 선택하여 특정 상황에서만 요청을 받을 수 있게설정한다. Issue comments, Pull request를 선택한다.

 

여기까지 하면 문제없이 설정을 마쳤다.

 

다음 게시글에서는 Githib Pull Request Builder와 Publish Over SSH 플러그인 설정과 Jenkins Freestyle Item 설정을 하는 방법을 적어두겠다.

 

============================================================================

다음 글 -> https://10cheon00.tistory.com/4

 

[Jenkins] Plugin 설치 및 Item 구성

== Version == Jenkins v2.33.2 Ubuntu 18-04 LTS Ngrok 2.3.40 NodeJS 16.9.0 목표 Github Pull Request Builder 설치, 설정 Publish Over SSH 설치, 설정

10cheon00.tistory.com

 

댓글