前言
在利用Jenkins進行iOS持續(xù)集成的時候衰伯,有時候需要用開發(fā)證書打包、有時候需要企業(yè)證書打包积蔚。
我們在平時開發(fā)中一般都采用開發(fā)證書意鲸,會在git 中和代碼一起push同步,,因此平時用開發(fā)證書打包的時候尽爆,不用進行修改,直接使用git拉下來的證書和bundle ID怎顾。而在需要企業(yè)證書打包的時候需要切換到企業(yè)證書,而在持續(xù)集成中講究自動化漱贱,所以一個方案能夠?qū)崿F(xiàn)在構建之前進行自動化切換切換到企業(yè)證書槐雾,而不是手動更換證書。
在網(wǎng)上查詢了一些相關經(jīng)驗幅狮,并沒有找到相關可適用的實現(xiàn)方案募强,因此我根據(jù)自己的想法實現(xiàn)了這個自動化方案。
正文
首先我們需要在Jenkins兩個項目Job崇摄,一個用于開發(fā)證書打包擎值,一個用于企業(yè)證書打包。
負責開發(fā)證書打包的項目job只需要用git上的開發(fā)證書和相關配置即可(當然要保證git 上的配置是正確的)
而負責企業(yè)證書打包的項目job就需要在構建之前進行證書切換和相關配置修改的步驟逐抑。
切換證書更改是在project.pbxproj
文件中鸠儿,因此我們主要是通過更改project.pbxproj
來切換證書。
而實現(xiàn)自動化修改證書厕氨、配置有兩個方案:
方案一 :
備份一份企業(yè)證書打包時的project.pbxproj
文件进每,在Jenkins構建之前,覆蓋掉更新下來的工程代碼中的project.pbxproj
文件命斧,這樣便切換了相關證書配置田晚。
具體步驟:
1、備份project.pbxproj
首先更新代碼冯丙,然后在XCode上手動修改bunle ID肉瓦,證書等,然后進行一次手動Archive胃惜,保證Archive成功后泞莉,打開工程目錄,選中后綴為.xcodeproj
的工程文件船殉,右擊, 選擇“顯示包內(nèi)容”鲫趁,找到project.pbxproj
,將其復制利虫,找一個工程外的文件夾備份起來挨厚。
2堡僻、構建前修改project.pbxproj
如圖,在Jenkins的“構建”步驟中加入【Execute Shell】疫剃,一定要在【XCode】之前钉疫。
用cp
命令將備份的project.pbxproj
覆蓋工程中的project.pbxproj
。
這樣就完成了證書修改巢价。
該方案的優(yōu)點是操作簡單快捷牲阁,而缺點也很明顯,適用性不強壤躲,當project.pbxproj
的相關配置發(fā)生變化時就必須重新再手動整理一下project.pbxproj
方案二:
通過【Execute Shell】運行腳本直接更改project.pbxproj
文件內(nèi)容城菊,來更好證書配置。
具體步驟:
1碉克、使用Git 查詢project.pbxproj
更改內(nèi)容
跟方案一一樣凌唬,先更新代碼,手動修改切換到企業(yè)證書配置漏麦,接著通過git diff
查詢project.pbxproj
更改的內(nèi)容客税。
2、完成修改配置的Python腳本
編寫一份Python腳本撕贞,用于完成project.pbxproj
修改霎挟。
Python 腳本如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import sys
def changeStr(filePath,old_str,new_str) :
backup_path = "%s.backup" % filePath
file = open(filePath, "r")
new_file = open(backup_path, "w")
for line in file :
if old_str in line :
print("-: " + line)
line = line.replace(old_str,new_str)
print("+: " + line)
new_file.write(line)
os.remove(filePath)
os.rename(backup_path,filePath)
# *********** 修改證書配置 **********
pbxprojPath = "`project.pbxproj的路徑"
#DevelopmentTeam
changeStr(pbxprojPath,"DevelopmentTeam = 修改前的內(nèi)容","DevelopmentTeam = 修改后的內(nèi)容")
#CODE_SIGN_IDENTITY
changeStr(pbxprojPath,"\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"修改前的內(nèi)容(CH5GWHU3G5)\"","\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \" 修改后的內(nèi)容\"")
...
#這里不一一列舉了,只要通過changeStr方法修改git diff查詢到的所有更改內(nèi)容
3麻掸、執(zhí)行腳本
在【構建】的【Xcode】步驟加入【Execute shell】,執(zhí)行
python 腳本路徑 project.pbxproj所在文件夾的路徑
這樣每次構建的時候都能夠自動修改XCode上的證書配置赐纱。
后語
要注意Jenkins 上的XCode證書配置也要選擇正確的企業(yè)證書脊奋。