가수면

깃허브 액션 (GitHub Actions) 설정 본문

웹 개발/Git

깃허브 액션 (GitHub Actions) 설정

니비앙 2023. 8. 19. 04:00

https://docs.github.com/ko/actions/using-workflows/about-workflows

 

워크플로 정보 - GitHub Docs

트리거, 구문 및 고급 기능을 포함하여 GitHub Actions 워크플로에 대한 개략적인 개요를 알아봅니다.

docs.github.com

Next에서 Jest를 이용한 깃허브 액션 설정

1. 루트 경로에 .github/workflows 폴더 생성

2. 이름.yml 파일 생성

3. 워크 플로우 설정

// .github\workflows\main.yml

name: CI

on: [push, pull_request]  // 워크플로우 트리거 이벤트 설정				

jobs:
  build-and-test:
    runs-on: ubuntu-latest	// ubuntu 최신 버전 환경을 가정하고 테스트

    steps:
    - name: Checkout code
      uses: actions/checkout@v3	// GitHub 저장소의 코드를 해당 실행 환경에 체크아웃

    - name: Setup Node.js
      uses: actions/setup-node@v3	// 지정된 버전의 노드 설치 
      with:
        node-version: "18"

    - name: Install dependencies
      run: npm ci

    - name: Run Jest tests
      run: npm run test		// 실제 test 명령어

    - name: Build the app
      run: npm run build	// 실제 build 명령어

on

만약 main 브랜치만 테스트하려면

on:
  push:
    branches:
      - main

strategy

matrix - 여러 노드 버전에 대한 테스트 가능하게 해줌

    strategy:
      matrix:
        node-version: [16.x, 18.x]

    steps:
	//...

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}

uses

외부 액션을 사용하겠다는 것을 의미

 

jest로 깃허브 액션 테스트 시 주의사항

--watch를 붙이면 테스트가 무한히 로딩되므로 깃허브 액션 테스트 명령어를 별도로 생성하여 개발 환경에서 사용할 테스트 명령어와 깃허브 액션에서 사용할 테스트 명령어를 구분해둬야 한다.

ex)

// package.json
    "test": "jest --watch",
    "test:ci": "jest",
// .github\workflows\main.yml
    - name: Run Jest tests
      run: npm run test:ci		// 실제 test 명령어

병합 설정

레포의 setting -> Branches -> add rule -> Branch name pattern(규칙 적용할 브랜치 이름. 와일드카드는 *) 입력 -> Require status checks to pass before merging 체크 -> Status checks that are required. 부분에 테스트 추가 (디폴트: build-and-test) -> 생성

자동 병합

레포의 setting -> General -> Pull Requests탭 -> Allow auto-merge 체크

이후 pr 시 아래처럼 오토 병합 버튼이 활성화됨

Organization 저장소에서 포크한 저장소로 자동 푸쉬 시키기

참고 자료

https://vanilla-van-6e4.notion.site/vercel-47312c7c2a9c492dbdabc40c47489cfa

 

vercel에 팀 프로젝트 배포하기

vercel에 팀 프로젝트를 무료로 운영하는 방법은 정말 간단합니다..

vanilla-van-6e4.notion.site

 

 

1. 토큰 발급

https://github.com/settings/tokens

위 경로 (내 계정 setting -> Developer Settings -> Personal access tokens (classic))를 통해 토큰을 생성한다.(이 때 발급된 토큰번호는 다시 확인할 수 없으니 잘 메모)

Select scopes는 repo를 체크해주면 된다.

2. organization 저장소에 secrets 설정

organization에 있는 레포의 setting으로 가서 API_TOKEN_GITHUB 등의 이름으로 방금 발급 받은 토큰을 secrets에 설정해준다.

3. organization 저장소의 최상위 경로에 build.sh 파일 생성

build.sh 파일 안에 아래 코드를 작성한다.

#!/bin/sh
cd ../
mkdir output
cp -R ./원격 레포 이름/* ./output
cp -R ./output ./원격 레포 이름/

4. 워크 플로우를 작성한다.

// .github/workflows/git-push.yml

name: git push into another repo to deploy

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    container: pandoc/latex
    steps:
      - uses: actions/checkout@v3
      - name: Install mustache (to update the date)
        run: apk add ruby && gem install mustache
      - name: creates output
        run: sh ./build.sh
      - name: Pushes to another repository
        id: push_directory
        uses: cpina/github-action-push-to-another-repository@main
        env:
          API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
        with:
          source-directory: "output"
          destination-github-username: "깃허브 아이디"
          destination-repository-name: "포크한 레포 이름"
          user-email: "깃허브 이메일 주소"
          commit-message: ${{ github.event.commits[0].message }}
          target-branch: main
      - name: Test get variable exported by push-to-another-repository
        run: echo $DESTINATION_CLONED_DIRECTORY

 

'웹 개발 > Git' 카테고리의 다른 글

깃 대소문자 구분시키기  (0) 2023.04.25
github.io로 배포  (0) 2023.04.05
레포지토리 복사하기  (0) 2022.12.16
Git 명령어  (0) 2022.10.26
Comments