
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편
https://dev-junwoo.tistory.com/148
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편
이번에는 유니티 빌드를 깃허브 액션으로 쉽게 자동화 하는 작업을 해보았다. 깃허브 액션 -> 자동빌드 -> 빌드 파일 Nas 업로드 -> Slack에 Nas로 업로드의 과정을 거친다. CI/CD CI(Continuous Integration) -
dev-junwoo.tistory.com
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편
https://dev-junwoo.tistory.com/149
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편 https://dev-junwoo.tistory.com/148 Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편 이번에는 유니티 빌드를 깃허브 액션으로 쉽게 자동화 하는
dev-junwoo.tistory.com
깃허브 액션으로 유니티 자동 빌드까지는 완료했다.
이제는 알림과 파일 업로드를 해보자.
Slack에 알림 보내기
앱 생성 및 연결
빌드를 하고나서 됐는지 계속 깃허브로 들어가서 확인을 할 필요는 없기 때문에, 슬랙으로 알림을 보내보려 한다.
나는 슬랙으로 하지만, 알림을 받는 방법은 무궁무진하니 편한걸로 하면 된다.
Slack API: Applications | Slack
Your Apps Don't see an app you're looking for? Sign in to another workspace.
api.slack.com
무료 버전으로 혼자 만들어도 상관없다.
들어가서 앱을 만들어야 한다.
앱을 새로 만들어준다.
해당 앱으로 들어가서 Incoming Webhooks를 활성화해주고 아래 버튼을 클릭 해준다.
워크스페이스에 만들어둔 채널(빌드 알림을 띄울)을 선택해준다.
그러면 이런 URL이 하나 나오는데, 우리는 이것을 이용하면 된다.
복사하자.
유니티 라이센스와 아이디,비번을 Secrets에 입력했듯이,
해당 URL도 secrets에 등록하여 사용하면 된다.
깃허브 액션으로 슬랙에 메세지 보내기
깃허브 액션 마켓플레이스에서 슬랙을 검색하면 가장 별이 많이 달려있는 것을 사용했다.
https://github.com/marketplace/actions/action-slack
action-slack - GitHub Marketplace
You can notify slack of GitHub Actions
github.com
name: Notify Slack
on: workflow_dispatch
permissions: write-all
jobs:
Notify_To_Slack:
runs-on: ubuntu-latest
steps:
- name: Notify To Slack
uses: 8398a7/action-slack@v3.16.2
with:
status: ${{ job.status }}
fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest # selectable (default: repo,message)
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
if: always() # Pick up events even if the job fails or is canceled.
위의 yml파일을 작성해서 워크플로우를 실행하니 저절로 이런 포맷이 맞춰져서 날아온다.
Nas에 업로드하기
Nas에 아무 설정도 안하고 업로드 하는것은 실패했다.
대신 Nas를 FTP로 사용하여 업로드 하는 방식은 성공했다.
Nas를 FTP로 사용하는법은 검색하면 정말 많이 나오고 설정도 어렵지 않다.
그리고 이과정을 AWS의 S3로 바꿔도 좋다.
https://github.com/marketplace/actions/ftp-file-upload
#WorkFlow 이름
name: 🛸 Build Android
#WorkFlow 실행 이벤트
on:
workflow_dispatch: #workflow_dispatch는 Github Action에서 눌렀을때 Event
#권한 설정
permissions: write-all
#전역 변수 설정
env:
FILE_NAME: 'Build_${{github.run_number}}' #빌드 파일 이름 전역변수로 세팅
#실행 할 Job 목록
jobs:
build:
name: Unity Build
runs-on: ubuntu-latest #job을 실행 시킬 환경(우분투)
steps:
# Check Out (레포지토리 가져오기)
- name: check Out
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
# Cache Library
- name: Cache Library
uses: actions/cache@v4.0.2
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
# Unity Build
- name: Unity Build
uses: game-ci/unity-builder@v4
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: Android
buildName: ${{ env.FILE_NAME }}
# Upload To Nas
- name: Upload BuildFile To Nas
if: success()
uses: tomasbkk/action-ftp-upload@v1.0
with:
user: ${{ secrets.NAS_ID }}
password: ${{ secrets.NAS_PASSWORD }}
host: ${{ secrets.NAS_HOST }}
src: build/Android/${{ env.FILE_NAME }}.apk
dest: web/${{ env.FILE_NAME }}.apk
총 코드
#WorkFlow 이름
name: 🛸 Build Android
#WorkFlow 실행 이벤트
on:
workflow_dispatch: #workflow_dispatch는 Github Action에서 눌렀을때 Event
#권한 설정
permissions: write-all
#전역 변수 설정
env:
FILE_NAME: 'Build_${{github.run_number}}' #빌드 파일 이름 전역변수로 세팅
#실행 할 Job 목록
jobs:
build:
name: Unity Build
runs-on: ubuntu-latest #job을 실행 시킬 환경(우분투)
steps:
# Check Out (레포지토리 가져오기)
- name: check Out
uses: actions/checkout@v4
with:
fetch-depth: 0
lfs: true
# Cache Library
- name: Cache Library
uses: actions/cache@v4.0.2
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
# Unity Build
- name: Unity Build
uses: game-ci/unity-builder@v4
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: Android
buildName: ${{ env.FILE_NAME }}
# Upload To Nas
- name: Upload BuildFile To Nas
if: success()
uses: tomasbkk/action-ftp-upload@v1.0
with:
user: ${{ secrets.NAS_ID }}
password: ${{ secrets.NAS_PASSWORD }}
host: ${{ secrets.NAS_HOST }}
src: build/Android/${{ env.FILE_NAME }}.apk
dest: web/${{ env.FILE_NAME }}.apk
#결과에 따라 다운로드 URL 설정
- name: Set URL based on job status
if: always()
run: |
if [ "${{ job.status }}" == "success" ]; then
echo "URL=나스URL입력하는곳/${{env.FILE_NAME}}.apk" >> $GITHUB_ENV
echo "URLTEXT=다운로드" >> $GITHUB_ENV
else #실패 했을때 URL
echo "URL=www.github.com" >> $GITHUB_ENV
echo "URLTEXT=깃허브" >> $GITHUB_ENV
fi
- name: Notify To Slack
if: always()
uses: 8398a7/action-slack@v3.16.2
with:
status: custom
fields: workflow,job,repo,author,took
custom_payload: |
{
attachments: [{
color: '${{ job.status }}' === 'success' ? 'good' : '${{ job.status }}' === 'failure' ? 'danger' : 'warning',
text: `*빌드 결과*: ${{ job.status }}\n\n *Workflow*: ${process.env.AS_WORKFLOW}\n\n *Repository*: ${process.env.AS_REPO}\n\n*실행한 사람*: ${process.env.AS_AUTHOR}\n\n*실행 시간*: ${process.env.AS_TOOK}\n\n *빌드 파일*: <${{ env.URL }}|${{ env.URLTEXT }}>`,
mrkdwn_in: ["text"],
}]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
내가 원하는대로 커스텀하기위해 Slack Notify 부분이 좀 더러워진것도 있는데 아직 미숙해서가 큰것같다.
Slack쪽 페이로드를 설정하는 부분을 좀 더 깔끔하게 하는 방법이 있을것같다..
저부분은 입맛에 따라 바꿔도 상관없다.
실행 시간에 조금 문제가 있지만..
이렇게 쉽게(?) 자동화를 마무리 했다.
'게임 엔진 > Unity' 카테고리의 다른 글
Jenkins로 유니티 빌드 자동화 (1) | 2024.05.09 |
---|---|
Unity 라이브러리 추천 - RestClient (0) | 2024.03.24 |
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편 (0) | 2024.03.23 |
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편 (0) | 2024.03.23 |
고양이 스낵바 블로그 보고 따라하기 - 커스텀 UI & 자동 코드 생성 (2) | 2024.03.04 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!