DevSecOps/etc
Flask를 활용한 GitHub 프로젝트 자동 빌드 시스템 구축(소스 동기화)
봉의일상
2025. 3. 3. 16:13
개발을 하다 보면 GitHub에 저장된 코드를 자동으로 가져와 빌드하고 실행해야 하는 경우가 많습니다.
이를 위해 Flask와 GitPython을 활용하여 간단한 자동 빌드 시스템을 구축하는 방법을 소개합니다.
1. 개요
이 프로젝트에서는 Flask 웹 서버를 구축하여 다음 기능을 수행하도록 합니다:
- GitHub에서 지정된 프로젝트를 클론 또는 업데이트
- 프로젝트 빌드 실행
- API 호출을 통해 빌드 결과를 확인
2. Ubuntu에서 필요한 패키지 설치
먼저, Python과 필요한 패키지를 설치해야 합니다.
sudo apt update
sudo apt install python3 python3-pip python3-flask python3-git -y
설치 후 Python과 pip 버전을 확인합니다.
python3 --version
pip3 --version
이후 pip를 최신 버전으로 업데이트합니다.
python3 -m pip install --upgrade pip
3. Flask 애플리케이션 코드 작성
아래는 app.py 파일을 생성하고, GitHub에서 소스를 가져와 빌드하는 Flask 애플리케이션 코드입니다.
import os
import subprocess
from flask import Flask, jsonify
import git
app = Flask(__name__)
# GitHub Repository 정보
REPO_URL = "https://github.com/********/my-project-001.git"
CLONE_DIR = "./my-project-001"
BRANCH = "develop"
# 빌드 명령어 (필요에 따라 변경)
BUILD_COMMAND = ["make"] # 예시: make 사용, 프로젝트에 따라 변경 필요
def clone_or_pull_repo():
"""GitHub에서 소스를 가져오거나 업데이트"""
if os.path.exists(CLONE_DIR):
repo = git.Repo(CLONE_DIR)
repo.git.checkout(BRANCH) # 브랜치 변경
repo.remotes.origin.pull()
return f"Repository updated to {BRANCH} branch"
else:
repo = git.Repo.clone_from(REPO_URL, CLONE_DIR, branch=BRANCH)
return f"Repository cloned with {BRANCH} branch"
@app.route('/update', methods=['GET'])
def update_repo():
"""소스 업데이트"""
message = clone_or_pull_repo()
return jsonify({"message": message})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
4. 백그라운드 실행 방법
Flask 서버가 실행된 후 터미널이 종료되면 프로세스도 함께 종료됩니다. 이를 방지하고 백그라운드에서 실행하려면 아래 방법을 사용할 수 있습니다.
1) nohup 명령어 사용
nohup python3 app.py > flask.log 2>&1 &
이렇게 실행하면 app.py가 백그라운드에서 실행되며, 로그는 flask.log 파일에 기록됩니다.
5. API 사용 방법
>소스 업데이트:
curl http://127.0.0.1:5000/update