방화벽 뒤에 있는 Unity Android 빌드 머신의 설정

빌드 머신의 보안 정책 때문에 방화벽 뒤에 빌드 머신을 설정해야 했습니다.

아~ 너무 번거롭고 짜증나… -0-

빌드가 성공할 때까지 노력(*삽질)한 결과를 어떻게든 기록합니다.

Unity를 설정하는 동안 허용되는 도메인

아래 나열된 도메인은 별표입니다.
방화벽에 등록됩니다(HTTP 및 HPPTS 모두).
예) *.package.openupm.com
  • package.openupm.com
  • packages.unity.com
  • download.packages.unity.com
  • dl.bintray.com
  • api.bintray.com
  • akamai.bintray.com
  • upm-cdn.unity.com
  • dl.google.com
  • license.unity3d.com
  • core.cloud.unity3d.com
  • public-cdn.cloud.unity3d.com
  • download.unity3d.com
  • cloudmedia-docs.unity3d.com
  • aka.ms
  • unityregistry-pa.googleapis.com
  • go.microsoft.com
  • developer.microsoft.com
  • visualstudio.microsoft.com
  • download.visualstudio.microsoft.com
  • download.microsoft.com
  • download.visualstudio.com
  • developer.android.com
services.gradle.org

Android 빌드 시 오류로 인해 허용된 도메인
Android SDK와 관련이 있는 것 같은데 정확히 뭔지는 모르겠고 curl 에러 발생시 허용되는 도메인
Curl 오류 56: 수신 실패: 연결이 재설정되었습니다.
  • 상황
위의 두 가지 오류가 로그되면서 추가 로그 없이 무기한 빌드를 하고 있습니다.
http://www.google-analytics.com
  • 결과
Curl 오류는 사라졌고, Socket 오류는 있었지만 Android 빌드는 잘 됩니다.
  • 환경 변수에 다음 두 변수를 추가해야 합니다.
  • 안드로이드_홈
자바_홈
아…. 그때그때 다르네요.
소켓 오류가 일정합니다.
http://www.w3.org
그것은 쓸모가 없었다

……
결국 no-https
sdkmanager 명령 결과 차이
sdkmanager 목록 –verbose

인터넷 제한이 없는 PC에서 (빌드에 문제가 없는 PC)

인터넷이 제한된 PC에서(빌드에 문제가 있는 PC)
구글링 결과 sdkmanager 실행시 –no_https 옵션을 사용하라는 글이 있었고 빌드 문제가 있는 PC에서 명령어를 실행한 결과 실제 차이가 있었습니다.

sdkmanager 목록 –verbose

sdkmanager 목록 –verbose –no_https
따라서 sdkmanager.bat 파일의 내용을 약간 변경하여

(빨간 네모 영역의 옵션이 추가되었습니다.)
드디어 빌드가 잘 되네요… .. ㅠㅠ
하지만… 숙제가 남았어.
작동하도록 –no_https 옵션을 추가하는 것은 임시방편일 뿐이라고 생각합니다.
이것이 왜 작동합니까?

–no_https 없이 어떻게 작동하게 할 수 있습니까?


728×90
–no_https 옵션 없이 가능합니다.
관리자가 설정한거라 정확히 어떤 리스트가 추가되었는지는 모르겠습니다.
방화벽에서는 아래 링크에 있는 대부분의 도메인이 등록되어 있다고 말했습니다.
https://learn.microsoft.com/en-us/visualstudio/install/install-and-use-visual-studio-behind-a-firewall-or-proxy-server?view=vs-2022

하아…..
–no_https 없이 Android 빌드가 제대로 작동했습니다.
자주 실패합니다(10번 중 1번 또는 2번).
이전과 같은 오류는 없고, 인터넷에 다른 경우처럼 Android SDK 관련 로그가 기록되지 않습니다.
android sdk가 출력을 감지한 후에도 여전히 AndroidSDK에 대한 정보를 찾지 못한 채 방황하는 것 같습니다.

다음 AndroidSDKTools 경로는 실패한 빌드 시작 시 로그에 출력되지 않습니다.
  • 빌드 에이전트 시스템에서 아래의 세 가지 환경 변수를 모두 제거하십시오.
  • 안드로이드_홈
  • ANDROID_NDK_ROOT
자바_홈
#if UNITY_ANDROID
string sdkPath = $"(ANDROID_HOME) :\nbefore => '{Environment.GetEnvironmentVariable("ANDROID_HOME")}'\n";
string javaPath = $"(JAVA_HOME) :\nbefore => '{Environment.GetEnvironmentVariable("JAVA_HOME")}'\n";
string ndkPath = $"(ANDROID_NDK_ROOT) :\nbefore => '{Environment.GetEnvironmentVariable("ANDROID_NDK_ROOT")}'\n";

Environment.SetEnvironmentVariable("ANDROID_HOME", AndroidExternalToolsSettings.sdkRootPath);
Environment.SetEnvironmentVariable("JAVA_HOME", AndroidExternalToolsSettings.jdkRootPath);
Environment.SetEnvironmentVariable("ANDROID_NDK_ROOT", AndroidExternalToolsSettings.ndkRootPath);

sdkPath += $"after => '{Environment.GetEnvironmentVariable("ANDROID_HOME")}'";
javaPath += $"after => '{Environment.GetEnvironmentVariable("JAVA_HOME")}'";
ndkPath += $"after => '{Environment.GetEnvironmentVariable("ANDROID_NDK_ROOT")}'";

Debug.Log($"{sdkPath}\n{javaPath}\n{ndkPath}");
#endif
안드로이드 빌드시 에디터에서 설정한 경로를 환경변수로 심어주었습니다.
우선 빌드는 에러 없이 잘 돌아가고 있는데 며칠 더 지켜봐야 할 것 같습니다.

반응형
아 또..일어나네…
정상과 비정상의 차이

정상일 때

비정상일 때
성공 및 실패 로그 비교

성공시 아래의 로그를 취하고, 실패시 전혀 기록하지 않는다.
파일 C:\Users\*******\.android\repositories.cfg를 로드할 수 없습니다.
검색 결과가 빈 파일이더라도 해당 경로에 .cfg 파일이 생성되면 메시지가 사라집니다.(
https://stackoverflow.com/questions/47028626/repositories-cfg-could-not-be-loaded-in-windows-10)

지푸라기라도 잡는 심정으로 만들고 나서 지을 예정입니다.
빌드가 잘되면

이 변화는 뭔가 다릅니다.
이전에는 로그를 찍으면서 빨간색 구간과 노란색 구간 사이에 시간차가 있었습니다.
나는 지금 붙어있다.
뭔가 기분이 좋다 -0-
하지만 며칠 더 기다려야 겠습니다. ;;;
그렇게 말하자마자 다음 빌드에서 또 다른 에러 로그가 뜨더군요…

소스 목록을 다운로드하지 못했습니다!

java.net.SocketException: 연결 재설정

이 두 개의 로그가 여러 번 반복된 후 AndroidSDKTools:가 아름답게 출력됩니다…
음……!!!!!

뭔가 강한 느낌이 듭니다.
AndroidSDKTools:가 출력되었을 때 빌드가 실패한 경우는 없었습니다.
Running…이 10분 동안 사라지지 않았습니다.
제한 시간이 1시간으로 설정되었으므로 그때까지 기다리자.
드디어……

시간 초과로 빌드에 실패했습니다.
아.. 왠지 로그가 예쁘게 남아있으면 좋을텐데…


또한 아래와 같이 약 1시간 동안 로그가 남지 않습니다.
https://stackoverflow.com/questions/52692463/android-sdk-repositories-cfg-is-missing
위의 내용에 따라

앞서 생성한 .cfg 파일의 내용을 채워봅시다.

에~
15분 동안 거기에 있는 걸 보고 밥을 먹었다.
어쨌든 시간 초과를 기다리지 않고 취소 후

repositories.cfg를 제거한 후 다시 빌드를 시도합니다.
흠…
repositories.cfg를 삭제한 후 이전과 같이 빌드가 다시 정상적으로 작동합니다.
도대체 무엇이 문제일까요?
안드로이드 외 다른 빌드에서는 문제가 없는 것으로 보아 AndroidSDK와 관련된 문제임이 분명한데…


오, 나는 이것을 할 수 없다

중간에 빌드오류가 있었는데 Execution timeout 이라고 표시된건 다 문제있는 빌드… 너무 많습니다.
이전에 –no_https 옵션을 추가했을때 빌드가 잘 되었던걸로 기억하는데…

다시 설정해 보세요.

아~ 정말 저를 잡고 유니티에게 물어봐야 할 것 같아요.

이게 뭐하는 짓인지 궁금하지만 며칠 더 봅시다.


흠….
–no_https를 설정하고 나니 좋아 보인다.


원래 펜딩 상태는 항상 하루에 2번 이상 발생하는데…
뭐, 이대로 두고 꽤 오랫동안 지켜봐야겠습니다.
  • 지금까지의 상황 요약
  • 빌드 머신이 속한 네트워크에 방화벽이 없다면 무조건 정상입니다.
  • 빌드 머신이 속한 네트워크의 방화벽이 https로 나가는 패킷에 제한이 있는 경우 보류
sdkmanager.bat 파일에 –no_https를 설정하면 정상적으로 동작합니다.
위 내용을 보면 수시로 https를 사용하려고 시도하는 패킷이 있습니다.
확실히 –no_https 옵션으로 한 달 정도 지켜보겠습니다.


일주일 정도 위 상태를 관찰한 결과
펜딩 상태가 완전히 사라졌다고 해도 과언이 아닐 것 같습니다.

일주일 전(11일) –no_https를 설정한 이후로 보류 중인 적이 없습니다.

이전에 –no_https 옵션으로 한 달 정도 봤습니다.
별거 없어요~~~
이전 네트워크 관리자와 대화할 때
https 나가는거 다 풀면 –no_https 설정 안해도 정상이었는데,
이 문제는 https로 나가는 것을 차단하면서 화이트리스트만 허용할 때 발생하는 문제인 것 같습니다.
(나는 모든 발신 http를 허용한다고 말했습니다.)

회사에서 https로 나가는 것이 노출되지 않고 숨어있는 것 같습니다.
흠….
어떻게 보면 별거 아닌 일에 너무 많은 시간을 쏟은 것 같아서 더 이상 추적하지 않기로 했습니다.

끝~