iOS持續(xù)集成-Jenkins-自動(dòng)化切換企業(yè)證書(shū)

前言

在利用Jenkins進(jìn)行iOS持續(xù)集成的時(shí)候,有時(shí)候需要用開(kāi)發(fā)證書(shū)打包、有時(shí)候需要企業(yè)證書(shū)打包。
我們?cè)谄綍r(shí)開(kāi)發(fā)中一般都采用開(kāi)發(fā)證書(shū),會(huì)在git 中和代碼一起push同步,,因此平時(shí)用開(kāi)發(fā)證書(shū)打包的時(shí)候,不用進(jìn)行修改,直接使用git拉下來(lái)的證書(shū)和bundle ID。而在需要企業(yè)證書(shū)打包的時(shí)候需要切換到企業(yè)證書(shū),而在持續(xù)集成中講究自動(dòng)化,所以一個(gè)方案能夠?qū)崿F(xiàn)在構(gòu)建之前進(jìn)行自動(dòng)化切換切換到企業(yè)證書(shū),而不是手動(dòng)更換證書(shū)。
在網(wǎng)上查詢了一些相關(guān)經(jīng)驗(yàn),并沒(méi)有找到相關(guān)可適用的實(shí)現(xiàn)方案,因此我根據(jù)自己的想法實(shí)現(xiàn)了這個(gè)自動(dòng)化方案。

正文

首先我們需要在Jenkins兩個(gè)項(xiàng)目Job,一個(gè)用于開(kāi)發(fā)證書(shū)打包,一個(gè)用于企業(yè)證書(shū)打包。
負(fù)責(zé)開(kāi)發(fā)證書(shū)打包的項(xiàng)目job只需要用git上的開(kāi)發(fā)證書(shū)和相關(guān)配置即可(當(dāng)然要保證git 上的配置是正確的)
而負(fù)責(zé)企業(yè)證書(shū)打包的項(xiàng)目job就需要在構(gòu)建之前進(jìn)行證書(shū)切換和相關(guān)配置修改的步驟。
切換證書(shū)更改是在project.pbxproj文件中,因此我們主要是通過(guò)更改project.pbxproj來(lái)切換證書(shū)。
而實(shí)現(xiàn)自動(dòng)化修改證書(shū)、配置有兩個(gè)方案:

方案一 :

備份一份企業(yè)證書(shū)打包時(shí)的project.pbxproj文件,在Jenkins構(gòu)建之前,覆蓋掉更新下來(lái)的工程代碼中的project.pbxproj文件,這樣便切換了相關(guān)證書(shū)配置。

具體步驟:
1、備份project.pbxproj

首先更新代碼,然后在XCode上手動(dòng)修改bunle ID,證書(shū)等,然后進(jìn)行一次手動(dòng)Archive,保證Archive成功后,打開(kāi)工程目錄,選中后綴為.xcodeproj的工程文件,右擊, 選擇“顯示包內(nèi)容”,找到project.pbxproj,將其復(fù)制,找一個(gè)工程外的文件夾備份起來(lái)。

2、構(gòu)建前修改project.pbxproj

如圖,在Jenkins的“構(gòu)建”步驟中加入【Execute Shell】,一定要在【XCode】之前。
cp命令將備份的project.pbxproj覆蓋工程中的project.pbxproj。
這樣就完成了證書(shū)修改。

該方案的優(yōu)點(diǎn)是操作簡(jiǎn)單快捷,而缺點(diǎn)也很明顯,適用性不強(qiáng),當(dāng)project.pbxproj的相關(guān)配置發(fā)生變化時(shí)就必須重新再手動(dòng)整理一下project.pbxproj

方案二:

通過(guò)【Execute Shell】運(yùn)行腳本直接更改project.pbxproj文件內(nèi)容,來(lái)更好證書(shū)配置。

具體步驟:
1、使用Git 查詢project.pbxproj更改內(nèi)容

跟方案一一樣,先更新代碼,手動(dòng)修改切換到企業(yè)證書(shū)配置,接著通過(guò)git diff查詢project.pbxproj更改的內(nèi)容。

2、完成修改配置的Python腳本

編寫(xiě)一份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)


# ***********  修改證書(shū)配置 **********
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)容\"")
...
#這里不一一列舉了,只要通過(guò)changeStr方法修改git diff查詢到的所有更改內(nèi)容
3、執(zhí)行腳本

在【構(gòu)建】的【Xcode】步驟加入【Execute shell】,執(zhí)行
python 腳本路徑 project.pbxproj所在文件夾的路徑


這樣每次構(gòu)建的時(shí)候都能夠自動(dòng)修改XCode上的證書(shū)配置。

后語(yǔ)

要注意Jenkins 上的XCode證書(shū)配置也要選擇正確的企業(yè)證書(shū)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容