仅需一键或配置时间 就可以自动打包通知测试童鞋,短信通知,公众号通知,邮件通知等等~
一、jenkins安装&配置
需要java环境,自行安装
JDK
java -version
1、安装
jenkins官网
找个稳定版的下载安装,一路下一步就行
安装完之后会自动打开
http://localhost:8080
之后
打开/Users/Shared/Jenkins/Home/secrets/initialAdminPassword 拷贝密码,如果没有打开读权限设置就好了
设置完之后可以更改密码,或保存在浏览器吧,忘记了就去上面的路径去找密码
2、配置
之后进入到系统管理-> 管理插件,按需安装
Xcode integration
构建的时候可以用Xcode
Keychains and Provisioning Profiles Management
管理Keychainsd
GitLab Plugin
如果用GitLab需安装
Gitlan Hook Plugin
如果用GitLab需安装
Subversion Plug-in
SVN插件
Email Extension Plugin
发送邮件插件
Upload to pgyer
上传蒲公英
fir.im Jenkins 插件使用方法
jenkins证书配置
打开钥匙串把用到证书的权限开放到全部程序(在钥匙串访问去改)
~/Library/Keychains 里面的login.keychain
和login.keychain-db
拷贝到
/Users/Shared/Jenkins/Library/Keychains下(没有文件夹就创建一个)
把~/Library/MobileDevice里的内容拷贝到
/Users/Shared/Jenkins/Library/MobileDevice下(没有文件夹就创建一个)
需安装插件Keychains and Provisioning Profiles Management
进入系统管理,进入Keychains and Provisioning Profiles Management,
3、SSH
去Jenkins->Credentials->System-> Global credentials配置SSH
一看就懂了,生成公钥方式自行百度
4、构建项目配置
新建一个任务名称随便起
之后配置
1、General
随便起就行
2、源码管理
3、构建触发器
这里的效果是,何时去打包,自行配置就行了
Poll SCM 轮询的方法,输入H/5 * * * *表示5分钟check一次SVN/Git的路径,如果源码有变化就构建
4、构建
这了按需选择了,Xcode需要安装Xcode integration
插件 Upload to pgyer需要Upload to pgyer
插件
如果用Xcode 9 之后的版本会有个问题,下面QA会讲到
选择Xcode的话感觉配置比较麻烦错误较多,不在叙述
也可以选择用fastlane gym --export_method ad-hoc --output_name ${IPANAME}
需要安装fastlane,这里我遇到一个小问题does not contain an Xcode project or workspace,解决方案“构建 ”--“ xcode” -- “Advanced Xcode build options” -- “Xcode Project Directory”,这里填写你的项目工程所在目录就可以了
参考脚本
#!/usr/bin/env bash
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
rm -rf /Users/Shared/Jenkins/Library/Developer/Xcode/DerivedData
******隐藏代码******
fastlane gym -w ${buildProjectDir}lazyaudio.xcworkspace --clean -o ${buildDir} -s lazyaudio -n "${buildIpaName}.ipa" -q ${buildConfigStr} --export_method ${exportMethod} -a
******隐藏代码******
lftp << EOF
open ftp://xxxxxx:[email protected]
mkdir ${ftpPath}
cd ${ftpPath}
lcd ${ftpIpaPath}
mput *
close
bye
EOF
我这里用 xcodebuild方式打包
xcodebuild官方文档
选择Execute shell
添加脚本
记得把路径改了
按需要更改configuration Release
/Debug
之前的时候也可以去清理项目
xcodebuild \
-workspace "${project_name}.xcworkspace" \
-scheme "${scheme_name}" \
-configuration "${development_mode}" \
clean
如果工程用到pod了的话需要 - workspace
否则 - project
生成archive包
xcodebuild \
archive -workspace "/Users/Shared/Jenkins/Home/workspace/工程名/xxx/xxx.xcworkspace" \
-scheme "xxx" \
-configuration "Debug" \
-archivePath "/Users/Shared/Jenkins/Home/workspace/工程名/build/xxx.xcarchive" \
ExportOptions.plist如果不会配置的话,手动打包之后导出,放到一个不会变的地方
生成ipa包
xcodebuild -exportArchive -archivePath "/Users/Shared/Jenkins/Home/workspace/工程名/build/xxx.xcarchive" \
-exportPath "/Users/Shared/Jenkins/Home/workspace/工程名/build" \
-configuration "Debug" \
-exportOptionsPlist "/Users/Shared/Jenkins/Home/workspace/工程名/ExportOptions.plist" \
-allowProvisioningUpdates \
之后需要上传蒲公英或者fir,添加响应的插件,或脚本就行,去相应的官网去查
pgyer脚本官方文档
curl -F "file=@路径.ipa" \
-F "uKey=XXX" \
-F "_api_key=XXX" \
-F "updateDescription=升级描述可以不写" \
https://www.pgyer.com/apiv1/app/upload
或者pgyer插件
fir脚本官方文档
这里就配置完事了,返回点击立即构建,等着吧,可能会遇到各种各样的问题参见QA
二、Other
2、Fastlane安装
Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android自动化打包发布等工作,节约大量的时间
下面是安装过程
1、检查Ruby版本,需要2.0及以上版本
ruby -v
2、需要注意的是需要将gem的source改为https://gems.ruby-china.org/
gem sources
3、检查Xcode命令行工具是否安装
xcode-select --install
4、安装Fastlane
sudo gem install fastlane --verbose
5、检查Fastlane是否安装正确
fastlane --version
3、Mac 下执行脚本
直接拖然后回车就行
如果报Permission denied,就是没有权限
chmod 777 XX.sh
然后再次执行就行
4、
获取UDID
三、遇到的问题
这里有一些其他人总结的QA
https://www.jianshu.com/p/8b2fc2da0466
Q1、
error: exportArchive: "APPNAME.app" requires a provisioning profile with the Push Notifications feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""APPNAME.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="APPNAME.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **
A1、
因为 Xcode 9 默认不允许访问钥匙串的内容,必须要设置 allowProvisioningUpdates 才会允许,但是由于 Xcode integration 插件封闭,并不能对其进行修改加上这个属性,所以决定使用 Shell 脚本代替插件。
Q2、
User defaults from command line:
IDEArchivePathOverride = /Users/Shared/Jenkins/Home/workspace/Test/build/RepaymentCreditCard.xcarchive
Build settings from command line:
SDKROOT = iphoneos11.2
A2、
脚本中去掉-project APPNAME.xcodeproj -sdk iphoneos
Q3、fastlane: command not found
A3、
这个情况一般是由于 jenkins 没有设置正确的 $PATH 环境变量导致的。正确设置的方法为:
在命令行下执行 echo $PATH
,记录下输出的结果
在 jenkins中系统管理-系统设置中
,找到 环境变量(Environment variables)
在 key 中填写 PATH
,在 value 中填写第一步中输出的结果
保存即可。
附录
xcodebuild + xcrun
# 工程名
APP_NAME="YourProjectName"
# 证书
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Shanghai ******* Co., Ltd."
# info.plist路径
project_infoplist_path="./${APP_NAME}/Info.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/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
//下面2行是没有Cocopods的用法
echo "=================clean================="
xcodebuild -target "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"
使用gym自动化打包
#计时
SECONDS=0
#假设脚本放置在与项目相同的路径下
project_path=$(pwd)
#取当前时间字符串添加到文件结尾
now=$(date +"%Y_%m_%d_%H_%M_%S")
#指定项目的scheme名称
scheme="DemoScheme"
#指定要打包的配置名
configuration="Adhoc"
#指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的method参数
export_method='ad-hoc'
#指定项目地址
workspace_path="$project_path/Demo.xcworkspace"
#指定输出路径
output_path="/Users/your_username/Documents/"
#指定输出归档文件地址
archive_path="$output_path/Demo_${now}.xcarchive"
#指定输出ipa地址
ipa_path="$output_path/Demo_${now}.ipa"
#指定输出ipa名称
ipa_name="Demo_${now}.ipa"
#获取执行命令时的commit message
commit_msg="$1"
#输出设定的变量值
echo "===workspace path: ${workspace_path}==="
echo "===archive path: ${archive_path}==="
echo "===ipa path: ${ipa_path}==="
echo "===export method: ${export_method}==="
echo "===commit msg: $1==="
#先清空前一次build
gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${output_path} --output_name ${ipa_name}
#输出总用时
echo "===Finished. Total time: ${SECONDS}s==="
部分参考
https://www.jianshu.com/p/41ecb06ae95f
https://www.jianshu.com/p/c7b951b9b4f2
https://www.jianshu.com/p/9cb3d8c8c78d
https://www.jianshu.com/p/1268118d490f
https://www.jianshu.com/p/836579dd4837