GitHub Actions 기본 빌드 및 테스트

GitBeginner
지금 연습하기

소개

현대 소프트웨어 개발에서 지속적 통합 (CI, Continuous Integration) 은 개발자들이 자신의 코드 변경 사항을 중앙 저장소에 자주 병합하는 중요한 관행입니다. 이러한 변경 사항을 검증하기 위해 자동화된 빌드와 테스트가 실행됩니다.

GitHub Actions 는 GitHub 내에서 빌드, 테스트 및 배포 파이프라인을 직접 자동화할 수 있게 해주는 인기 있는 CI/CD 플랫폼입니다.

본 랩에서는 Node.js 프로젝트를 위한 기본적인 GitHub Actions 워크플로우 (workflow) 를 생성하는 방법을 배웁니다. Node.js 환경 설정, 종속성 설치 및 테스트 실행 단계를 정의하게 됩니다. 마지막으로, 이러한 변경 사항을 커밋하고 GitHub 저장소에 푸시 (push) 합니다.

이 랩은 이전 랩에서 생성한 저장소를 기반으로 합니다. github-actions-demo 저장소를 클론 (clone) 하고 Node.js 프로젝트에 대한 CI 워크플로우를 생성할 것입니다.

이 랩이 끝날 때쯤이면 .yml 워크플로우 파일의 구조와 필수적인 CI 단계를 구성하는 방법을 이해하게 될 것입니다.

uses actions/setup-node@v4를 사용하여 Node.js 설정 추가

이 단계에서는 리포지토리를 클론하고 Node.js 환경 설정을 포함하는 워크플로우 파일을 생성합니다. GitHub Actions 워크플로우는 리포지토리의 .github/workflows 디렉토리에 위치한 YAML 파일로 정의됩니다.

  1. github-actions-demo의 GitHub 리포지토리 페이지에서 녹색 Code 버튼을 클릭합니다.
  2. HTTPS 탭이 선택되었는지 확인하고 URL 을 복사합니다. URL 은 https://github.com/your-username/github-actions-demo.git과 유사해야 합니다.
  3. LabEx 환경에서 터미널을 엽니다. 기본 경로는 ~/project입니다.
  4. git clone 명령어를 사용하여 리포지토리를 다운로드합니다. your-username을 실제 GitHub 사용자 이름으로 바꾸십시오.
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git
  1. 클론된 리포지토리로 이동합니다:
cd ~/project/github-actions-demo
  1. .github/workflows 디렉토리 안에 node-ci.yml이라는 새 파일을 생성합니다:
touch .github/workflows/node-ci.yml
  1. WebIDE 에서 .github/workflows/node-ci.yml을 열고 워크플로우 이름과 트리거를 추가하여 시작합니다:
name: Node.js CI

on: [push]
  1. jobs 섹션을 추가하고 빌드 작업과 해당 러너 (runner) 를 정의합니다:
jobs:
  build:
    runs-on: ubuntu-latest
  1. steps 섹션을 추가합니다. 먼저, 리포지토리 코드를 가져오기 위한 체크아웃 단계를 추가합니다:
steps:
  - uses: actions/checkout@v4
  1. Node.js 설정 단계를 추가합니다:
- name: Use Node.js
  uses: actions/setup-node@v4
  with:
    node-version: "20"

이제 완성된 파일은 다음과 같아야 합니다:

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

설명

  • name: 워크플로우의 이름입니다.
  • on: [push]: 코드가 리포지토리에 푸시될 때마다 워크플로우를 트리거합니다.
  • jobs: 워크플로우에서 실행되는 모든 작업을 그룹화합니다.
  • runs-on: ubuntu-latest: 작업을 GitHub 에서 호스팅하는 최신 Ubuntu 버전을 실행하는 가상 머신에서 실행되도록 구성합니다.
  • steps: 일련의 작업입니다.
  • uses: actions/checkout@v4: 워크플로우가 리포지토리에 접근할 수 있도록 리포지토리를 체크아웃합니다.
  • uses: actions/setup-node@v4: 러너에 Node.js 를 설치하기 위한 공식 액션 (action) 입니다. 여기서는 버전 '20'을 지정합니다.

run npm install 명령어로 종속성 설치 단계 추가

Node.js 로 환경 설정이 완료되었으므로, CI 파이프라인에서 다음 논리적인 단계는 프로젝트 의존성을 설치하는 것입니다. 이는 빌드나 테스트 전에 애플리케이션에 필요한 모든 외부 라이브러리를 사용할 수 있도록 보장합니다.

.github/workflows/node-ci.yml 파일을 다시 열고 의존성 설치 단계를 추가합니다.

steps 섹션의 끝에 다음 줄을 추가합니다 (들여쓰기를 유지하도록 주의하십시오):

- name: Install dependencies
  run: npm install

이제 완성된 .github/workflows/node-ci.yml 파일은 다음과 같아야 합니다:

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install

설명 (Explanation)

  • run: npm install: 이 명령어는 러너 (runner) 의 셸에서 npm install 명령을 실행합니다. 이 명령어는 (나중에 생성할) package.json 파일을 읽고 나열된 의존성들을 설치합니다.

run npm test 명령어로 테스트 실행 단계 추가

의존성 설치 후, 지속적 통합 (Continuous Integration) 에서 가장 중요한 부분은 자동화된 테스트를 실행하는 것입니다. 이는 새로운 변경 사항이 기존 기능을 손상시키지 않음을 보장합니다.

.github/workflows/node-ci.yml 파일을 열고 테스트 실행 단계를 추가합니다.

steps 섹션 끝에 다음 줄을 추가합니다:

- name: Run tests
  run: npm test

최종 .github/workflows/node-ci.yml 파일은 다음과 같아야 합니다:

name: Node.js CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"
      - name: Install dependencies
        run: npm install
      - name: Run tests
        run: npm test

설명

  • run: npm test: 이는 package.json에 정의된 테스트 스크립트를 실행합니다. 테스트가 실패하면 (종료 코드가 0 이 아닌 경우), GitHub Action 워크플로우는 실패로 표시됩니다.

package.json 및 간단한 테스트 파일 생성

방금 생성한 워크플로우가 실제로 작동하려면 Node.js 프로젝트 구조가 필요합니다. 구체적으로, npm installpackage.json 파일이 필요하고, npm test는 테스트 스크립트가 정의되어 있어야 합니다.

  1. 리포지토리 디렉토리에 있는지 확인합니다:
cd ~/project/github-actions-demo
  1. 리포지토리 루트에 package.json 파일을 생성합니다:
touch package.json
  1. package.json을 열고 다음 내용을 추가합니다. 이는 기본 프로젝트와 항상 통과하는 (종료 코드 0 으로 나가는) 간단한 테스트 스크립트를 정의합니다.
{
  "name": "github-actions-demo",
  "version": "1.0.0",
  "description": "Demo project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Running tests...\" && exit 0"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  1. 다음으로, 애플리케이션 코드를 나타내도록 index.js를 업데이트합니다.
echo "console.log('Hello, GitHub Actions!');" > index.js

이제 정의한 워크플로우의 요구 사항을 충족하는 최소한의 Node.js 프로젝트가 준비되었습니다:

  1. npm install이 실행됩니다 (종속성은 없지만 package.json을 확인합니다).
  2. npm test가 명령어 echo "Running tests..." && exit 0을 실행합니다.

커밋, 푸시 후 워크플로우 실행에서 빌드/테스트 확인

이제 워크플로 정의와 프로젝트 파일을 생성했으므로, 이를 GitHub 에 커밋하고 푸시해야 합니다. 이러한 커밋을 푸시하면 Action 러너가 트리거되어 우리가 정의한 단계를 실행하게 됩니다.

  1. 리포지토리 디렉토리에 있는지 확인합니다:
cd ~/project/github-actions-demo
  1. 리포지토리 상태를 확인합니다:
git status
  1. 모든 파일을 스테이징 영역에 추가합니다:
git add .
  1. 설명적인 메시지와 함께 변경 사항을 커밋합니다:
git commit -m "Add Node.js CI workflow and project files"
  1. 변경 사항을 GitHub 의 원격 리포지토리에 푸시합니다:
git push

인증 참고 사항: git push를 실행하면 WebIDE 가 자동으로 인증을 요청하는 팝업을 표시합니다. 다음 세부 단계를 따르십시오:

  1. "The extension 'GitHub' wants to sign in using GitHub." 라는 메시지와 함께 팝업이 나타납니다. Allow를 클릭합니다.
  2. 새 알림이 나타납니다. **"Copy&Continue to GitHub"**를 클릭한 다음, 다음 프롬프트에서 **"Open"**을 클릭합니다.
  3. 열리는 브라우저 창에서 GitHub 계정에 로그인하고 복사된 인증 코드를 입력합니다. 인증을 확인하면 페이지가 자동으로 닫힙니다.
  4. 몇 초 기다리면 터미널에서 푸시 작업이 성공적으로 완료되는 것을 볼 수 있습니다.

개인 정보 보호 참고 사항: WebIDE 는 인증 목적으로 GitHub 계정에 대한 전체 액세스를 요청합니다. 개인 정보 보호에 대해 걱정할 필요가 없습니다. 현재 랩을 완료하면 LabEx VM 은 즉시 파기되며, 자격 증명 및 인증 정보는 유지되지 않습니다.

워크플로 실행 확인

  1. 웹 브라우저에서 GitHub 의 리포지토리로 이동합니다: https://github.com/your-username/github-actions-demo
  2. 리포지토리 페이지 상단의 Actions 탭을 클릭합니다.
  3. 워크플로 실행 목록이 표시되어야 하며, 이름은 "Add Node.js CI workflow and project files" 또는 "Node.js CI"일 가능성이 높습니다.

참고: 코드를 푸시할 때 리포지토리에 여러 워크플로 파일이 있는 경우 여러 Actions 가 트리거될 수 있습니다. 왼쪽 사이드바에서 워크플로 이름을 확인하거나 오른쪽의 워크플로 실행 목록을 사용하여 올바른 워크플로 실행을 식별하십시오.

  1. 워크플로 실행 제목을 클릭한 다음 build 작업을 클릭하여 자세한 로그를 확인합니다.

각 단계를 확장하여 발생한 작업을 볼 수 있습니다:

  • Checkout code: 리포지토리가 체크아웃되었음을 표시합니다.
  • Use Node.js: Node.js v20 이 설치되었음을 표시합니다.
  • Install dependencies: npm install이 실행되었음을 표시합니다.
  • Run tests: npm test가 실행되었음을 표시하며 Running tests... 출력이 보여야 합니다.

모든 단계가 성공적으로 완료되면 CI 워크플로가 올바르게 작동하는 것입니다.

GitHub Actions logs

요약

본 실습에서는 GitHub Actions 를 사용하여 기본적인 지속적 통합 (CI) 워크플로우를 성공적으로 생성했습니다. 다음 사항들을 배웠습니다.

  1. .github/workflows 디렉토리에 .yml 워크플로우 파일을 생성하는 방법.
  2. push 이벤트 발생 시 워크플로우가 트리거되도록 구성하는 방법.
  3. actions/setup-node 액션을 사용하여 Node.js 환경을 구성하는 방법.
  4. 종속성을 설치 (npm install) 하고 테스트를 실행 (npm test) 하는 단계를 추가하는 방법.
  5. 워크플로우를 지원하기 위한 기본적인 Node.js 프로젝트 구조를 설정하는 방법.

이러한 기술은 현대 DevOps 관행의 기반을 형성하며, 변경 사항을 만들 때마다 코드 검증을 자동화할 수 있게 해줍니다.