콘텐츠로 이동

지속적 통합(CI)

레지스트리는 추가 인증 설정 없이 CI에서 바로 작동합니다. 기본적으로 인증되지 않은 요청은 IP 주소당 분당 1,000회 요청으로 속도 제한됩니다.

분당 20,000회 요청의 더 높은 속도 제한이 필요하다면 tuist registry login를 실행하여 인증할 수 있습니다. 이때 TUIST_TOKEN 환경 변수가 설정되어 있어야 합니다. 프로젝트 토큰은 여기의 문서를 따라 생성할 수 있습니다.

Note

아래의 키체인 설정은 tuist registry login를 사용하여 더 높은 속도 제한을 얻으려는 경우에만 필요합니다. 대부분의 경우 기본 인증 없는 속도 제한으로 충분하므로 이 단계를 완전히 건너뛸 수 있습니다.

또한 새 사전 잠금 해제 키체인을 생성하는 것은 패키지의 Xcode 통합을 사용할 때만 필요합니다.

tuist registry login는 자격 증명을 키체인에 저장하므로 CI 환경에서 키체인에 접근할 수 있는지 확인해야 합니다. 일부 CI 제공업체나 Fastlane과 같은 자동화 도구는 이미 임시 키체인을 생성하거나 생성 방법을 내장되어 제공합니다. 하지만 다음 코드로カスタム 스텝을 만들어 직접 생성할 수도 있습니다.

bash
TMP_DIRECTORY=$(mktemp -d)
KEYCHAIN_PATH=$TMP_DIRECTORY/keychain.keychain
KEYCHAIN_PASSWORD=$(uuidgen)
security create-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security default-keychain -s $KEYCHAIN_PATH
security unlock-keychain -p $KEYCHAIN_PASSWORD $KEYCHAIN_PATH

기본 키체인이 생성되고 잠금이 해제되었는지 이전에tuist registry login를 실행하세요.

환경 간 증분 해결#

우리 레지스트리를 사용하면 초기/콜드 해결 속도가 약간 더 빨라지며, CI 빌드 전반에 걸쳐 해결된 의존성을 지속하면 더 큰 개선 효과를 경험할 수 있습니다. 레지스트리 덕분에 저장하고 복원해야 하는 디렉터리 크기가 레지스트리 없이 사용할 때보다 훨씬 작아져 시간이 크게 단축됩니다. 기본 Xcode 패키지 통합을 사용할 때 의존성을 캐시하려면 xcodebuild를 통해 의존성을 해결할 때カスタム clonedSourcePackagesDirPath를 지정하는 것이 가장 좋습니다. 이는 Config.swift 파일에 다음을 추가하여 수행할 수 있습니다.

swift
import ProjectDescription
let config = Config(
generationOptions: .options(
additionalPackageResolutionArguments: ["-clonedSourcePackagesDirPath", ".build"]
)
)

또한 Package.resolved의 경로를 찾아야 합니다. ls **/Package.resolved를 실행하여 경로를 확인할 수 있습니다. 경로는 App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved와 비슷해야 합니다.

Swift 패키지 및 XcodeProj 기반 통합의 경우 프로젝트 루트 또는 Tuist 디렉터리에 있는 기본 .build 디렉터리를 사용할 수 있습니다. 파이프라인을 설정할 때 경로가 올바른지 확인하세요.

다음은 기본 Xcode 패키지 통합을 사용할 때 의존성을 해결하고 캐시하기 위한 GitHub Actions 워크플로 예시입니다:

yaml
- name: Restore cache
id: cache-restore
uses: actions/cache/restore@v4
with:
path: .build
key: ${{ runner.os }}-${{ hashFiles('App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}
- name: Resolve dependencies
if: steps.cache-restore.outputs.cache-hit != 'true'
run: xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath .build
- name: Save cache
id: cache-save
uses: actions/cache/save@v4
with:
path: .build
key: ${{ steps.cache-restore.outputs.cache-primary-key }}