Ngrok을 이용한 Webhook 설정 및 로컬 서버 공개

윤준혁·2024년 7월 21일

문제 상황

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                checkout scmGit(branches: [[name: '{check_branch}']],
                                userRemoteConfigs: [[url: '{my_github_project_repository-url}']])
            }
        }
    }
}
  • 프로젝트의 Jenkins파일에 Push 이벤트가 발생하도록 설정
    -> 이는 GitHub Repository에서 Push가 발생할 때마다 자동으로 트리거가 됩니다.

  • GitHub에서 로컬 서버의 IP를 Webhook URL로 설정하려했지만 불가

원인 분석

is not supported because it isn't reachable over the public Internet (localhost)

  • "공용 인터넷(localhost)을 통해 접근할 수 없기 때문에 지원되지 않습니다" 라는 설명

해결 방법

1. 로컬에서 빌드를 포기

  • 배포 환경(EC2 Instance)에서 Jenkins실행 시 시간이 많이 소요되고, 특정 script는 시간이 많이 소요되서 실패하는 경우가 생김
  • 원래 배포 환경에서 Jenkins를 실행하다가 로컬 환경으로 바꾼거라 바꾸고 싶지 않음

2. 로컬 서버를 임시 퍼블릭 IP로 노출

  • 그래서 찾은 방법이 로컬 서버를 임시 퍼블릭 IP로 노출시켜 GitHub에 등록할 수 있도록 하는 것

Ngrok 설치 방법

https://cordcat.tistory.com/105
해당 포스팅에 자세히 나와있습니다

결과

  • Ngrok을 통해 받은 임시 퍼블릭 IP를 GitHub Webhook에 넣어줌

  • 'Okay, the hook was successfully updated.'라는 문구와 함께 설정 완료됨

개선 방향

Ngrok을 종료하고 다시 실행 시 퍼블릭 IP가 변경되기 때문에 Webhook URL을 다시 설정해야 함


  1. Ngrok 유료 플랜 사용
  • 유료 플랜을 사용하면 고정된 서브 도메인을 제공받아 IP 주소 변경없이 지속적으로 사용 가능

  1. Ngrok 실행 스크립트 작성
  • Ngrok을 자동으로 실행하고, Jenkins 설정을 업데이트하는 스크립트를 작성
  • 예시 코드(Bash 스크립트)
#!/bin/bash

 Ngrok 실행
ngrok http 8080 &

 Ngrok URL 가져오기
NGROK_URL=$(curl -s http://127.0.0.1:4040/api/tunnels | jq -r '.tunnels[0].public_url')

 GitHub Webhook URL 업데이트
curl -X PATCH -H "Authorization: token YOUR_GITHUB_TOKEN" -d "{\"config\": {\"url\": \"$NGROK_URL\"}}" https://api.github.com/repos/yourusername/yourrepo/hooks/YOUR_HOOK_ID

  1. ngrok.yml 설정 파일 사용
  • Ngrok 설정 파일을 사용하여 고정된 구성을 지정할 수 있음
  • ngrok.yml파일을 설정하고 ngrok start 명령어로 실행
authtoken: YOUR_AUTH_TOKEN
tunnels:
  web:
    proto: http
    addr: 8080
    subdomain: customname

0개의 댓글