보안과 데이터
잡마다 새 macOS 또는 Linux VM을 만들어 실행하고 잡이 끝나면 그 VM을 지웁니다
잡마다 새 실행 환경
잡마다 새 macOS 또는 Linux VM을 만들어 실행하고 잡이 끝나면 그 VM을 지웁니다, 다른 고객은 내 소스와 시크릿, 결과물에 접근할 수 없습니다
잡이 끝난 뒤의 데이터
잡은 VM 안에서 GitHub 저장소를 체크아웃해 실행하고, 잡이 끝나면 VM과 그 안의 소스, 파일을 지웁니다, actions/cache 캐시는 조직당 모든 저장소를 합쳐 25GB까지 무료로 두고 추가 요금은 받지 않습니다, 한 조직의 캐시가 25GB를 넘으면 25GB 이하가 될 때까지 지웁니다, 한 저장소의 캐시가 12.5GB를 넘으면 그 저장소의 캐시 중 가장 오래 쓰지 않은 것부터 지우고, 그렇지 않으면 그 조직의 캐시 중 가장 오래 쓰지 않은 것부터 지웁니다, 7일 동안 쓰지 않은 항목은 지웁니다, actions/upload-artifact로 올린 결과물은 GitHub에 저장되고 저장소의 보관 기간 설정을 따르며 GitHub 실행 화면에서 받습니다, 결제와 환불, 사용 기록은 개인정보처리방침의 보관 기준을 따릅니다
캐시에 저장되는 것
Actions 캐시에는 워크플로의 캐시 단계(actions/cache, 캐시를 켠 actions/setup-*, ccache, sccache 등)가 저장하도록 지정한 폴더가 그대로 들어갑니다, 어떤 폴더를 넣을지는 워크플로가 정하므로 path에 소스 폴더를 적으면 소스도 저장됩니다, XenoCI는 이 파일을 조직과 저장소별로 나눠 회사가 국내에 두고, 같은 조직의 같은 저장소 잡만 복원할 수 있습니다, 조직당 모든 저장소를 합쳐 25GB까지 무료이고 추가 요금은 받지 않습니다, 마지막으로 쓴 뒤 7일이 지나면 자동으로 지우고, 한 조직의 캐시가 25GB를 넘으면 25GB 이하가 될 때까지 지웁니다, 한 저장소의 캐시가 12.5GB를 넘으면 그 저장소의 캐시 중 가장 오래 쓰지 않은 것부터 지우고, 그렇지 않으면 그 조직의 캐시 중 가장 오래 쓰지 않은 것부터 지웁니다, 조직 삭제가 확정되면 그 조직의 캐시를 바로 지우고, 콘솔의 캐시 화면에서 언제든 직접 지울 수 있습니다, 비밀값(토큰, 키, 인증서)이나 개인정보가 든 폴더는 캐시 경로에 넣지 마세요, Git 체크아웃 캐시(저장소를 Git 미러로 스티키 디스크에 두는 기능)는 요금이 스티키 디스크와 같지만 지금은 마이그레이션 마법사에서 고를 수 없어 저장소를 Git 미러로 저장하지 않고, 워크플로는 일반 체크아웃으로 받습니다
서명 자료와 시크릿
XenoCI는 인증서와 프로파일을 보관하지 않아 잡마다 넘겨야 합니다, 필요한 것은 Apple 배포 인증서(.p12)와 그 암호, 번들 ID에 맞는 프로비저닝 프로파일(.mobileprovision), 앱 타깃의 DEVELOPMENT_TEAM 입니다, GitHub Actions에서는 base64로 바꾼 값을 저장소 Secrets(SIGNING_P12_BASE64, SIGNING_P12_PASSWORD, PROVISIONING_PROFILE_BASE64)에 넣고, xenoci build로 보낼 때는 같은 이름을 export 한 뒤 --env SIGNING_P12_BASE64 --env SIGNING_P12_PASSWORD --env PROVISIONING_PROFILE_BASE64 로 넘깁니다(값은 로그에서 가려지고 잡이 끝나면 지워집니다), 스크립트는 빌드 앞에서 security create-keychain 으로 임시 키체인을 만들고 security import 로 .p12를 넣은 뒤 security set-key-partition-list 로 codesign 접근을 허용하고 프로파일을 ~/Library/MobileDevice/Provisioning Profiles 에 복사합니다, 자동 서명을 쓰려면 App Store Connect API 키(ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_P8_BASE64)를 같은 방법으로 넘기고 xcodebuild에 -allowProvisioningUpdates 와 -authenticationKeyPath, -authenticationKeyID, -authenticationKeyIssuerID 를 줍니다, 실패 원인이 No Accounts면 Apple 계정이 없는 자동 서명이고 No profiles for 면 프로파일이, No signing certificate 면 인증서가, requires a development team 이면 DEVELOPMENT_TEAM 이 빠진 것입니다, 서명이 필요 없는 확인은 CODE_SIGNING_ALLOWED=NO 로 시뮬레이터용으로 빌드합니다
접속 경로
SSH는 조직 관리자가 켠 조직에서 실행 중인 잡에 제공합니다, xenoci debug <잡 ID>로 접속하고 잡을 띄운 사람, 그 저장소 쓰기 권한자, 조직 관리자만 들어갈 수 있습니다, 연결은 XenoCI 중계를 거치지만 내용은 SSH로 끝까지 암호화되고 누가 언제 어느 잡에 접속했는지 기록합니다, 잡이 끝나면 접속도 끝납니다, 조직 관리자가 설정에서 실패한 잡의 VM 을 남겨 둘 시간(기본 0분, 최대 30분)을 정하거나 VM 보관을 켠 실패 모니터가 울리면 그 시간 동안 VM 을 남겨 두고 접속을 받습니다, 남겨 둔 시간도 평소 분당 요금으로 과금되고 30분을 넘지 않습니다, 화면 공유는 제공하지 않습니다
러너가 밖으로 나가는 고정 IP를 넣습니다, 이 IP는 조직마다 따로 주는 주소가 아니라 모든 조직이 같이 쓰는 고정 주소입니다, 주소는 play@xenoci.com으로 조직 ID를 보내 주시면 알려 드립니다, GitHub 조직의 IP 허용 목록에는 이와 다른 제어 IP를 넣고 콘솔 설정의 기능에서 IP 보기로 확인합니다, 러너는 허용 호스트 목록에 있는 호스트로만 나가므로 그 호스트가 목록에 없으면 호스트 이름도 함께 보내 주세요