[Unity] Jenkins & Unity 연동 - 설치부터 Webhook까지

홍예주·2022년 3월 17일
2

Unity - 기타

목록 보기
2/2
post-custom-banner

빌드 자동화를 위해 Jenkins와 Unity를 연동해보고자 한다.

1. Jenkins 설치 & Github token

1. 윈도우 버전 젠킨스 설치

로컬에서 테스트 용도로 사용할 것이기 때문에 윈도우에 설치

2. Github token 발급

사용자 setting -> Developer settings -> Personal access tokens

generate new token을 클릭


Token description에 토큰 이름, Select scopes에서 repo와 admin:repo_hook 체크 후 생성

생성된 access token을 복사해둔다. 한번 발급받으면 다시 같은 키를 해당 페이지에서 못보고, 잊어버린다면 재발급을 받아야한다.
(Jenkins 시스템 설정에서 사용된다)

3. Jenkins 관리 시스템 설정

젠킨스 관리 - 시스템 설정에 들어간다.

시스템 설정 하단에 GitHub Server 탭으로 간다.(Ctrl+F로 찾는 것을 추천)

나는 이미 연동해둔 상태이지만, 초기에는 아무것도 없을 것이다. GitHub Server를 눌러주고 Credentials를 생성해야한다.

  • Kind : Secret text로 설정
  • Secret : 위에서 발급받은 깃허브 토큰 입력
  • ID : Github ID(깃허브 내 정보에서 bold체로 이름이 ID이다)
  • Description - 해당 Credentials 정보. 적어주는 것이 좋다 (나는 github로 적어둠)

입력 후 Add로 Credentials 추가
-none-에서 방금 생성한 Credentials로 바꿔준다.
(Test Connection으로 연결 확인 가능)

2. Unity를 사용하기 위한 설정

1. Jenkins Plugin 설치

Unity3d plugin, GitHub Integration Plugin, Publish Over SSH
plugin 설치

  • Unity3d plugin : Unity 빌드 위해 설치
  • Github Integration Plugin, Publish Over SSH plugin : Github webhook 사용 위해 설치

Unity3d plugin 설정

Jenkins 관리 - Global Tool Configuration - Unity3d

name : 유니터 버전 이름으로 적어주면 나중에 구분하기 쉽다(다른 유니티 버전도 추가할 경우)
Installation directory : 로컬 컴퓨터에 있는 유니티 설치 경로 넣어준다.

2. 젠킨스 프로젝트 Unity 빌드 설정

프로젝트 구성 설정

  • General

    github project 주소 작성

  • 소스 코드 관리

    마찬가지로 깃허브 레포지토리 주소 작성

  • Credentials

    Kind : SSH Username with private key
    Private Key에서 Enter directly 선택
    -> 깃허브 ssh pub키 입력
    하단의 Github ssh 세팅 참고!!

  • 빌드 유발

    github webhook으로 빌드 유발을 할 것이기 때문에
    Github hook trigger for GITScm polling에 체크

  • 빌드

    - plugin에서 설정한 유니티를 넣어준다.
    - command line

    quit : 커맨드 실행이 끝나면 Unity 에디터 종료
    batchmode : 배치 모드로 Unity 실행
    logFile "< pathname >" : 주어진 경로에 로그파일 생성
    buildTarget "< name >" : 빌드 타겟 지정
    projectPath "< pathname >": 주어진 경로의 프로젝트 열어서 수행 -> 유니티 폴더 이름까지 적어주면 됨
    executeMethod < ClassName.MethodName > : Unity가 프로젝트를 열자마자 주어진 메소드를 실행. 해당 스크립트는 무조건 Editor 폴더에 배치

3. 유니티 프로젝트 빌드 스크립트 작성

Unity 프로젝트 열어서 Assets 밑에 Editor 폴더 생성
Editor 폴더 내에 스크립트 작성

  • 예시코드
    말 그대로 예시 코드 이므로 씬, 빌드 위치, 빌드 파일 이름 등은 상황에 맞게 수정해서 사용 필요
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEditor.Build.Reporting;

// Output the build size or a failure depending on BuildPlayer.

public class BuildPlayer : MonoBehaviour
{
    [MenuItem("Build/Build AOS")]
    public static void MyBuild_AOS()
    {
        BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
        buildPlayerOptions.scenes = new[] { "Assets/Scene1.unity", "Assets/Scene2.unity" };
        buildPlayerOptions.locationPathName = $"Builds/AOS_{PlayerSettings.bundleVersion}.apk";
        buildPlayerOptions.target = BuildTarget.Android;
        buildPlayerOptions.options = BuildOptions.None;

        BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions);
        BuildSummary summary = report.summary;

        if (summary.result == BuildResult.Succeeded)
        {
            Debug.Log("Build succeeded: " + summary.totalSize + " bytes");
        }

        if (summary.result == BuildResult.Failed)
        {
            Debug.Log("Build failed");
        }
    }
}

~ 주의점

  • 빌드를 진행할 함수는 static이어야 한다

3. Webhook으로 자동빌드

깃 push 시 자동빌드 하도록 설정해보겠다.

로컬로 진행할 경우 젠킨스 주소가 localhost:{포트번호}일 것이다.
주소가 localhost이면 깃허브에서 웹훅 설정을 할 때 연결할 수 없기 때문에
로컬 아이피를 고정시켜서 특정 주소와 포트번호로 젠킨스에 들어올 수 있도록
현재 컴퓨터의 아이피를 고정시켜줘야 한다.
(왜 이런 과정이 필요한지 궁금하면 포트포워딩에 대해 검색해보는 것을 추천)

1. 공유기 DHCP 고정할당 & 포트포워딩

서비스할 컴퓨터(Web Server)가 재 부팅될 경우 공유기(LG U+)가 새로운 IP를 할당하기 때문에
해당 컴퓨터(Web Server)의 물리적인 주소를 얻어와서 IP 주소를 고정시켜 놓는다.

ipconfig /all

->랜카드의 물리적 주소 확인

공유기에 따라 DHCP를 고정할당하는 방법과 포트포워딩하는 방법이 다르다.
나는 U+ 공유기를 쓰기 때문에 따로 검색해서 설정했다
포트포워딩 시 처음에 젠킨스 설치 시 열어뒀던 포트를 포트포워딩 해야한다.
나는 8080 포트를 열었기 때문에 8080 포트를 포트포워딩 했다.

  • 포트가 열려있는지 확인해주는 사이트
    https://www.yougetsignal.com/tools/open-ports/
    포트포워딩으로 열었는데도 포트가 닫겨있는 경우가 있다. 이럴 때는 밑의 2,3번 과정을 해주어야 한다.

2. 방화벽 세팅

1번 과정을 거쳤는데도 포트가 열리지 않은 경우에 실행한다.

1. 윈도우 방화벽 세팅

  • Windows Defender 방화벽 실행

  • 고급 설정

  • 인바운드 규칙 생성

  • 포트 선택

  • TCP 선택

  • 특정 로컬 포트 선택 -> 위에서 열어줬던 젠킨스 포트(나는 8080포트)

  • 연결 허용

  • 프로필은 모두 선택, 이름은 본인이 구분하기 쉽게 짓는다(나는 Jenkins로 지어뒀다)

2. McFree 방화벽 세팅

나는 윈도우 방화벽도 풀어줬는데 포트가 안열렸다.
이것저것 삽질했는데 결국은 백신 프로그램에서 방화벽을 막아줘서 안된 것이었다.
백신 프로그램마다 방화벽 푸는 방법은 다를 테니 방법은 넘어간다.
만약 포트포워딩으로도 포트 접속이 안되면 백신 방화벽을 의심해보자.

3. Jenkins URL 설정

Jenkins - 시스템 관리 - Jenkins Location

  • Jenkins URL에 내 컴퓨터의 {외부 IP 주소(내부 IP주소는 안됨)}:{젠킨스 포트번호}로 써준다
  • 외부 IP 주소는 공유기 IP 주소를 인터넷으로 접속하면 확인할 수 있다.

예시
http://123.456.789:8080

4. Github-Jenkins ssh 세팅

1. Github ssh 세팅


깃허브 유저의 Setting - SSH and GPG keys
에서 로컬에서 만든 ssh 키를 등록해준다.

2. Jenkins ssh 세팅

위에서 만든 ssh키의 퍼블릭키를

project - 구성 - 소스코드 관리 - Credentials에 넣어야 한다.

private key에 id_rsa(pub)의 코드를 넣어준다.

5. Github webhook setting

1. 웹훅 키 발급


레포지토리 세팅 - webhook에 들어가서 Add webhook

push 할 때만 빌드를 원한다면 Just the push event에 체크
본인이 원하는 설정이 있으면 Let me select individual events 체크 -> 원하는 항목에 체크

2. 딜리버리 확인

정상적으로 연결이 됐으면, 웹훅이 작동하며 초록색 체크표시가 뜰 것이다.
젠킨스로 돌아가서 빌드가 완료됐으면 성공한 것이다.

profile
기록용.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 10월 22일

system -> github server 가 안보입니다

답글 달기