본문 바로가기
C.W.K.
Stream
Lesson 10 of 12 · published

실행 조건 이벤트 심화

~13 min · events, advanced, fork

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

팀을 곤란하게 만드는 실행 조건들

pushpull_request 말고도 알아둬야 할 미묘한 이벤트 타입들이 있어. 대부분 장애가 터지고 나서야 팀이 이걸 깨닫지.

pull_request vs pull_request_target

  • pull_request포크 코드 컨텍스트에서 비밀값 없이 실행돼. 안전하지.
  • pull_request_target베이스 저장소 컨텍스트에서 모든 비밀값을 가지고 실행돼. 이런 워크플로에서 PR 코드를 체크아웃하면 위험해. 전형적인 'pwn-request' 취약점이야.
  • pull_request_target은 라벨링, 댓글 작성, 메트릭 계산 용도로만 써. PR 작성자의 코드를 실행하는 건 절대 금지야.

schedule

  • 항상 UTC 기준이야.
  • 활동이 없는 저장소에선 비활성화돼 (커밋이 60일 없으면).
  • 이탈: 트래픽이 몰릴 땐 GitHub가 예약된 실행을 지연시킬 수 있어. 밀리초 단위의 정확도에 의존하면 안 돼.

workflow_dispatch

  • 입력값은 타입이 있어: string (기본), boolean, choice, environment.
  • 일부 UI 흐름에서 필수 입력값은 기본값을 명시해야 해.
  • 용도는 수동 배포, 일회성 백필, 임시 수정이야.

workflow_run

  • 다른 워크플로가 끝날 때 워크플로를 실행해.
  • 활용 사례: CI 후 배포, 댓글 요약, 포워더.
  • 포크에서도 베이스 저장소의 비밀값을 상속받아. 주의해.

Code

타입 입력값이 있는 workflow_dispatch·yaml
on:
  workflow_dispatch:
    inputs:
      env:
        description: Target environment
        type: choice
        options: [staging, production]
        default: staging
        required: true
      dry-run:
        description: Dry run (no real deploy)
        type: boolean
        default: true
      version:
        description: Version tag to deploy (e.g., v1.4.2)
        type: string
        required: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "Deploying ${{ inputs.version }} to ${{ inputs.env }}"
          if ${{ inputs.dry-run }}; then echo 'DRY RUN'; fi

External links

Exercise

저장소에서 pull_request_target을 쓰는 워크플로를 감사해 봐. 각각 PR 작성자의 코드를 실행하지 않는지 확인해. 만약 실행한다면 지금 바로 이슈를 만들거나 고쳐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.