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

작업

~12 min · jobs, parallelism, dependencies

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

각 작업은 자기 전용 VM을 써

작업은 하나의 러너(VM이나 컨테이너)에서 실행되는 작업 단위야. 같은 워크플로 안에 있는 작업들은 기본적으로 병렬로 돌아. 작업을 여러 개로 나누는 가장 큰 이유가 바로 이거야.

여기서 나오는 중요한 결과들:

  • 각 작업은 깨끗한 작업 디렉터리에서 시작해. 한 작업에서 만든 파일은 다른 작업에서 보여. upload-artifactdownload-artifact를 써서 아티팩트를 명시적으로 넘겨줘야 해.
  • 각 작업의 러너는 새로운 VM이야. 캐시도 다시 채워야 해.
  • 작업은 needs:를 선언해서 다른 작업이 끝날 때까지 기다리게 할 수 있고, 이렇게 DAG를 만들 수 있어.
  • 작업은 if: 조건으로 컨텍스트에 따라 건너뛸 수 있어.

작업의 구성 요소

  • runs-on — 필수야. 러너 라벨을 적어줘(ubuntu-latest, macos-14, self-hosted 등).
  • steps — 필수야. 이 러너에서 순서대로 실행할 명령이나 액션 목록이야.
  • needs — 옵션이야. 의존할 다른 작업을 적어줘.
  • if — 옵션이야. 작업 전체를 실행할지 막을지 결정하는 표현식이야.
  • strategy — 옵션이야. 매트릭스 확장을 할 때 써(나중에 다룰 거야).
  • env — 옵션이야. 작업 범위의 환경 변수야.
  • outputs — 옵션이야. 의존하는 작업으로 넘겨줄 출력값이야.
  • environment — 옵션이야. 승인이 필요한 프로덕션 환경 수준의 게이트야.

Code

작업 DAG 세 개: 빌드 → (테스트, 린트) → 배포·yaml
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build
      - uses: actions/upload-artifact@v4
        with: { name: dist, path: dist/ }

  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

  lint:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run lint

  deploy:
    needs: [test, lint]
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with: { name: dist }
      - run: ./deploy.sh

External links

Exercise

린트, 테스트, 빌드가 하나의 큰 작업에 들어 있는 워크플로를 가져와. 병렬로 실행되는 세 개의 작업으로 쪼개봐. 바꾸기 전후의 실제 경과 시간을 재봐. 새로 필요해진 upload-artifact / download-artifact 협력 과정도 적어둬.

Progress

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

댓글 0

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

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