Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
本文說明 Azure Pipelines 如何安全地管理憑證和配置檔,以簽署和布建行動應用程式。 若要簽署和佈建行動應用程式,管線必須提供 Android 或 Apple 作業系統的簽署憑證,以及 Apple 的 佈建設定檔 。
Android 應用程式簽署
下列程式會簽署 Android 應用程式,同時保持簽署憑證的安全。
取得金鑰儲存庫檔案
請按照 Android 文件 生成金鑰存放區檔案及其對應的金鑰。 金鑰儲存庫檔案包含簽署憑證。
在 Azure Pipelines 程式庫>[安全檔案] 中,選取 [+ 安全檔案 ],並將金鑰存放區檔案上傳至 安全檔案庫。 在上傳期間,金鑰儲存庫會加密並安全儲存。
將簽署工作新增至流程
在 Android 應用程式的 YAML 管線中,設定下列 keystore-password、 key-alias和 key-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 匯出:
移至 [Xcode>喜好設定>帳戶]。
在左欄中,選取您的Apple ID。
在右側,選取您的個人或小組帳戶,然後選取 [ 管理憑證]。
Ctrl+選取您要匯出的憑證,然後從功能表中選取 [匯出憑證]。
輸入憑證名稱、儲存檔案的位置,以及保護憑證的密碼。
若要在 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@2 和 InstallAppleProvisioningProfile@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:您的簽署身分識別的完整名稱。 -
keychain:default以允許存取預設鑰匙圈。 -
keychainPassword:變數KEYCHAIN_PWD。 -
deleteCert:false在建置之間保留憑證。
- 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) 這個工作會參考signingIdentity和provisioningProfileUuid,並使用變數。 這些變數是由上述 安裝 Apple 憑證 和 安裝 Apple 佈建設定檔 工作自動為選取的憑證和佈建設定檔設定。
將下列程式碼新增至管線 Xcode 建置 (Xcode@5) 工作:
- task: Xcode@5
inputs:
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
管線建置代理程式現在可以安全地簽署和佈建您的應用程式,而不需要在建置電腦或建置管線中進行進一步的憑證或設定檔管理。