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
) 등을 활용하면 더욱 자유로운 워크플로우를 구축할 수 있다.
참고글
'DevOps.' 카테고리의 다른 글
fatal: the remote end hung up unexpectedly 오류 해결 (0) | 2024.09.09 |
---|