본문 바로가기
DevOps.

GitHub Actions Workflow 명령어 정리

by dev챙 2024. 9. 9.

GitHub Actions Workflow 명령어 정리

매번 복붙하지말구 GitHub Actions Workflows .yml 용어를 정리 해보았다.

전체 스크립트

스크립트에 관한 설명은 아래 url 을 통해 확인할 수 있다.
https://velog.io/@xiu_8/github-action%EC%9C%BC%EB%A1%9C-cicd-feat.-aws-s3-cloudfront

name: DEV CI

on:
  push:
    branches: ["dev"]
  pull_request:
    branches: ["dev"]

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - uses: actions/checkout@v4

      - name: Create dotenv file
        run: |
          touch .env
          echo "VITE_BASE_URL=${{secrets.VITE_BASE_URL}}" >> .env
          echo "VITE_FIREBASE_API_KEY=${{secrets.VITE_FIREBASE_API_KEY}}" >> .env
          echo "VITE_FIREBASE_APP_ID=${{secrets.VITE_FIREBASE_APP_ID}}" >> .env
# ... env 파일에 생성할 객체 echo 명령어로 추가하기
          cat .env

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: yarn # yarn으로 설정

      - name: Yarn install
        run: yarn

      - name: Yarn build
        run: yarn build

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_DEFAULT_REGION }}

      - name: Deploy to S3
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --delete
        env:
          AWS_S3_BUCKET: ${{ secrets.DEV_AWS_S3_BUCKET_NAME }}
          SOURCE_DIR: "dist"

      - name: Invalidate CloudFront Cache
        run: aws cloudfront create-invalidation --distribution-id ${{ secrets.DEV_AWS_DISTRIBUTION_ID }} --paths "/*"

1. name

  • 워크플로우의 이름을 정의한다. name으로 이름을 지정하면, GitHub Actions 대시보드에서 해당 이름이 작업단계로 표시된다.
 name: DEV CI

2. on

  • 워크플로우가 실행될 트리거 이벤트를 지정한다. 예를 들어, 작성된 브랜치에 코드가 푸시되거나 PR이 열렸을 때 워크플로우를 실행할 수 있다. 아래 코드는 dev 브랜치 기준으로 작성된 내용이다.
on: 
    push:
        branches: ["dev"]
    pull_request:
        branches: ["dev"]

3. jobs

  • 워크플로우에서 실행할 작업(Job)을 정의한다. 하나의 워크플로우 내에 여러 작업이 있을 수 있다.
jobs:
  build:
    runs-on: ubuntu-latest

4. runs-on

  • Job이 실행될 환경을 설정한다. 여기서는 Ubuntu 최신 버전에서 실행되도록 설정한다.
runs-on: ubuntu-latest

5. strategy.matrix

  • 여러 버전의 Node.js 등 특정 설정을 동시에 테스트하고 싶을 때 사용하는 매트릭스 전략이다. 아래 예시 20.x 버전의 Node.js를 사용하도록 설정되어 있다.
strategy: matrix: node-version: [20.x]

6. steps

  • Job에서 수행할 작업 단계들을 정의한다. 각 step은 명령어를 실행하거나 특정 액션을 사용할 수 있다. run부분에는 리눅스 명령어를 통해 작성할 수 있다.
steps:
    - name: Create dotenv file
        run: |
            touch .env
            echo "VITE_BASE_URL=${{secrets.VITE_BASE_URL}}" >> .env
            cat .env

7. run

  • 셸 명령어를 실행하는 데 사용된다. 여러 줄의 명령어를 실행할 때는 파이프(|)를 사용하여 명령어를 나열할 수 있다.
    ```yaml
  • name: Create dotenv file
    run: |
    touch .env
    echo "VITE_BASE_URL=${{secrets.VITE_BASE_URL}}" >> .env
    
    

8. uses

  • GitHub Actions의 특정 액션을 사용하도록 지정한다. actions/checkout@v4에 관한 자세한 설명은 actions/checkout@v4 깃허브에서 확인할 수 있다. Git이라는 버전 관리 시스템에서 체크아웃(Checkout)이란 Git에서 체크아웃이라는 행위는 일반적으로 코드 저장소(repository)에서 특정 브랜치(branch)로 전환하는 작업을 뜻한다.
- uses: actions/checkout@v4

9. with

  • 특정 액션(uses)에 인수를 전달할 때 사용된다. 예를 들어 setup-node 액션에서 Node.js 버전과 캐시 옵션을 설정하는 경우 with를 사용할 수 있다.
- uses: actions/setup-node@v4
  with:
    node-version: ${{ matrix.node-version }}
    cache: yarn

10. env

  • 환경 변수를 설정한다. 각 단계에서 사용할 수 있는 환경 변수를 정의할 수 있으며, 보통 AWS 자격 증명이나 프로젝트 설정 값에 사용된다.
    env:
    AWS_S3_BUCKET: ${{ secrets.DEV_AWS_S3_BUCKET_NAME }}
    SOURCE_DIR: "dist"

추가적으로 알아두면 좋은 명령어들

11. secrets

  • GitHub에 저장된 비밀 값을 참조할 수 있는 키워드. 보안이 중요한 정보(예: API 키, 비밀번호)를 관리할 때 사용한다.
echo "VITE_FIREBASE_API_KEY=${{secrets.VITE_FIREBASE_API_KEY}}" >> .env

12. if

  • 조건부로 단계나 작업을 실행할 수 있도록 해주는 명령어. 주로 브랜치, 결과 상태 등에 따라 실행 여부를 제어할 때 사용한다.
- name: Deploy to production  
    if: github.ref == 'refs/heads/main'  
    run: yarn deploy    

13. needs

  • 다른 Job이 완료된 후 실행되어야 하는 Job을 정의할 때 사용한다. Job 간의 의존성을 설정하는 데 유용하다.
    jobs:
    build:
        runs-on: ubuntu-latest
    deploy:
        runs-on: ubuntu-latest
        needs: build
        steps:
            - run: yarn deploy

14. continue-on-error

  • 해당 단계에서 오류가 발생하더라도 워크플로우를 중단하지 않고 계속 실행할 수 있도록 설정한다.
- name: Lint code
  run: yarn lint
  continue-on-error: true

15. timeout-minutes

  • 특정 Job 또는 단계가 일정 시간이 지나면 자동으로 실패하도록 제한할 수 있다.
    jobs:
    build:
        runs-on: ubuntu-latest
        timeout-minutes: 10

마무리

GitHub Actions의 workflows.yml 파일에서 사용되는 주요 명령어들을 정리해보았다. name, on, jobs, steps와 같은 기본적인 명령어 외에도, 조건부 실행(if), 의존성 설정(needs), 오류 처리(continue-on-error) 등을 활용하면 더욱 자유로운 워크플로우를 구축할 수 있다.

참고글

https://www.daleseo.com/github-actions-checkout/

'DevOps.' 카테고리의 다른 글

fatal: the remote end hung up unexpectedly 오류 해결  (0) 2024.09.09