iOS-Jenkins-TestFlight自动打包流程

一、准备一台mac电脑
二、安装jenkins
打开终端运行:
brew install Jenkins
如果没有安装brew,请前往brew根据提示安装。
至少需要安装java1.8 ,如果没有安装会有提示,java
java安装完毕,链接 launchd 配置文件

ln -sfv/usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
launchctl load~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist  

启动jenkins
jenkins
打开Safari输入:http://localhost:8080/
就能看到jenkins已经运行起来了,如果你更换了端口就是你后来设置的端口。

接下来打开Jenkins后会让去一个填写password的页面如下图,存储password的地方就是图片上那行红色字体目录下,使用终端 cat + 红色字体路径就看到了


iOS-Jenkins-TestFlight自动打包流程_第1张图片
3499748-3744bb8265501e3d.png

然后将我们得到的password输入到“Administrator password“中,即可进入如下界面,接着安装一些建议的插件(左边的),请等待,并全部安装成功在进行下一步。


iOS-Jenkins-TestFlight自动打包流程_第2张图片
3499748-c330d4e3801bc125.png
iOS-Jenkins-TestFlight自动打包流程_第3张图片
3499748-92680cf279d6f69c.png

安装完成之后,输入账户密码,登陆。开始jenkins

二、cocoapod环境安装
项目中一般会使用cocoapod管理第三方库。这个时候如果使用jenkins自动打包,就需要安装好cocoapod环境

三、jenkins使用
1、安装插件
Keychains and Provisioning Profiles Management
Xcode integration
在系统管理-> 插件管理中搜索插件

iOS-Jenkins-TestFlight自动打包流程_第4张图片
3499748-6bda0d917eb1d719.png

配置Keychains and Provisioning Profiles Management


iOS-Jenkins-TestFlight自动打包流程_第5张图片
3499748-7be0865bd31c03e7.png

请先配置好p12和Provisioning Profiles文件
需要上传login.keychain文件,该文件获取方法,在终端中输入
cd ~/Library/Keychains
将login.keychain文件upload之后,会出现下图的界面,根据需要将证书添加进去即可,但是由于macOS10.12以及以后的系统里面没有login.keychain文件,只有login.keychain-db,可以复制出来删除-db,upload就好了。(上传keychain,路径用自己改名后的那个)

iOS-Jenkins-TestFlight自动打包流程_第6张图片
3499748-13e8ae3bc326ce0e.png

Code Signing Identity 需要自己去钥匙串找到对应证书的名字。

然后添加Provisioning Profiles,上传方法和上传login.keychain一样,去选择Provisioning Profiles文件,然后upload,然后结果如下图,蓝色框内的是固定格式的/Users/用户名/Library/MobileDevice/Provisioning Profiles


iOS-Jenkins-TestFlight自动打包流程_第7张图片
3499748-c748ac2b114c670e.png

配置好之后保存即可

3.开始配置任务
创建一个任务,自由风格的任务

General
创建一个自由风格的任务,然后在选择丢弃旧的构建,至于天数和保持的最大个数,按照自己的需求来就好


iOS-Jenkins-TestFlight自动打包流程_第8张图片
3499748-3ce2cf68feb817fc.jpeg

源码管理
接下来是源码管理,在Repository URL里面添加你的git地址,我这里添加的是http的,如果你的项目是使用的ssh的,那么就将git开头的地址填写上,然后点击Add添加你的git帐号,如果你的事ssh的,将ssh的密匙填写上,具体的自己百度一下就好咯,我就不多写了,结果如图


iOS-Jenkins-TestFlight自动打包流程_第9张图片
3499748-60eaaca3a34ac160.png

构建触发器
接下来是构建触发器,也就是什么时候触发自动打包我这里填写的是H 20 * * 这个意思就是H小时然后,后面跟着数字,在后面就是日月年,代表的我认为是每次都触发,也就是每天每月每年,但是Jenkins的时间不是绝对的,一般都是在随机在半点,也就是设置20点,大概会在20:30分左右会触发,如果需要两个时间,那么格式可以这样H 20,22 * * *结果如图

iOS-Jenkins-TestFlight自动打包流程_第10张图片
3499748-fb89921af6677d23.png

构建环境
在构建环境里面勾选Keychains and Code Signing Identities和Mobile Provisioning Profiles,Keychains and Code Signing Identities是打包需要的证书,Mobile Provisioning Profiles是打包需要的配置文件,都是可以自己选择的,我的如图


iOS-Jenkins-TestFlight自动打包流程_第11张图片
3499748-6ba2dc28a1b1abb7.png

构建环境第一次Code Signing Identity和PP文件可能有些不一样。应用,保存一下就可以了。

添加脚本

iOS-Jenkins-TestFlight自动打包流程_第12张图片
308319-aa003774ff94de9c.png

执行cocoapod脚本必须要在第一个

#bin/bsah - l

export LANG=en_US.UTF-8

export LANGUAGE=en_US.UTF-8

export LC_ALL=en_US.UTF-8

cd $WORKSPACE/工程名

/usr/local/bin/pod install --verbose --no-repo-update

执行打包并且上传到TestFlight脚本

# 工程名
TARGET_NAME="TARGET_NAME"

# 文件名前缀
APP_NAME="APP_NAME"

# 证书
CODE_SIGN_DISTRIBUTION="iPhone Distribution: "
# info.plist路径
project_infoplist_path="./${TARGET_NAME}/Info.plist"
# exportOptionPlist路径
exportOptionPlist_path="./${TARGET_NAME}/ExportOptions.plist"

#取版本号
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上传的ipa文件路径(我的路径是在桌面建了一个文件夹)
IPA_PATH="$HOME/Desktop/xiaodianpuCI/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

#下面2行是集成有Cocopods的用法
xcodebuild clean -configuration "Release" -alltargets
#导出archive文件
xcodebuild archive -workspace "${TARGET_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -configuration Release -archivePath ~/"Desktop/xiaodianpuCI/${IPANAME}.xcarchive" -quiet
#导出IPA包
xcodebuild -exportArchive -archivePath ~/"Desktop/xiaodianpuCI/${IPANAME}.xcarchive" -exportOptionsPlist "${exportOptionPlist_path}" -exportPath ~/"Desktop/xiaodianpuCI/${IPANAME}"


ALTOOLPATH=/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool
IPAPATH="${IPA_PATH}/工程名.ipa"
APPID="开发者账号"
APPPASSWORD="开发者密码"
#验证信息
"${ALTOOLPATH}" --validate-app -f "${IPAPATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml


#上传iTunesConnect
"${ALTOOLPATH}" --upload-app -f "${IPAPATH}" -u "${APPID}" -p "${APPPASSWORD}" --output-format xml

关于exportOptionsPlist
请参考exportOptionsPlist
把exportOptionsPlist添加到infoPlist同一层并push到git

关于

xxxxx has conflicting provisioning settings. xxxxx isautomatically signed, but code signing identity xxxxxxxxxxxxx has beenmanually specified.
Set the code signing identity value to "iPhone Developer" in the build settings editor, or switch to manual signing in the project editor.

问题的解决。
证书不能使用自动管理,需要手动。


iOS-Jenkins-TestFlight自动打包流程_第13张图片
企业微信20190306080250.png

感谢

你可能感兴趣的:(iOS-Jenkins-TestFlight自动打包流程)