CI-CD
OpenAPI 자동화
Hamp
2025. 10. 9. 20:05
반응형

👋 들어가기 전
긴 연휴동안, 가족과의 시간을 잘 보내기도 했지만, 자동화를 위한 여정도 만만치 않게 오래 보냈다.
뭐가 그렇게 하고싶어서, 추석 틈틈히 했을까... 하나씩 살펴보자.
🎯 목표

1️⃣ 외부 이벤트
현재는 아래 사진처럼, github action에서 내가 수동 트리거를 줘야하지만, 최후의 목표는 커스텀 이벤트를 통해 돌리는 것

핵심은 trigger중 , workflow_dispatch를 사용하면 input과 함께 트리거를 만들 수 있다.
name: 🤖 Auto Generation
on:
workflow_dispatch:
2️⃣ 나머지 작업 중, 부딪힌 문제들
실제 스크립트 코드나, 파이썬 코드는 보안상 보여줄 수 없고, 시간이 많이 걸린 문제 해결 관련된
코드만, 부분적으로 공개하겠다.
😂 파이썬 의존성 문제

분명 pip로 install을 했음에도, 모든 파이썬 파일에서 의존성을 못찾는 문제가 발생했다.
문제 해결의 핵심은, 워크플로우에 파이썬 버전을 명시한 후, pip install을 하는 것
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11' # 필요한 버전
- name: 🧰 Running setup script...
run: |
make setup
pip install requests GitPython # 파이썬 의존성 설치
✅ 액션을 통해, git 관려된 작업을 할 때, permission이 필요함
name: 🤖 Auto Generation
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write # 이 줄이 있어야 푸시 가능
pull-requests: write # pr 생성
| 권한 |
설명 | 주요 사용 예시 | 기본값 |
| actions | 워크플로 및 작업 실행(workflow runs) 관리 권한 | 다른 워크플로 트리거(workflow_dispatch), 취소, 재실행 등 | read |
| checks | 체크런(check runs) 및 체크결과(check suites) 읽기/쓰기 | CI 도구(예: lint 결과, 테스트 리포트)를 체크로 업로드 | read |
| contents | 리포지토리의 파일, 브랜치, 태그 등에 대한 접근 | 코드 checkout, 파일 커밋, 태그 푸시 등 | read |
| deployments | GitHub Deployments API 권한 | 배포 상태 업데이트(deployment status 작성 등) | read |
| id-token | OpenID Connect 토큰 요청 권한 | AWS, GCP, Azure 등 외부 클라우드 인증 (OIDC federation) | none |
| issues | 이슈 생성/편집/닫기 권한 | 자동 이슈 생성, 코멘트 달기 등 | read |
| discussions | GitHub Discussions 읽기/쓰기 | 커뮤니티 Q&A 자동 관리, 공지 등 | read |
| packages | GitHub Packages (npm, Docker, Maven 등) 접근 | 패키지 publish 또는 pull | read |
| pages | GitHub Pages 관련 권한 | Pages 배포(gh-pages 브랜치 푸시) | read |
| pull-requests | Pull Request 데이터 접근 | PR 코멘트, 리뷰 작성, 상태 업데이트 | read |
| repository-projects | Repository-level Projects (Kanban-style boards) 접근 | 자동으로 카드 추가/이동 등 | read |
| security-events | 보안 경고(SAST, Dependabot 등) 접근 | 보안 경고 자동 분석, 레포트 생성 | read |
| statuses | 커밋 상태(Status checks) 읽기/쓰기 | ci/test passed 같은 상태 업데이트 | read |
⭐️ 특정 브랜치에서 머지 될 때만, 동작하게 하고 싶음
workflow에서 실행되면, 환경변수로 다양한 정보를 알려주는데, 이번에 쓴 내용만 먼저 살펴보자.
- github.event.pull_request.merged
- pull_request 이벤트 중 closed 타입에서만 사용
- 현재 event가 merged됐는 지 (true or false)
- github.event.pull_request.head.ref
- pull request의 source branch를 의미함
- github.workflow
- workflow yaml파일의 name 값을 가져온다.
- github.ref
- 워크플로우가 실행된 Git 참조(Ref) 값
- 즉, 어떤 브랜치나 태그에서 실행됐는지 나타냄
위 내용을 이용해서, pull request가 머지되고, release/xx 형태의 브랜치가 source 브랜치일 때,
jobs을 실행시키고 싶다.
name: 🏷️ Deploy
on:
pull_request:
types:
- closed
branches:
- develop
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: write # 이 줄이 있어야 푸시 가능
jobs:
deploy:
if: ${{ github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release') }}
runs-on: macos-15
반응형