예제 1
name: CI-TEST
on:
push:
branches: [main]
jobs:
CI:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setuo-node@v2
with:
node-version: "14.x"
- run: npm install
- run: npm run build
- run: npm test
옵션 설명
name
name: CI-TEST
Action의 이름을 지정합니다. 이것은 Actions 실행 로그에서 사용됩니다.
on
on:
push:
branches: [ main ]
이 Action이 실행되어야 하는 이벤트를 정의합니다. push 이벤트가 발생하고 브랜치가 main 일 때, 이 Action이 실행됩니다.
jobs
jobs:
CI:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14.x'
- run: npm install
- run: npm run build
- run: npm test
Action이 실행될 Job을 정의합니다. 여기서는 CI
라는 하나의 Job을 정의합니다.
runs-on
runs-on: ubuntu-latest
Job이 실행되는 환경을 정의합니다. 여기서는 ubuntu-latest로 정의하였습니다.
steps
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14.x'
- run: npm install
- run: npm run build
- run: npm test
Job의 각 단계를 정의합니다. 위의 예제에서는 다음과 같은 단계를 가지고 있습니다.
actions/checkout
를 사용하여 코드를 가져옵니다.Node.js
를 설정합니다.npm install
명령을 실행하여 필요한 패키지를 설치합니다.npm run build
명령을 실행하여 빌드합니다.npm test
명령을 실행하여 테스트를 수행합니다.- 위의 예제는 Github Actions에서 자주 사용되는 YAML 파일 문법을 보여주는 기본적인 예제입니다. 각 단계는 이전 단계의 결과를 사용하여 실행됩니다. 더 자세한 정보는 Github Actions 문서를 참조하시기 바랍니다.
Node.js 배포 예제
- 노드.js 어플리케이션을 빌드하고 테스트하는 github actions 정의
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
node-js:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${ { matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${ { matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
옵션 설명
name
name: Node.js CI
Action의 이름 정의
on
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
Action을 실행해야 하는 이벤트를 정의합니다. 위의 예제에서는 main 브랜치로의 push 및 pull_request 이벤트가 발생하면 Action이 실행됩니다.
jobs
jobs:
node-js
Action을 실행할 Job을 정의합니다. 위의 예제에서는 node-js
라는 하나의 Job을 정의하였습니다.
strategy
strategy:
matrix:
node-version: [14.x, 16.x]
Job이 실행될 때, 여러 환경에서 실행될 수 있도록 행렬(matrix)을 정의합니다. 위의 예제에서는 node-version 이라는 변수를 정의하고, 14.x와 16.x 두 가지 버전의 Node.js를 선택할 수 있도록 설정합니다.
steps
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build --if-present
- run: npm test
Job의 각 단계를 정의합니다. 위의 예제에서는 총 5개의 단계를 가지고 있습니다.
actions/checkout@v2
를 사용하여 현재 레포지토리의 코드를 체크아웃합니다.actions/setup-node@v2
를 사용하여 node-version 환경을 설정합니다.npm ci
명령을 사용하여 필요한 모듈들을 설치합니다.npm run build --if-present
명령을 사용하여 어플리케이션을 빌드합니다.npm test
명령을 사용하여 어플리케이션을 테스트합니다.
Flask 배포 예제
- 파이썬 플라스크 앱을 배포하기 위한 Github Actions YAML
name: Deploy Flask App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Build and Deploy
env:
APP_SECRET: ${{ secrets.APP_SECRET }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER_USERNAME: ${{ secrets.SERVER_USERNAME }}
SERVER_IP: ${{ secrets.SERVER_IP }}
SERVER_PORT: ${{ secrets.SERVER_PORT }}
run: |
ssh -i ${{ secrets.SSH_PRIVATE_KEY }} ${{SERVER_USERNAME}}@${{SERVER_IP}} -p ${{SERVER_PORT}} "cd ~/app && git pull"
python app.py
옵션 설명
name
name: Deploy Flask APp
Action의 이름 정의
on
on:
push:
branches:
- main
Action을 실행해야 하는 이벤트를 정의합니다. 위의 예제에서는 main 브랜치로의 push 이벤트가 발생하면 Action이 실행됩니다.
jobs
jobs:
deploy:
Action을 실행할 Job을 정의합니다. 위의 예제에서는 deploy
라는 하나의 Job을 정의합니다.
runs-on: ubuntu-latest
Job이 실행될 환경을 정의합니다. 위의 예제에서는 ubuntu-latest 환경에서 Job이 실행됩니다.
steps
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Build and Deploy
env:
APP_SECRET: ${{ secrets.APP_SECRET }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER_USERNAME: ${{ secrets.SERVER_USERNAME }}
SERVER_IP: ${{ secrets.SERVER_IP }}
SERVER_PORT: ${{ secrets.SERVER_PORT }}
run: |
ssh -i ${{ secrets.SSH_PRIVATE_KEY }} ${{SERVER_USERNAME}}@${{SERVER_IP}} -p ${{SERVER_PORT}} "cd ~/app && git pull"
python app.py
Job의 각 단계를 정의합니다. 위의 예제에서는 총 4개의 단계를 가지고 있습니다.
actions/checkout@v2
를 사용하여 현재 레포지토리의 코드를 체크아웃합니다.actions/setup-python@v2
를 사용하여 Python 3.9 환경을 설정합니다.pip install
명령을 사용하여 requirements.txt 파일에 명시된 필요한 Python 패키지를 설치합니다.
커밋 자동화 예제
- FROM marshallku
name: Set recent blog post in README
on:
schedule:
- cron: "*/30 * * * *"
push:
paths:
- "scripts/blog-post.sh"
workflow_dispatch:
jobs:
update-readme-blog-post:
name: Update README with latest blog posts
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run script
run: |
bash ./scripts/blog-post.sh || bash ./scripts/send-notification.sh -m "🚨 Failed to update blog post\n\nCheck: https://marshallku.com/"
- name: Commit
run: |
bash ./scripts/commit.sh || bash ./scripts/send-notification.sh -m "Failed to commit changes"
env:
TOKEN: ${{ secrets.TOKEN }}
REPOSITORY: ${{ github.repository }}
MESSAGE: "Update blog post"
옵션 설명
name
name: Set recent blog post in README
name
: workflow의 이름을 Set recent blog post in README로 설정합니다.
on
on:
schedule:
- cron: "*/30 * * * *"
push:
paths:
- "scripts/blog-post.sh"
workflow_dispatch:
on
: Workflow가 트리거되는 이벤트를 정의합니다. 여기서는 3가지 이벤트가 정의되어 있습니다.schedule
: 매 30분마다 Workflow를 트리거합니다. cron 표현식은 매 분(), 매 시간(), 매일(), 매월(), 매주()를 의미하며 매 30분(/30)마다 실행됩니다.push
: scripts/blog-post.sh 파일이 변경될 때 Workflow를 트리거합니다.workflow_dispatch
: 이벤트는 수동으로 Workflow를 트리거하기 위해 사용됩니다.
jobs
jobs:
update-readme-blog-post:
name: Update README with latest blog posts
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run script
run: |
bash ./scripts/blog-post.sh || bash ./scripts/send-notification.sh -m "🚨 Failed to update blog post\n\nCheck: https://marshallku.com/"
- name: Commit
run: |
bash ./scripts/commit.sh || bash ./scripts/send-notification.sh -m "Failed to commit changes"
env:
TOKEN: ${{ secrets.TOKEN }}
REPOSITORY: ${{ github.repository }}
MESSAGE: "Update blog post"
jobs
: Workflow의 job을 정의합니다. 이 구문에서는 update-readme-blog-post라는 하나의 job을 정의합니다.name
: job의 이름을 Update README with latest blog posts로 설정합니다.runs-on
: job이 실행되는 운영 체제를 ubuntu-latest로 설정합니다.steps
: job이 실행되는 일련의 단계를 정의합니다.uses
: GitHub Action을 사용하여 현재 작업 디렉토리로 레포지토리를 체크아웃합니다.name
: 이 단계의 이름을 Run script로 설정합니다.run
: bash ./scripts/blog-post.sh 명령어를 실행하고, 실패시 bash ./scripts/send-notification.sh -m "🚨 Failed to update blog post\n\nCheck: https://marshallku.com/" 명령어를 실행합니다.name
: 이 단계의 이름을 Commit으로 설정합니다.run
: bash ./scripts/commit.sh 명령어를 실행하고, 실패시 bash ./scripts/send-notification.sh -m "Failed to commit changes" 명령어를 실행합니다.env
: job 실행에 필요한 환경 변수를 설정합니다. TOKEN, REPOSITORY, MESSAGE 환경 변수가 정의되어 있습니다.