ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GitHub Action Workflow 전략
    개발 TIP/GIT 2023. 3. 2. 21:51

    😎 GitHub Action Workflow 전략

    GitHub Action은 GitHub에서 제공하는 CI/CD 도구입니다. 이를 활용하여 빌드, 테스트, 배포 등의 자동화된 작업을 수행할 수 있습니다.

    Workflow 정의

    Workflow는 GitHub Action에서 수행하는 작업의 모음입니다. 이 작업들은 하나의 YAML 파일로 정의됩니다. 각 작업은 job으로 정의되며, 여러 개의 job을 하나의 workflow로 연결할 수 있습니다. Workflow는 특정 이벤트(예: push, pull request 등)가 발생할 때 실행됩니다.

    Workflow 구성

    Workflow를 구성하는 주요 구성 요소는 다음과 같습니다.

    Name

    Workflow의 이름을 정의합니다. 이름은 유일해야 합니다.

    On

    Workflow가 실행되는 이벤트를 정의합니다. 예를 들어 push 이벤트가 발생할 때 workflow를 실행하도록 정의할 수 있습니다.

    Jobs

    하나 이상의 job을 정의합니다. job은 workflow 내에서 실행되는 단위 작업입니다. 각 job은 이름, 실행 환경, 실행 스크립트 등을 포함합니다.

    Steps

    각 job 내에서 수행되는 단계를 정의합니다. 단계는 쉘 스크립트, 커맨드, Action 등으로 구성됩니다.

    Workflow 전략

    Workflow를 적용할 때 유용한 전략은 다음과 같습니다.

    Parallel

    여러 job을 병렬로 실행하여 빌드 시간을 단축할 수 있습니다. 이를 위해서는 작업에 대한 의존성을 고려해야 합니다.

    예제

    jobs:
      build:
        runs-on: ubuntu-latest
        strategy:
          matrix:
            node-version: [10.x, 12.x, 14.x]
        steps:
          - uses: actions/checkout@v2
          - name: Use Node.js ${{ matrix.node-version }}
            uses: actions/setup-node@v1
            with:
              node-version: ${{ matrix.node-version }}
          - run: npm install
          - run: npm test
    
    

    위 예제는 매트릭스 전략을 활용하여 여러 실행 환경에서 동시에 빌드 및 테스트를 수행하는 job을 정의한 것입니다.

    Matrix

    매트릭스 전략을 활용하여 여러 실행 환경에서 동시에 빌드 및 테스트를 수행할 수 있습니다. 매트릭스를 사용하면 행렬로 정의된 여러 실행 환경에서 각각의 작업을 실행할 수 있습니다.

    예제

    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Build and test
            run: |
              for dir in test1 test2 test3
              do
                cd $dir && npm install && npm test && cd ..
              done
    
    

    위 예제는 여러 폴더에서 빌드 및 테스트를 수행하는 job을 정의한 것입니다.

    Cache

    캐시를 활용하여 빌드 시간을 단축할 수 있습니다. 이전에 생성된 캐시를 사용하여 중복된 작업을 수행하지 않도록 할 수 있습니다. 캐시를 사용하면 빌드 시간이 단축되어 더 효율적인 작업이 가능합니다.

    예제

    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Cache dependencies
            uses: actions/cache@v2
            with:
              path: node_modules
              key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
              restore-keys: |
                ${{ runner.os }}-node-
          - name: Install dependencies
            run: npm install
          - name: Build
            run: npm run build
    
    

    위 예제는 캐시를 활용하여 빌드 시간을 단축하는 job을 정의한 것입니다.

    Conditional

    조건문을 활용하여 특정 조건에 따라 실행 여부를 결정할 수 있습니다. 예를 들어 특정 브랜치에만 적용되는 작업을 정의할 수 있습니다. 조건문을 사용하면 코드를 더욱 유연하게 작성할 수 있습니다.

    예제

    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Build and test
            if: ${{ github.ref == 'refs/heads/main' }}
            run: |
              npm install
              npm test
          - name: Deploy to production
            if: ${{ github.ref == 'refs/tags/v*' }}
            run: |
              npm install --production
              npm run deploy -- --env production
    
    

    위 예제는 조건문을 활용하여 특정 브랜치 및 태그에 대해서만 job을 실행하는 것을 정의한 것입니다.

    Approval

    특정 조건을 만족하는 경우에만 배포되도록 승인 단계를 추가할 수 있습니다. 이를 통해 배포되는 코드의 품질을 높일 수 있습니다.

    예제

    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: Build and test
            run: |
              npm install
              npm test
          - name: Deploy to staging
            if: ${{ github.ref == 'refs/heads/main' }}
            run: |
              npm install --production
              npm run deploy -- --env staging
          - name: Wait for approval
            if: ${{ github.ref == 'refs/heads/main' }}
            uses: tibdex/wait-for-approval@v1
            with:
              github-token: ${{ secrets.GITHUB_TOKEN }}
              issue-title: 'Please approve deployment to production'
          - name: Deploy to production
            if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.ref == 'refs/tags/v*' }}
            run: |
              npm install --production
              npm run deploy -- --env production
    
    

    위 예제는 배포 전에 승인 단계를 추가한 것입니다.

    결론

    GitHub Action Workflow는 CI/CD 자동화를 위한 강력한 도구입니다. Workflow를 효과적으로 사용하여 더욱 안정적이고 효율적인 개발 및 배포 프로세스를 구축할 수 있습니다. 또한, 위에서 언급한 Workflow 전략을 적용하여 더욱 효율적으로 작업할 수 있습니다.


    이상으로 GitHub Action Workflow 전략에 대해 알아보았습니다. 감사합니다.

    '개발 TIP > GIT' 카테고리의 다른 글

    GitHub Action을 이용한 Vue.js CI/CD 구축  (0) 2023.03.02
    Git 이모지 컨벤션 사용  (0) 2023.02.05

    댓글

Designed by Tistory.