2014-09-03 31 views
5

我們使用詹金斯作爲我方的iOS團隊具有以下設置CI服務器:在OSX詹金斯的iOS生成使用證書和開發人員配置

  • 主服務器,而不是在OSX
  • 兩個從正在運行的任何工作運行我們的集成作業+ UI測試

目前所有簽約的身份和提供配置文件的應用程序被上傳每個從屬這使得政府可能有些乏味和添加新節點,以更加痛苦集羣。

要解決這一點,我們已經研究過使用證書插件與開發者配置文件,並導入配置文件作爲所有iOS作業的第一生成步驟,但都面臨着對主要問題:

  • 進口開發商配置文件似乎第一次工作(至少對於創建密鑰鏈條目),但即使開發人員配置文件包含目標所需的所有配置配置文件,作業也會失敗並顯示「沒有匹配的配置文件」錯誤。
  • 在同樣的工作第二次運行總是失敗,一個「鑰匙扣已經存在」錯誤

我們已經嘗試了第二個問題加一個外殼生成步驟去除特定鑰匙扣一些變通,但仍然面臨着第一個錯誤。如果我們手動將配置文件安裝在構建過程的從屬設備上,但這會破壞使用憑據插件的目的。

你們認爲什麼?

回答

6

我認爲在導入之前,憑證插件的最新版本現在首先使用匹配的名稱刪除任何現有的鑰匙串,如下面的日誌輸出所示。

$ security delete-keychain jenkins-MyAppsBuildName-iOS 
$ security create-keychain -p ******** jenkins-MyAppsBuildName-iOS 
$ security unlock-keychain -p ******** jenkins-MyAppsBuildName-iOS 

由於這個事實,我認爲你不會再有第二次運行時出現重複鑰匙串錯誤的問題。

只要找不到與供應配置文件有關的問題,請在execute shell命令中添加以下行並在jenkins上運行構建。

security list-keychains 

看看控制檯爲特定的構建,你應該看到所有目前在外殼的範圍鑰匙扣的列表。

如果您沒有看到「jenkins-MyAppsBuildName-iOS」作爲列出的鑰匙串,這就是爲什麼您有簽名問題。由於鑰匙串沒有列出,它甚至從來沒有被搜索過,找到正確的簽名身份/配置文件。

解決方案:警告:這是哈克

我不是100%肯定,爲什麼發生這種情況,但是從其他線程這似乎是一個權限問題。

幸運的是,有一個簡單的解決方法。

在執行shell命令添加以下內容:

security list-keychain -s jenkins-${JOB_NAME} 

這將重置鑰匙串列表,包括成功建設項目所需的鑰匙串。

要驗證這現在列出正確的鑰匙鏈,你可以添加以下行到shell命令:

security list-keychain 
security list-keychain -s jenkins-${JOB_NAME} 
security list-keychain 

現在與第二列表鑰匙扣命令比較第一個列表,鑰匙扣命令的輸出在控制檯。確保jenkin的構建鑰匙串在第二個安全列表 - 鑰匙串輸出後列出。

警告:這將永久更改系統上的鑰匙串列表,因此在構建完成後重置鑰匙串可能是一個好主意。您可以通過在Jenkin的「系統配置」部分的xcode配置中設置默認的期望鑰匙串值來實現此目的。完成後,請確保在Jenkins作業頁面內的構建環境下勾選「在全局配置中定義的構建過程後還原OS X鑰匙串」複選框。

附加信息:在我的例子中,我設定的鑰匙串名單隻包括從詹金斯產生的鑰匙扣,但你可以決定還包括標準體系和登錄鑰匙串的通過修改該行,例如:

security list-keychain -s jenkins-${JOB_NAME} login.keychain System.keychain 

關鍵詞:詹金斯,iOS設備,從設備,節點,Xcode中,插件,憑證,.developerprofile

+0

只是有一點補充:如果你的工作名稱有像我做的空間(這通常是一個壞主意),你會需要將鑰匙串名稱放在引號中,例如'security list-keychain -s「jenkins - $ {JOB_NAME}」' – zbu 2015-08-05 07:13:41