-
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