GameCI

GameCI는 Github Actions를 이용하여 게임을 위한 자동화 과정을 담고있는 레포이다.(오픈소스)

개인이 젠킨스 Teamcity등을 유료 소프트웨어를 사용하지 않고 더 정교하고 무료로 커스텀하여 자동화 과정을 가져갈 수 있다..

GithubAction에 관한 자세한 내용은 GithubAction해당 글이나 공식문서를 참고하기 바란다.

이 글을 작성한다고 하고 Task를 만들어 놓은지 정말 오래되었는데 사실 SGM에서 진행하는 코드레이드라는 스터디에서 발표 검증 후 포스팅을 하려고 했다.

일정이 미뤄지면서 드디어 글을 작성한다..

발표자료 그대로 첨부..

코드 레벨(A)의 작업이 아닌 B레벨 정도의 작업을 편리하게 해주는 기능

개인적으로 공부중이고, 활용하고 있어서 공유해보면 좋겠다는 기능이라 들고옴

설명

GIthub Actions은 지속적 통합, 지속적 제공(CI/CD) 플랫폼으로 레포에서 일어나는 다양한 이벤트를 자동화할 수 있다.

이외에도 도커, 데이터베이스, 서버와도 연결하여 사용 가능하며 직접적인 수정이 가능하다.

YAML 파일 기반

YAML파일 형식으로 정의를 생성하고 이를 workflow로 등록시켜 작동하는데 내부에서 cron, job 등 다양한 기능도 사용이 가능하고 실제 opensource 문화도 활발하게 이뤄지고 있다.

image

작성 방법은 간단하게 설명실제 사용중인 Action

on:
  schedule:
    - cron: '0 0 * * *'

name: Create an issue on push
permissions:
  contents: read
  issues: write 
jobs:
  stuff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: JasonEtco/create-an-issue@v2
        env:
          GITHUB_TOKEN: $
  • on: 워크플로가 실행될 때 트리거되는 이벤트를 정의
    • 현재는 schedule-cron으로 utf 매일 0시 0분에 실행된다.(정확하지 않음)
on:
  push:
    branches:
      - main
  • 이와 같이 이벤트가 push 그리고 브랜치가 main인 경우까지 직관적인 해석이 가능

  • permissions: 부여된 기본 권환으로 아래 보이는 GITHUB_TOKEN에 설정된 권한급까지만 가능
  • jobs: 워크플로 파일에서 실행되는 모든 작업을 그룹화 한다.
  • steps: 작업일부로 실행될 모든 단계를 그룹화 한다.
      - name: Checkout
        uses: actions/checkout@v3
  • uses: 지정된 작업을 검색하도록 작업에 지시
  • actions/checkout. 이는 리포지토리를 확인하고 러너에 다운로드하여 코드(예: 테스트 도구)에 대해 작업을 실행할 수 있도록 하는 작업이다. 작업 흐름이 저장소의 코드를 사용하거나 저장소에 정의된 작업을 사용할 때마다 체크아웃 작업을 사용해야 한다.

이외에도 정말 다양한 기능이 있으니 궁금하다면 따로 알아볼 것을 추천..

ex) GameCI

사용 가격

GitHub Actions는 공개 리포지토리에서 무료로 사용할 수 있지만 비공개 리포지토리는 러너의 빌드 시간이 2,000분으로 제한

활용 예시: CI/CD

젠킨스?. Teamcity?

이런 CI/CD 프로세스를 많이 사용하고 현업에서는 따로 데브옵스라고 불리며 전문 분야가 있는 작업이 있다.

대부분 작업자가 시간을 들여 빌드, 테스트하기에 시간이 아까워 서버에 가상 VM에 일임하고 결과를 받아보는 방식으로 동작하는데 Github Action을 사용하면 좀 더 효율적으로 사용이 가능하다.

테스트, 빌드, 배포, 데이터베이스 검증 등등 다양한 작업 가능

image

여타 젠킨스나 Teamcity와 다른 점은 직접 수행 과정을 좀 더 세세하게 컨트롤 가능하며 다양한 API와 혼합하여 사용이 가능하다는 점

코드베이스가 깃허브라면 다양한 이벤트 트리거(PR, Issue, Discussion 등)에 붙여서 극한의 자동화까지 갈 수 있다는 점

name: GameCI Template 🎮

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

env:
  UNITY_LICENSE: $

jobs:
 testRunner:
   name: Test all modes 📝
   runs-on: ubuntu-latest
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

     - name: Create LFS file list
       run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id

     - name: Restore LFS cache
       uses: actions/cache@v2
       id: lfs-cache
       with:
         path: .git/lfs
         key: $-lfs-$

     - name: Git LFS Pull
       run: |
         git lfs pull
         git add .
         git reset --hard

     - name: Restore Library cache
       uses: actions/cache@v2
       with:
         path: Library
         key: Library-test-project
         restore-keys: |
           Library-test-project-
           Library-

     - uses: webbertakken/unity-test-runner@v2
       id: testRunner
       with:
         testMode: all

     - uses: actions/upload-artifact@v2
       with:
         name: Test results (all modes)
         path: $

 buildWebGL:
   needs: testRunner
   name: Build for WebGL 🖥️
   runs-on: ubuntu-latest
   strategy:
     fail-fast: false
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

     - name: Create LFS file list
       run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id

     - name: Restore LFS cache
       uses: actions/cache@v2
       id: lfs-cache
       with:
         path: .git/lfs
         key: $-lfs-$

     - name: Git LFS Pull
       run: |
         git lfs pull
         git add .
         git reset --hard

     - name: Restore Library cache
       uses: actions/cache@v2
       with:
         path: Library
         key: Library-build-WebGL
         restore-keys: |
           Library-build-
           Library-

     - uses: webbertakken/unity-builder@v2
       with:
         targetPlatform: WebGL

     - uses: actions/upload-artifact@v2
       with:
         name: build-WebGL
         path: build/WebGL

 buildWindows:
   needs: testRunner
   name: Build for Windows 🖥️
   runs-on: ubuntu-latest
   strategy:
     fail-fast: false
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

     - name: Create LFS file list
       run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id

     - name: Restore LFS cache
       uses: actions/cache@v2
       id: lfs-cache
       with:
         path: .git/lfs
         key: $-lfs-$

     - name: Git LFS Pull
       run: |
         git lfs pull
         git add .
         git reset --hard

     - name: Restore Library cache
       uses: actions/cache@v2
       with:
         path: Library
         key: Library-build-StandaloneWindows64
         restore-keys: |
           Library-build-
           Library-

     - uses: webbertakken/unity-builder@v2
       with:
         targetPlatform: StandaloneWindows64

     - uses: actions/upload-artifact@v2
       with:
         name: build-StandaloneWindows64
         path: build/StandaloneWindows64

 buildAndroid:
   needs: testRunner
   name: Build for Android 📱
   runs-on: ubuntu-latest
   strategy:
     fail-fast: false
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

     - name: Create LFS file list
       run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id

     - name: Restore LFS cache
       uses: actions/cache@v2
       id: lfs-cache
       with:
         path: .git/lfs
         key: $-lfs-$

     - name: Git LFS Pull
       run: |
         git lfs pull
         git add .
         git reset --hard

     - name: Restore Library cache
       uses: actions/cache@v2
       with:
         path: Library
         key: Library-build-Android
         restore-keys: |
           Library-build-
           Library-

     - uses: webbertakken/unity-builder@v2
       with:
         targetPlatform: Android

     - uses: actions/upload-artifact@v2
       with:
         name: build-Android
         path: build/Android


 deployPages:
   needs: buildWebGL
   name: Deploy to Github Pages 🚀
   runs-on: ubuntu-latest
   steps:
     - name: Checkout code
       uses: actions/checkout@v2

     - uses: actions/download-artifact@v2
       with:
         name: build-WebGL
         path: build

     - name: Display structure of root files
       run: ls -R
       working-directory: build/WebGL

     - name: Deploy 🚀
       uses: JamesIves/github-pages-deploy-action@4.1.4
       with:
         branch: gh-pages
         folder: build/WebGL

실제 적용 예시

해당 레포를 자세히 분석해보면 사용방법을 크게 어렵지 않게 알 수 있을 것 같다!


자료

Github Action 공식문서

GameCI 공식문서

태그: ,

카테고리:

업데이트:

댓글남기기