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에서 실행되면, 환경변수로 다양한 정보를 알려주는데, 이번에 쓴 내용만 먼저 살펴보자.

    1. github.event.pull_request.merged
      • pull_request 이벤트 중 closed 타입에서만 사용
      • 현재 event가 merged됐는 지 (true or false)
    2. github.event.pull_request.head.ref
      • pull request의 source branch를 의미함
    3. github.workflow
      • workflow yaml파일의 name 값을 가져온다. 
    4. 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

 

반응형