nyancoder

WWDC 2021 - Customize your advanced Xcode Cloud workflows 본문

WWDC/WWDC 2021

WWDC 2021 - Customize your advanced Xcode Cloud workflows

nyancoder 2021. 9. 2. 02:30

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10269/

 

 

Environment variables

  • 환경 변수는 실행 중인 워크플로우에 따라 다른 동작이 필요할 때 사용됩니다.
  • 예를 들어 개발 환경에서 접속하는 API 주소와 배포된 앱에서 접속하는 API 주소를 다르게 하는 데 사용될 수 있습니다.
  • 이처럼 환경 변수는 빌드 동작을 추가로 설정할 수 있는 정보를 정의하는 간단한 키-값의 쌍입니다.

  • 워크플로의 Environment 섹션에서 필요한 환경 변수를 구성할 수 있습니다.
  • 이는 워크플로 구성의 한 부분이므로 소스 저장소에 추가 정보를 커밋할 필요가 없습니다.
  • 워크플로가 실행될 때마다 정의된 변수가 환경에 설정됩니다.

  • API 키 또는 액세스 토큰과 같은 민감한 정보의 경우 비밀 환경 변수를 사용할 수 있습니다.
  • 비밀 환경 변수는 암호화되어 항상 안전하게 저장되며, 해독된 값은 작업을 실행하는 데 사용되는 임시 환경에서만 사용할 수 있습니다.
  • 값은 로그에서도 수정되어, 일반 변수처럼 워크플로 편집기에서 볼 수 없습니다.

  • 비밀 환경 변수를 만들기 위해서는 "Secret"을 선택하기만 하면 됩니다.

 

Custom scripts

때로는 작업 중에 추가 명령이나 실행 분기 등이 필요하며 이를 위해 커스텀 스크립트를 작성할 수 있습니다.

사후 복제 스크립트, 사전 Xcodebuild 스크립트, 사후 Xcodebuild 스크립트의 세 가지 유형을 지원합니다.

  • 사용자 스크립트는 작업의 특정 지점에서 실행됩니다.
  • Xcode Cloud는 임시 환경을 만들고 저장소에서 소스 코드를 받아옵니다.
  • 그 후 Xcode Cloud는 Post-clone 스크립트를 실행합니다.
  • 다른 종속성을 해결한 후 Xcode 클라우드는 Pre-Xcodebuild 스크립트를 실행합니다.
  • 그다음 Xcode Cloud는 Xcodebuild 명령을 실행합니다.
  • 이 작업이 완료되면 Post-Xcodebuild 스크립트를 실행하고 이전에 생성한 모든 결과물을 저장합니다.

  • Xcode Cloud에 스크립트를 추가하기 위해서는 "ci_scripts"라는 폴더에 셸 스크립트를 추가하기만 하면 됩니다.
  • 이 폴더를 워크플로에서 사용 중인 프로젝트 파일 또는 workspace와 같은 레벨의 폴더에 배치합니다.
  • 사용자 지정 스크립트는 소스 코드의 일부이므로 pull request에서 스크립트 변경 사항을 테스트하거나 다른 branch에서 사용자 지정 동작을 할 수도 있습니다.
  • Xcode Cloud는 각 시점에 알맞은 스크립트의 존재를 찾고 존재하는 경우 실행합니다.
  • 따라서 스크립트를 실행하기 위해 워크플로를 구성할 필요가 없습니다.
  • ci_scripts 폴더의 이름과 내부의 스크립트는 이 명명 규칙과 일치해야만 Xcode Cloude가 스크립트를 찾아 실행할 수 있습니다.
  • 워크플로에서 구성한 환경 변수나 비밀 환경 변수는 스크립트에서 사용할 수 있습니다.

  • Xcode Cloud는 다양한 환경 변수를 제공하며, 이러한 변수를 사용하여 스크립트 흐름을 제어할 수 있습니다.
  • 예를 들어 iOS, macOS, tvOS, watchOS에서 실행 중인지 확인하려면 CI_PRODUCT_PLATFORM 변수 값을 사용할 수 있습니다.
  • 특정 워크플로의 특정 작업 중에만 실행하려는 명령의 경우에는 CI_XCODEBUILD_ACTION 및 CI_WORKFLOW 변수가 작업 및 워크플로와 일치하는지 체크하여 처리할 수 있습니다.

  • 예를 들어 pull request요청을 받아 빌드할 때는 다른 앱 아이콘을 설정할 수 있습니다.

  • 이 작업을 위해서 새 그룹 만들기를 선택한 다음 폴더 이름을 ci_scripts로 정합니다.

  • 이제 새로운 베타 아이콘을 Finder에서 ci_scripts 폴더로 드래그합니다.

  • 나타나는 시트에서 target을 다 없앤 다음 Finish를 클릭합니다.

  • 이제 Xcodebuild명령보다 먼저 실행되는 미리 만들어둔 pre-Xcodebuild 스크립트를 드래그하여 추가합니다.

  • 스크립트의 실행은 CI_PULL_REQUEST_NUMBER를 통해 pull request로 인해 시작된 것인지를 체크할 수 있습니다.
  • Xcode Cloud는 TestFlight에 빌드를 배포할 때마다 항상 프로젝트의 아카이브를 먼저 빌드합니다.
  • 따라서 TestFlight에 배포되는 빌드에만 적용하기 위해서 CI_XCODEBUILD_ACTION가 "archive"를 확인합니다.
  • 위 조건이 맞으면 기존 앱 아이콘을 제거하고 rm 및 mv 명령을 사용하여 베타 앱 아이콘으로 바꿉니다.
  • 이 과정에서 CI_WORKSPACE 환경 변수를 사용하여 올바른 경로를 찾을 수 있습니다.

  • 이제 Xcode Cloud는 pull request를 통해 예제 앱을 빌드할 수 있습니다.
  • 빌드 결과물이 새 베타 앱 아이콘을 사용하고 있는 것을 확인할 수 있습니다.

  • 스크립트의 표준 출력 및 표준 오류는 실행된 작업에 대한 로그에 포함되며 아티팩트 탭에서도 다운로드할 수 있습니다.
  • 스크립트가 예상대로 실행되지 않으면 이름을 올바른지 확인할 필요가 있습니다.
  • 스크립트에서 발생할 수 있는 오류를 해결하는데 도움이 되는 유용한 로그나 실패 처리 로직을 추가해야 합니다.
  • 예를 들어, 스크립트의 네트워크 요청이 실패하는 경우 자세한 로그를 넣으면서도 실패 시 재시도하는 로직을 추가할 수 있습니다.
  • 스크립트가 0이 아닌 값으로 종료되면 Xcode Cloud는 이를 실패로 간주하고 전체 작업을 실패로 처리합니다.
  • Xcode Cloud가 테스트 작업을 수행할 때, 여러 환경이 사용되며 각 환경에 소스코드는 복사되지 않는다는 점을 유의해야 합니다.
  • 따라서 테스트 시점에는 ci_scripts 폴더만 사용할 수 있으므로 스크립트 내에 필요한 실행파일이나 리소스들은 ci_scripts 폴더에 완전히 포함되어야 합니다.

 

Additional repositories

  • Xcode Cloud를 사용하면 소스 저장소를 자동으로 추가할 수 있습니다.
  • 이를 위해서는 Xcode의 패키지 추가를 선택합니다.

  • 이 예제에서는 이 조직의 패키지 저장소인 Nature Labs Packages가 이미 추가되어 보이는 것을 확인할 수 있습니다.
  • 여기서 원하는 패키지인 InvitationKit을 선택하고 Add Package를 클릭하면 종속성이 추가됩니다.

  • 이제 추가된 새 종속성을 커밋하고 푸시하면 됩니다.

  • 이렇게 새로 추가된 종속성이 있을 경우 처음 접근하는 것이기 때문에 권한 문제로 인해서 빌드가 실패할 수 있습니다.
  • 이때 App Store Connect의 Xcode Cloud에서는 저장소 액세스에 문제가 있음을 나타내는 경고 배너를 표시하며, 이를 통해서 접근 권한을 쉽게 부여할 수 있습니다.
  • Manage Repositories 버튼을 클릭하면 설정 페이지로 이동합니다.

  • 설정 페이지에서 문제가 발생한 InvitationKit 리포지토리에 권한을 부여할 수 있는 버튼이 나타납니다.

  • 해당 버튼을 누르면 저장소에 접근하기 위해 Xcode Cloud를 승인하도록 할 수 있습니다.

  • 이 단계를 완료하면 접근이 허용됩니다.

  • 이제 Xcode Cloud를 다시 보면 Access Granted가 표시됩니다.

  • 이제 Start Build 버튼을 눌러 빌드를 다시 실행하면 성공할 것을 예상할 수 있습니다.

  • 이처럼 저장소 설정을 통해서 연결된 모든 저장소들을 확인할 수 있습니다.
  • 더 이상 사용되지 않는 저장소의 접근을 거부할 수 있습니다.
  • Xcode Cloud는 빌드 중에 새로 참조되는 저장소를 감지하므로, 접근할 수 없는 저장소에 대해 쉽게 문제를 해결할 수 있는 방법을 제공합니다.
  • 이러한 기능은 사용자의 스크립트 내에서 일어나는 Git 저장소에 대한 작업에서도 동일하며, 다른 모든 종속성 관리 도구에서도 적용됩니다.

 

Webhooks

  • Webhook은 Xcode Cloud가 서비스와 통신할 수 있는 방법을 제공합니다.
  • 빌드 과정의 여러 단계에서 전송되는 다양한 정보를 바탕으로 작업을 더 자동화하고 팀의 협업을 개선할 수 있습니다.

  • Xcode Cloud에서 웹 훅을 설정하면 빌드의 세 가지 단계에서 업데이트를 받을 수 있습니다.
  • 우선 코드를 푸시하거나 수동으로 빌드를 시작하여 빌드가 생성될 때 이벤트를 받습니다.
  • 그다음 빌드가 시작되면 이벤트를 받습니다.
  • 마지막으로 빌드가 완료되면 빌드 실패 또는 성공 여부에 관계없이 이벤트를 받을 수 있습니다.

  • Xcode Cloud에서 웹 훅을 쉽게 추가할 수 있습니다.
  • 왼쪽의 설정 탭에서 Webhooks를 클릭한 다음 더하기 버튼을 클릭합니다.

  • 웹 훅의 이름과 HTTP 요청을 처리할 수 있는 앱 또는 서비스의 URL을 입력합니다.

  • 그다음 Save 버튼을 클릭하면 저장이 되며, 제품당 최대 5개의 웹 훅을 생성할 수 있습니다.
  • 각 웹 훅에는 쉽게 구분할 수 있는 고유한 이름을 제공해야 합니다.

  • 엔드포인트로 전송되는 페이로드는 App Store Connect 앱, Workflow, Product, 빌드 등과 같은 빌드 및 제품에 대한 정보 가 포함된 JSON blob입니다.

  • AWS Lambda에서 Swift를 사용하여 HttpRequest를 통해 전송된 페이로드를 수신하고 처리하는 예는 위와 같습니다.
  • 먼저 요청을 받아 페이로드를 JSON 객체로 디코딩합니다.
  • 그런 다음 워크플로의 이름과 빌드 상태를 확인합니다.
  • 이 예에서는 name을 확인하여 "Release Workflow"인 상태와 state가 성공인 상태에만 메시지를 Twitter에 게시합니다.
  • 마지막으로 웹 훅 요청이 성공적으로 처리되었음을 알리기 위해 200 상태 코드를 반환합니다.

  • Xcode Cloud를 사용하면 엔드포인트에 전달된 웹 훅의 콘텐츠를 쉽게 확인할 수 있습니다.
  • App Store Connect의 Xcode Cloud에서 설정의 웹 훅을 선택합니다.
  • 나오는 리스트에서 확인할 웹 훅을 선택합니다.

  • 그러면 나오는 시간별 전송 정보에서 원하는 항목을 선택합니다.

  • 그러면 서비스로 서비스로 전송된 요청과 수신된 응답을 확인할 수 있습니다.

  • Xcode Cloud 웹 훅으로 할 수 있는 다양한 일 중 몇 가지를 예로 들 수 있습니다.
  • 버그 검사 시스템에서 자동으로 문제를 등록하거나 해결할 수 있습니다.
  • 빌드가 실패하면 페이징 시스템에 알림을 보낼 수 있습니다.
  • 복잡한 릴리스 워크플로의 일부로 다운스트림 빌드를 시작할 수 있습니다.

 

목차: https://nyancoder.tistory.com/2

Comments