프로그래밍/Android

Mainframer - 리모트 서버에서 빌드를 돌려보자

Lou Park 2023. 10. 21. 00:33

안드로이드 프로젝트 빌드 시간으로 고민하는 사람들이 많을 거라고 생각한다.

좋은 장비가 도움을 줄수는 있지만, 남아도는 좋은 서버가 있다면? (꽤 희망적인 가정인데)

 

MainframerMirakle을 이용하면 SSH를 통해 리모트 머신에서 프로젝트를 빌드하고 결과를 로컬에 동기화 할 수 있다.

이것이 가능한데에는 rsync가 큰 역할을 한다.

 

우선 빌드서버와 SSH 연결이 가능한 상태를 가정하도록 하겠다.

SSH 연결만 된다면 리모트 머신에서 딱히 준비할 건 없기때문이다.
Mainframer Releases 페이지에서 최신 버전의 mainframer.sh를 다운받는다.

.
└── MyAndroidProject/
    ├── app
    ├── .mainframer/
    │   ├── config
    │   ├── ignore
    │   └── mainframer.sh
    ├── build.gradle
    └── settings.gradle

프로젝트 내에 .mainframer 폴더를 만들고, 다운받은 mainframer.sh를 넣어준다.
설정을 위한 configignore 파일도 만들어준다.

 

Config

# config
remote_machine=158.20.23.41

# config.yml
remote:
  host: "158.20.23.41"

config에는 빌드할 서버 Host를 적어주면된다.
최신 Mainframer 문서를 보니 config.yml을 지원하고 있어 두 형식 모두 준비했다.

 

Ignore

# Don't sync mainframer config
.mainframer
mainframer*

# Don't sync builf folders
/build
app/build/intermediates
app/build/kotlin
app/build/tmp

# From progect .gitignore
*.iml
plugin-dex/build
.DS_Store

# .gradle folder contains machine specific loc and bin files, no need to sync it between machines.
.gradle

# Synching .git or other VCS folders is very bad idea, they are usually very heavy and not required for the build.
.git

# Synching IDE specific folders is really not needed for remote build.
/.idea

# Synching local.properties usually very bad idea because they contain machine specific properties like paths to SDKs and so on.
/local.properties

# Syncing captures from Android Studio is usually not required.
/captures

ignore의 경우에는 mainframer가 동기화 하지 않을 파일들을 지정할 수 있다.
많이 쓰는 설정을 복붙한건데, 빌드와 관련없는 파일들은 제외해서 효율을 높여준다.

 

돌려보자!

bash .mainframer/mainframer.sh ./gradlew assembleDebug

제대로 설정했다면, Debug 빌드를 돌려보자.
성공했다면, 어떠한 Task든 다 돌릴 수 있다!

 

실패했다면...방법을 찾길바랍니다...

SSH 연결 혹은 rsync 지원 문제일 수도 있으나 여러분은 해결해내실겁니다...