共用方式為


行動應用程式簽署

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

本文說明 Azure Pipelines 如何安全地管理憑證和配置檔,以簽署和布建行動應用程式。 若要簽署和佈建行動應用程式,管線必須提供 Android 或 Apple 作業系統的簽署憑證,以及 Apple 的 佈建設定檔

Android 應用程式簽署

下列程式會簽署 Android 應用程式,同時保持簽署憑證的安全。

取得金鑰儲存庫檔案

請按照 Android 文件 生成金鑰存放區檔案及其對應的金鑰。 金鑰儲存庫檔案包含簽署憑證。

在 Azure Pipelines 程式庫>[安全檔案] 中,選取 [+ 安全檔案 ],並將金鑰存放區檔案上傳至 安全檔案庫。 在上傳期間,金鑰儲存庫會加密並安全儲存。

將簽署工作新增至流程

在 Android 應用程式的 YAML 管線中,設定下列 keystore-passwordkey-aliaskey-password 變數。 或者,您可以使用 管線變數 UI 來設定變數。

variables:
  keystore-password: <keystore file password>
  key-alias: <key alias for the signing certificater>
  key-password: <password for the key associated with the alias>

在建置步驟之後,將 AndroidSigning@3 工作新增至管線。 在AndroidSigning@3任務中:

  • <apkFiles> 是簽署所需的APK檔案路徑和名稱。 預設值是 **/*.apk
  • <apksign> 必須是 true,這是預設值。
  • <apksignerKeystoreFile> 是安全檔案庫中已上傳金鑰存放區檔案的名稱。
  • <apksignerKeystorePassword> 是未加密金鑰存放區檔案的密碼。
  • <apksignerKeystoreAlias> 是簽署憑證的金鑰別名。
  • <apksignerKeyPassword> 是與指定別名相關聯之密鑰的密碼。
steps:
- task: AndroidSigning@3
  displayName: 'Signing and aligning APK file(s) **/*.apk'
  inputs:
    apkFiles: '**/*.apk'
    apksign: true
    apksignerKeystoreFile: <keystore-filename.keystore>
    apksignerKeystorePassword: $(keystore-password)
    apksignerKeystoreAlias: $(key-alias)
    apksignerKeyPassword: $(key-password)

任何組建代理程式現在都可以安全地簽署應用程式,而無需在組建電腦本身上進行任何憑證管理。

Apple iOS、macOS、tvOS 或 watchOS 程式簽署

若要簽署和佈建 Apple App,Xcode 組建需要存取 P12 簽署憑證和一或多個佈建描述檔。

取得 P12 簽署憑證

使用 macOS 上的 Xcode 或 Keychain 存取應用程式,將您的開發或散發簽署憑證導出至 .p12 檔案。 若要使用 Xcode 匯出:

  1. 移至 [Xcode>喜好設定>帳戶]。

  2. 在左欄中,選取您的Apple ID。

  3. 在右側,選取您的個人或小組帳戶,然後選取 [ 管理憑證]。

  4. Ctrl+選取您要匯出的憑證,然後從功能表中選取 [匯出憑證]。

    使用 Xcode 導出憑證的螢幕快照。

  5. 輸入憑證名稱、儲存檔案的位置,以及保護憑證的密碼。

若要在 macOS 上使用「鑰匙圈存取」應用程式進行匯出,或在 Windows 上產生簽署憑證,請使用 iOS 簽署中所述的程序。

上傳 P12 檔案並新增密碼變數

在 Azure Pipelines 程式庫>安全檔案中,選取 [+ 安全檔案 ],並將 P12 檔案上傳至 Azure Pipelines 安全檔案程式庫。 在上傳期間,憑證會加密並安全儲存。

在應用程式建置管線的 變數 UI 中,新增名為 P12password 的變數,並將憑證密碼作為值。 選取 鎖定 圖示以保護密碼,並在記錄中隱藏密碼。

取得佈建描述檔

如果應用程式未使用自動簽署,請從 Apple 開發人員入口網站下載應用程式布建設定檔。 如需詳細資訊,請參閱 編輯、下載或刪除布建配置檔

您也可以使用 Xcode 來存取安裝在 Mac 上的佈建設定檔。 在 Xcode 中,移至 Xcode>偏好設定>帳號。 選取您的 Apple ID 和團隊,然後選取 [下載手動設定檔]。

在 Azure Pipelines 中,將布建配置檔上傳至 安全檔案庫。 在上傳過程中,檔案會被加密並安全儲存。

將簽署和佈建任務新增至工作流

您至少需要一部代理程式電腦,才能執行 Azure Pipelines 組建或發行管線。 您可以使用 Microsoft 裝載的代理程式 或設定 自我裝載代理程式。 如需詳細資訊,請參閱 Azure Pipelines 代理程式

對於在託管的 macOS 代理程式上進行 Apple 應用程式簽署和佈建,或者如果您不想允許存取代理程式鑰匙圈,您可以在每次組建期間安裝必要的憑證和描述檔。 如果您使用自我託管代理程式,並信任可存取代理程式鑰匙圈的人員和程序,則可以在 macOS 組建代理程式上預先安裝憑證和設定檔。

在每個組建期間安裝憑證和配置檔

如果您沒有組建代理程式的持久存取權,例如當您使用 Microsoft 裝載的代理程式時,您可以在每個組建期間安裝憑證和配置檔。 管線會在每個組建開始時安裝 P12 憑證和佈建配置檔,並在組建完成時將其移除。

在應用程式的 YAML 建置管線中,在Xcode@5工作之前新增InstallAppleCertificate@2工作。 在程式碼中,取代 <secure-file.p12> 為上傳的 .p12 檔案名稱。 對於 certPwd,請使用您建立的安全 P12password 變數。

- task: InstallAppleCertificate@2
    inputs:
      certSecureFile: '<secure-file.p12>'
      certPwd: '$(<P12password>)'

此外,在Xcode@5任務之前,將InstallAppleProvisioningProfile@1任務新增至管線。 取代 <secure-file.mobileprovision> 成佈建設定檔檔案的名稱。

- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'

注意

InstallAppleCertificate@2InstallAppleProvisioningProfile@1 任務中,removeProfile 參數預設為 true,這會在每次建置之後移除憑證和設定檔。

任何建置代理程式現在都可以安全地簽署應用程式,而不需要建置機器本身上的任何憑證或設定檔管理。

在macOS組建代理程式上預安裝憑證和配置檔

或者,您可以在 自我裝載 的 macOS 組建代理程式上預先安裝簽署憑證和佈建設定檔,以供組建繼續使用。 只有在您信任有權存取代理程式電腦上 macOS 金鑰鏈的人員和程序時,才使用此方法。

將鑰匙圈密碼變數新增至管線

將新的變數新增至名為 KEYCHAIN_PWD 的建置管線。 將值設定為預設的 macOS 鑰匙圈密碼,這通常是啟動代理程式的使用者的密碼。 選取 鎖定 圖示以保護此密碼。

在代理程式上安裝 P12 憑證

若要在預設金鑰鏈中安裝 P12 憑證,請從代理程式電腦上的 macOS 終端機視窗執行下列命令。 替換 <certificate.p12> 為 P12 文件路徑和名稱,並替換 <password> 為 P12 文件的加密密碼。

sudo security import <certificate.p12> -P <password>

在代理程式上安裝佈建設定檔

在 macOS 終端機視窗中輸入 security find-identity -v -p codesigning ,尋找您簽署身分的全名。 您會看到表單 iPhone Developer/Distribution: Developer Name (ID)中的簽署身分識別清單。 如果身分識別無效,您會在身分識別之後看到類似 (CSSMERR_TP_CERT_REVOKED) 的內容。

若要在代理程式上安裝佈建設定檔,請從 macOS 終端機視窗執行下列命令。 將 <profile> 替換為佈建設定檔檔案路徑。 替換 <UUID> 為佈建設定檔 UUID,這是不含副檔名的 .mobileprovision 佈建設定檔檔案名稱。

sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision

新增使用預設金鑰鏈的簽署和布建工作

在 YAML 建置管線中,在Xcode@5工作之前新增InstallAppleCertificate@2工作。 在程式代碼中,設定下列值:

  • certSecureFile:已上傳 . p12 檔案的名稱。
  • certPwd:安全 P12password的變數。
  • signingIdentity:您的簽署身分識別的完整名稱。
  • keychaindefault 以允許存取預設鑰匙圈。
  • keychainPassword:變數 KEYCHAIN_PWD
  • deleteCertfalse 在建置之間保留憑證。
- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: '<secure-file.p12>'
    certPwd: '$(P12password)'
    signingIdentity: <full-signing-identity>
    keychain: default
    keychainPassword: `$(KEYCHAIN_PWD)
    deleteCert: false

同時,在Xcode@5任務之前新增InstallAppleProvisioningProfile@1任務。 在程式碼中:

  • 設定 provProfileSecureFile 為佈建設定檔的名稱。
  • removeProfile 設定為 false 以在組建之間保留設定檔。
- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'
      removeProfile: false

macOS 組建代理程式現在可以安全地簽署和佈建所有組建的 App,而不需要進一步的憑證或設定檔管理。

設定 Xcode 建置工作以參考安全檔案

Xcode 建置(Xcode@5) 這個工作會參考signingIdentityprovisioningProfileUuid,並使用變數。 這些變數是由上述 安裝 Apple 憑證安裝 Apple 佈建設定檔 工作自動為選取的憑證和佈建設定檔設定。

將下列程式碼新增至管線 Xcode 建置 (Xcode@5) 工作:

- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

管線建置代理程式現在可以安全地簽署和佈建您的應用程式,而不需要在建置電腦或建置管線中進行進一步的憑證或設定檔管理。