使用Jenkins實現git代碼本地自動化打包

最近公司有個需求,想在遠程進行iOS打包,現在做到了可以在本地,因爲我調研時發現Xcodebuild不能跨系統運行,也就是說Xcodebuild不能安裝到除macOS之外的系統中,個人表示這非常坑,下面我就對近期的一些成果進行描述,現在的打包需要再本地進行,證書以及描述文件需要手動配置外,其他的一切都可以靈活變化,包括bundleid,version,build,icon,launch,接口域名,環信id,微信id等。

項目中必須有着個文件,用於打包的描述文件的指定(我的理解)

內容如下圖

接下了就是配置Jenkins了,網上有很多,說的也特別詳細,我這裏就不多贅述了。

然後就是配置變量

這是給項目留了個後門,當配置完成後,可以使用get方式的網絡請求:localhost:8080/job/項目名稱/buildWithParameters,攜帶需要改變的參數可以直接進行項目的構建打包操作

然後就是手動配置證書,這個我也不多說了,網上這種文章太多了。

接下來就是重中之重了, 直接上代碼

# 輸出bundleid,需要截取第一個.之後的數據段 
# mobieprovision_bundle=`/usr/libexec/PlistBuddy -c "Print Entitlements:application-identifier" $WORKSPACE/out.plist`
# mobieprovision_bundleId=${mobieprovision_bundle#*.}
# 模擬輸出 6P6VT3LT4F.com.YiChuang.workingchat, bundleid爲com.YiChuang.workingchat


echo ${APP_NAME}

key_path="/Users/liqunzhang/Library/Keychains/login.keychain"
/usr/bin/security unlock-keychain -p acd8521547 ${key_path}
/usr/bin/security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k acd8521547 ${key_path}
/usr/bin/security set-keychain-settings ${key_path}

# 從描述文件中獲取bundleid和UUID
security cms -D -i ~/Desktop/Profiles/WorkingChatDeistribution.mobileprovision > $WORKSPACE/out.plist
# 模擬輸出 06649dfa-c133-46b2-adba-be3355a85aab

# 輸出UUID
UUID=`/usr/libexec/PlistBuddy -c "Print UUID" $WORKSPACE/out.plist`

# 輸出bundleid
mobieprovision_bundle=`/usr/libexec/PlistBuddy -c "Print Entitlements:application-identifier" $WORKSPACE/out.plist`
mobieprovision_bundleId=${mobieprovision_bundle#*.}

# 證書
code_sign_developer="iPhone Developer: [email protected]"

# 包類型,分爲Debug和Release
type=${Type}

# 刪除plist 中的描述文件
/usr/libexec/PlistBuddy -c "Delete provisioningProfiles:com.YiChuang.workingchat" $WORKSPACE/ExportOptions${type}.plist 

# 添加plist 中的描述文件
/usr/libexec/PlistBuddy -c "Add provisioningProfiles:${mobieprovision_bundleId} string ${UUID}" $WORKSPACE/ExportOptions${type}.plist

# 修改bundle id
sed -i '' s/com.YiChuang.workingchat/${mobieprovision_bundleId}/g $WORKSPACE/WorkingChat.xcodeproj/project.pbxproj

# 修改APP名稱
/usr/libexec/PlistBuddy -c "Set :CFBundleDisplayName ${APP_NAME}" $WORKSPACE/WorkingChat/Info.plist

# 修改version版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${Version}" $WORKSPACE/WorkingChat/Info.plist

# 修改build版本號
 /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${Build}" $WORKSPACE/WorkingChat/Info.plist

# 修改域名
/usr/libexec/PlistBuddy -c "Set :BaseURL ${ApiHost}" $WORKSPACE/WorkingChat/Macro.plist

# 修改微信APPid
/usr/libexec/PlistBuddy -c "Set :WXAppId ${WXAppId}" $WORKSPACE/WorkingChat/Macro.plist

# 修改環信id
/usr/libexec/PlistBuddy -c "Set :EaseMobId ${EaseMobId}" $WORKSPACE/WorkingChat/Macro.plist

# 修改APPlogo
cd $WORKSPACE

curl -O --insecure ${Icon} 
IconStr=${Icon}
IconZipName=${IconStr##*/}
tar -zxvf $WORKSPACE/${IconZipName} -C $WORKSPACE

IconDir=$WORKSPACE/logo
for file in $IconDir/*; do
	cp -R ${file} $WORKSPACE/WorkingChat/Images.xcassets/AppIcon.appiconset
	LogoName=${file##*/}
	logoNameStr=${LogoName%.*}
	echo ${logoNameStr}
	if [[ ${logoNameStr} -eq "logo114-114" || ${logoNameStr} -eq "logo180-180" ]]; then
		cp -R ${file} $WORKSPACE/WorkingChat/Images.xcassets/Logo.imageset 
	fi
done

# 修改歡迎頁
curl -O --insecure ${Launch} 
LaunchStr=${Launch}
LaunchZipName=${LaunchStr##*/}
tar -zxvf $WORKSPACE/${LaunchZipName} -C $WORKSPACE

LaunchDir=$WORKSPACE/launch
for LaunchFile in $LaunchDir/*; do
	cp -R ${LaunchFile} $WORKSPACE/WorkingChat/Images.xcassets/LaunchImage.launchimage
done


# 安裝cocoapods
#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
pod install --verbose --no-repo-update

# 打包
xcodebuild clean -workspace WorkingChat.xcworkspace \
                 -scheme WorkingChat \

xcodebuild archive -workspace "$WORKSPACE/WorkingChat.xcworkspace" \
                   -scheme WorkingChat \
                   -archivePath "$WORKSPACE/build/${type}-iphoneos/WorkingChat.xcarchive" \
                   -configuration ${type} \

xcodebuild -exportArchive -archivePath "$WORKSPACE/build/${type}-iphoneos/WorkingChat.xcarchive" \
                          -exportPath "$WORKSPACE/build/WorkingChat_${type}" \
                          -exportOptionsPlist "$WORKSPACE/ExportOptions${type}.plist" \
                          -configuration ${type} \
                          -allowProvisioningUpdates

因爲我的工程是使用xcode10 創建的,無法使用Jenkins提供的xcode插件進行構建打包,只能使用shell方式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章