오늘의하루

Step1-1. Jenkins에서 GitHub Webhook 사용 및 실행 본문

Spring/mini Project

Step1-1. Jenkins에서 GitHub Webhook 사용 및 실행

오늘의하루_master 2024. 2. 6. 16:59
EC2에서 Jenkins 설치 및 Maven Project 빌드하기
 

Step1. Jenkins 설치 후 프로젝트 Build 및 Start

Step 1의 목표 1. AWS에서 EC2 인스턴스를 프리티어로 하나 생성한다. 2. Ubuntu 환경에서 Jenkins를 설치한다. 3. 자신의 Git Repository에 있는 Sptring Boot 프로젝트를 Clone한다. 4. Jenkins를 이용하여 Build 한다.

jangto.tistory.com


Git Hub에서 WebHook 설정하기

Jenkins에서 설정한 Repository에서 Settings > Webhooks를 선택한 후 Add webhook을 통해 webhook을 설정할 수 있다.

Payload URL : [EC2 Public IP]:[Jenkins Port]/github-webhook/
Content type : application/json

Jenkins의 Item Configuration 변경 및 Push

빌드 유발에서 GitHub hook trigger for GITScm polling을 체크한 후 저장한 후 push를 하게 되면 Build된다.

EC2 프리티어를 사용할때 팁

Jenkins에 대해 공부하면서 느낀점이 서버가 너무 많이 터진다는 점이다. 이를 조금이나마 해결하기 위해 구성에서 Add build step의 Delete workspace before build starts를 선택해주는 것이다.

Delete workspace before build starts는 빌드 시작 전 Jenkins는 작업공간을 모두 삭제합니다.

Jenkins 이용시 서버가 터진다면 아래 글을 참고 하세요
 

Step1-2. EC2 프리티어 Jenkins 서버 터지는 현상 해결

CI / CD를 연습하기 위해 Jenkins에 대해 공부를 시작했는데 빌드시 서버가 터지는 일이 너무 많아서 매번 EC2 인스턴스를 중지하고 다시 실해을 매번 반복하다 Swap이라는것을 알게되었다. 이를 적용

jangto.tistory.com

실행을 위한  Execute shell 작성

백그라운드 실행이 되지 않아 가장 힘들었던 구간이다.shell을 작성하기 위해서는 bash Script를 알고 있으면 도움이 많이 된다.

#!/bin/bash
jar_file="demo/target/demo-0.0.1-SNAPSHOT.jar"
pid=$(pgrep -f demo-0.0.1-SNAPSHOT.jar)

if [ -n "$pid" ]; then
    kill -9 $pid
    echo "실행 중인 프로세스를 종료했습니다."    
else
	echo "실행 중인 프로세스가 없습니다."
fi

if [ -f "$jar_file" ]; then
    BUILD_ID=dontKillMe nohup java -jar $jar_file &
    echo "새로운 JAR 파일을 실행했습니다."
else
    echo "JAR 파일이 존재하지 않습니다."
    exit 1
fi

여기서 알게된 점은 Jenkins는 빌드 종료 시 빌드 중 생성된 자식 프로세스를 종료(kill)한다는 것이다.

이걸 모르고 백그라운드로 실행하게 되면 빌드가 종료되고 빌드 중 생성된 프로세스가 종료되버리기 때문에 연결되었다가 바로 종료된다.

하지만 포그라운드의 경우 빌드가 종료되지 않고 있어서 연결이 되는 것이고 이는 다음 작업을 하지 못하게 막고 있게 된다.

빌드 중 생성된 프로세스를 종료(kill)하지 않기 위해서는 BUILD_ID=dontkullMe를 앞에 붙여주기만 하면 된다.

그럼 해당 프로세스는 종료되지 않고 나머진 종료되게 된다.

Comments