GitHub Pages를 통한 정적 페이지 호스팅에서, 수동으로 진행하던 빌드와 배포를 자동화할 수 있습니다. 워크플로우를 구성하여 GitHub Actions를 통해 commit & push만으로 배포할 수 있는 환경을 만들어보겠습니다.
GitHub Repository 생성
패키지 매니저 설치
npm
과 yarn
이 있는데, 여기서는 npm
을 기준으로 사용법을 정리해보겠습니다. 같은 방식으로 진행하며 npm 대신 yarn을 적용할 수 있습니다. 배포할 Vue 프로젝트를 생성합니다.
Manually select features
를 선택합니다.Test
단계를 추가할 예정이기 때문에, Unit Testing
를 추가로 선택해보겠습니다.프로젝트 생성이 끝나면, 프로젝트 디렉토리로 이동하여 npm run serve
혹은 yarn serve
를 통해 Vue 페이지가 제대로 생성되었는지 확인합니다.
gh-pages
추가npm install gh-pages --save-dev
package.json
에서 scripts
라는 속성을 통해 사용자가 임의로 명령어의 이름과 동작을 정의해 사용할 수 있습니다.사용해야 하는 명령어가 길거나 반복적으로 사용해야 하는 경우, 아래와 같이
커스텀 명령어
를 설정해 원하는 동작을 실행할 수 있습니다.// package.json { ... "scripts": { // npm run hello를 실행하면, 콘솔에 world가 출력됩니다 "hello": "echo world" } }
- 프로젝트 루트 디렉토리에 위치한 package.json을 열어 필요한 정보를 추가합니다.
```json
{
"name": "vue-devops",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"lint": "vue-cli-service lint"
// 아래 부분을 추가합니다.
"predeploy": "vue-cli-service build",
"deploy": "gh-pages -d dist",
"clean": "gh-pages-clean"
},
...
}
vue.config.js
설정vue.config.js
를 생성해 기본 설정 값을 넣어줍니다.publicPath
는 배포된 페이지의 URL 설정입니다.https://<username>.github.io/<repository name>/
형태입니다.outputDir
은 기본 값인 dist
를 사용합니다.module.exports = {
publicPath: '/<repository name>/',
outputDir: 'dist'
}
npm run deploy
명령을 입력하면 아래의 과정이 실행됩니다.dist
에 저장됩니다.gh-pages
브랜치로 빌드된 정적 파일이 push 됩니다.
GitHub Actions
는 GitHub의 SW 개발 workflow에서 작업을 자동화하기 위한 패키지 스크립트입니다.
- 새로운 소스 코드 Push 혹은 PR 이벤트 등에 반응하여 트리거하도록 구성할 수 있으며, 이를 통해 빠르고 안정적인 배포 및 운영이 가능한 DevOps 환경을 구축할 수 있습니다.
- Github Action Core 개념을 살펴보겠습니다.
- Workflow
- 여러 Job으로 구성되고 Event에 의해 트리거될 수 있는 자동화된 프로세스입니다.
- Workflow 파일은 YAML로 작성하며, 해당 Github Repo 내
.github/workflows
폴더에 저장됩니다.- Event
- Workflow를 트리거하는 특정 활동이나 규칙으로,
- 특정 브랜치로 Push, PR 등의 상황에 사용할 수 있습니다.
# Workflow가 실행되어야 하는 이벤트를 지정합니다. on: # 1. master 브랜치로 push될 경우 push: branches: [ master ] # 2. master 브랜치로 PR가 발생할 경우 pull_request: branches: [ master ]
- Job
- Job은 여러 개의 Step으로 구성되며, 가상 환경의 인스턴스에서 실행됩니다.
- 다른 Job에 의존 관계를 가지거나 독립적으로 병렬 실행도 가능합니다.
- Step
- Task들의 집합으로 action을 실행합니다.
- Action
- Workflow의 가장 작은 블럭으로,
- 개인적으로 만든 Action을 사용하거나 Github Marketplace를 통해 공용 Action을 사용할 수 있습니다.
uses
는 각 step에 사용할 액션을 지정run
은 시스템의 shell에 명령어를 실행
workflow
파일 생성
① GitHub Repository의 Actions
탭에 들어가 workflow 설정을 클릭합니다.
② 기본적으로 제공되는 workflow 파일의 이름을 확인하고 (목적에 맞게 수정한 뒤) commit을 남깁니다.
workflow
파일 작성
① 로컬 Directory에서 workflow 파일을 pull 받습니다.
② main
브랜치에 push/PR 이벤트가 발생했을 때, 수행할 작업을 작성해보겠습니다.
jobs:
# job의 이름 설정
deploy:
# 해당 job을 실행하는 운영 체제
runs-on: ubuntu-latest
# 수행할 동작 정의
steps:
# 1. 저장소 체크아웃
- name: Checkout source code
uses: actions/checkout@main
# 2. node.js 환경설정
- name: Set up Node.js
uses: actions/setup-node@main
with:
node-version: 14.x
# 3. 패키지 설치
- name: Install dependencies
run: npm install
# 4. 테스트
- name: Test unit
run: npm run test:unit
# 5. 빌드
- name: Build Page
run: npm run build
env:
NODE_ENV: production
# 6. gh-pages로 배포
- name: Deploy to gh-pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
Home.vue
문구를 수정해보겠습니다.Actions
를 통해 workflow가 진행됩니다.