프로그래밍 노트/GIT

GitHub Actions 훑어보기(구성요소)

깡냉쓰 2023. 10. 19. 14:43
728x90
반응형

Workflow

  • GitHub Actions의 상위 개념
  • 자동화 해놓은 작업 과정이며 repository내에 .github/workflows폴더 아래 yaml 파일로 설정 가능
    • 여러 개의 워크폴로우 설정 가능
  • 2가지 속성 정의 필요
    • on : 워크플로우가 언제 실행되는지 정의
    • jobs : 워크플로우가 구체적으로 어떤 일을 해야하는지 명시
on:
  push:
    branches:
      - master
      - dev
  pull_request:
    branches:
      - dev

jobs:
  # ...
  • master, dev 브랜치에 push이벤트가 발생할 때 마다 workflow를 실행해라.
  • dev 브랜치에 PR이벤트가 발생할 때 마다 workflow를 실행해라.

Jobs

  • 독립된 가상 머신 또는 컨테이너에서 돌아가는 하나의 처리 단위 의미
  • 하나의 workflow에는 여러 개의 Job으로 구성될 수 있으며, 적어도 하나는 존재해야 함
    • 기본적으로 Job은 동시에 실행되며 작업 간에 의존관계 설정을 통해 순서 제어 가능
  • 2가지 필수 정의 속성
    • runs-on : Job을 실행할 환경(러너)
    • steps : 작업 설정
jobs:
  job1:
    # job1 세부 내용
  job2:
    # job2 세부 내용
  job3:
    runs-on: ubuntu-latest
    steps:
      # ...
  • job1, job2, job3 이란 ID를 가진 3개의 Job
  • runs-on
    • Public GitHub를 사용하면, GitHub에 제공하는 runner를 사용하여 Job 실행 가능
    • Self-hosted runner를 설정하여 자체 runner에서 실행 가능
  • GitHub Enterprise에서는 GitHub 퍼블릭 Actions Runner 사용이 불가하므로, 따로 Runner를 구축하여 사용해야 한다.

실행 순서 제어 - needs

  • 하나의 workflow상에서 각각의 Job은 서로 격리된 환경에서 실행 된다.
    • job1, job2, job3는 서로 다른 CI 서버에서 작업이 실행이된다는 말이다. why? 병렬 처리로 인한 성능 향상
    • job1, job2, job3가 파일을 공유해서 수정해야한다면 하나의 job으로 병합 필요
  • job1 완료 후에 job2 실행, job1/job2 완료 후에 job3가 실행되어야 한다면? needs속성 사용
jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      - run: echo 'Hello Job1'
  job2:
    runs-on: ubuntu-latest
    needs: job1
    steps:
      - run: echo 'Hello Job2'
  job3:
    runs-on: ubuntu-latest
    needs: [job1, job2]
    steps:
      - run: echo 'Hello Job2'

작업의 선택적 실행 - if

  • if 속성을 통해서 조건을 생성할 수 있음
on: push
jobs:
  job1:
    runs-on: ubuntu-latest
    steps:
      - run: echo 'Hello Job1'
  job2:
    runs-on: ubuntu-latest
    if: github.ref_name == 'master'
    steps:
      - run: echo 'Hello Job2'
  • push 이벤트가 master 브랜치인 경우만 실행
  • contains 내장 함수도 있는데, PR 코멘트에 특정 단어를 입력했을 때 실행이 되는지 확인해보자.

Steps

  • 여러 단계의 task들의 집합
    • 커맨드/쉘스크립트 실행 혹은 액션(action)을 실행할 수 있음
  • run : 커맨드나 스크립트를 실행할 때 사용
  • uses : 액션(action)을 사용할 때 사용
jobs:
  hello-world:
    runs-on: ubuntu-latest
    steps:
      - name: Git Checkout
        uses: actions/checkout@v3
      - name : Echo Hello World!
        run: echo Hello World!

Actions

  • 재사용이 가능한 컴포넌트로 빈번하게 반복적으로 사용되는 단계를 정의해 둠
    • 하나의 저장소 범위 내에서 액션을 모두 공유해서 사용 가능
    • ex. GitHub 공식 Actions(actions/checkout@v3, actions/cache@v3)
  • custom한 액션을 만들 수 있고, GitHub MarketPlace에 있는 공용 액션도 사용 가능
728x90
반응형