准备工作
1.jenkins官网下载、安装好jenkins,插件选择新手推荐安装,安装完后再安装个Xcode intergram插件用来打包.
2.如果使用的是ssh,提前准备好ssh秘钥,放到/Users/iosmac/.ssh下,代码量比较大,打包下载代码的时候可能会出现超时的情况,需要多试几下。
创建项目,添加构建过程:
1.新建一个任务,命名好,选择第一个构建一个自由风格的软件。
141669963613_.pic.jpg
2.添加一些打包前用到的参数,branch_name(打包分支名称)、baletu_configuration(打包环境)、ipa_type(ipa包的类型)、app_version(app的版本号)、app_build_version(app内版本号)等自己下面脚本需要用到的参数,注意参数名和下面用到的药一致,别写错了。
151669963671_.pic.jpg
161669963722_.pic.jpg
421670231411_.pic.jpg
3.准备好参数后,配置git分之,以及访问的账号密码,后面appstore的账号密码也在这次添加凭证的时候添加了,后面直接选就可以,打包的分支也改成我们上面输入的要打包的分支$branch_name
181669963934_.pic.jpg
191669963995_.pic.jpg
4.构建环境中,配置需要上传appstore用的账号密码,在步骤3里已经添加过凭证了。
201669964134_.pic.jpg
5.执行脚本,上面如果填写了版本号和内版本号用脚本写到项目中的plist文件中去,项目中展示git分支,也是用脚本把获取到的git分之写到plist文件中。
211669964522_.pic.jpg
6.BuildSteps中添加我们安装过的Xcode插件,配置打包流程需要的参数,依次填写teamID,以及上面选择的打包环境、ipa_type,以及要打包项目的scheme,打包出来的ipa名称、输出目录、bitCode等选项。
221669964566_.pic.jpg
231669965003_.pic.jpg
241669965284_.pic.jpg
7.打包完需要签名,配置签名环境。
251669965378_.pic.jpg
8.配置完签名需要再 Advanced Xcode build options里配置下workspace的名字,不然如果是cocopods管理的项目直接编译project会报找不到cocopods导入的库的头文件。
301669973693_.pic.jpg
311669973707_.pic.jpg
9.打包签名完成,判断是测试包还是发布包,上传蒲公英或则appstore
261669965454_.pic.jpg
10.上传bugly(最新的jenkins java环境是11 bugly的jar包要求环境是java8,会报错误: 尝试打开文件/Users/iosmac/Desktop/baletu_bugly_dsym_upload/buglyqq-upload-symbol.jar时出现意外错误,需要设置kenkins的java环境是java8,如下图)
5711677577059_.pic.jpg
641670556839_.pic.jpg
!
注意:
有的项目工程比较大,拉去git超时,拉不下来。
1.再git配置下Additional Behaviours添加额外操作,设置超时时间,以及是否是浅克隆。
381670224493_.pic.jpg
2.如果是用户名密码拉取代码的,可以改成ssh访问,可以提高速度。凭证设置成ssh,填入账号、以及把git ssh私钥直接复制过来填写。
391670224537_.pic.jpg
401670224701_.pic.jpg
3.如果以上都不行,可以创建任务的时候选择流水线的方式来创建,也可以设置超时时间。流水线语法不会写,可以点击流水线语法
来选择对应的插件,填写完内容后,转换成流水线语法,在复制过来。(选择git插件(git) 转换完,选择验证插件(bind creditails to variables),选择xcode插件,缺啥流程选啥流程,shell命令转换)
钥匙串的路径:
${HOME}/Library/Keychains/login.keychain-db
下面是用到的脚本:
#设置版本号,写到plist文件中
echo "set marketing version";
echo $baletu_version;
if [ $baletu_version ]
then
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $baletu_version" ${WORKSPACE}/BlueMobiProject/Baletu-Info.plist
fi
echo "set build version";
echo $baletu_build_version;
if [ $baletu_build_version ]
then
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $baletu_build_version" ${WORKSPACE}/BlueMobiProject/Baletu-Info.plist
fi
#上传蒲公英 钉钉通知结果
##json解析函数
# $1 $2 json lable
function jsonParse() {
JSON_CONTENT=$1
KEY='"'$2'":'
echo ${JSON_CONTENT} | awk -F ${KEY} '{print $2}' | awk -F '"' '{print $2}'
}
##删除斜杠'\'
function trimSlash() {
TEXT=$1
echo ${TEXT//'\'/''}
}
if [[ $ipa_type = "ad-hoc" ]] || [[ $ipa_type = "development" ]]
then
ipaPath=${WORKSPACE}/build/${baletu_configuration}-iphoneos/${BUILD_NUMBER}/Baletu.ipa
RESPONSE=$(curl -F "file=@$ipaPath" -F '_api_key=b6aff1e86753ab7320d45df8ff00587e' https://www.pgyer.com/apiv2/app/upload)
if [ $? -eq 0 ];then
echo "=============提交蒲公英成功 ============="
appQRCodeURL=$(trimSlash $(jsonParse "${RESPONSE}" "buildQRCodeURL"))
appVersion=$(jsonParse "${RESPONSE}" "buildVersion")
appBuildVersion=$(jsonParse "${RESPONSE}" "buildBuildVersion")
#通知到钉钉群 将xxxxxxxx替换为真实access_token `title`需要包含关键词
curl 'https://oapi.dingtalk.com/robot/send?access_token=adb9a2b29410ead1fe7cdb6fe1966c593dc98bf3714db64e4aa04635998a0927' \
-H 'Content-Type: application/json' \
-d '
{
"msgtype": "markdown",
"markdown": {
"title":"打包通知",
"text":" \n **项目:** '"租客版"' \n **版本:** '"$appVersion"' (build '"$appBuildVersion"') \n **环境:** '"$ipa_type"' \n **分支:** '"$branch_name"' "
}
}'
else
echo "=============提交蒲公英失败 ============="
fi
fi
#上传appstore
if [ $ipa_type = "app-store" ]
then
xcrun altool --upload-app -f "${WORKSPACE}/build/${baletu_configuration}-iphoneos/${BUILD_NUMBER}/Baletu.ipa" -u ${appstore_user_name} -p ${appstore_password}
fi
#添加bin/bash/ 处理获取plist文件版本号导致不往下走的,jenkins默认的指令出错停止执行,使用bin/bash指令,还可以继续往下执行
#!/bin/bash
#upload renter dysm
if [ $ipa_type = "app-store" ]
then
APP_ID="8fc434c000"
APP_KEY="ad65ceab-0c93-4fa6-ade1-77b74e4fceb2"
APP_BUNDLEID=com.Bateu.wanjian
PRODUCT_NAME=Baletu
PLIST_FILE="${WORKSPACE}/BlueMobiProject/Baletu-Info.plist"
RELEATIVE_PATH=${WORKSPACE}/build/${baletu_configuration}-iphoneos/
APP_VERSION=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" ${PLIST_FILE}`
echo "LBLog read plist appversion is $APP_VERSION"
readPlistVersionFailed=$(echo $APP_VERSION | grep "(MARKETING_VERSION)")
if [[ "$readPlistVersionFailed" != "" ]]; then
echo "LBLog is MARKETING_VERSION, read Build plist version"
DISTRIBUTION_PLIST_PATH="$RELEATIVE_PATH/${BUILD_NUMBER}/DistributionSummary.plist"
APP_VERSION_KEY_PATH="Baletu.ipa:0:versionNumber"
APP_VERSION=`/usr/libexec/PlistBuddy -c "Print :$APP_VERSION_KEY_PATH" ${DISTRIBUTION_PLIST_PATH}`
fi
echo "upload ipa to app store"
echo "upload exportArchive ${exportArchive}"
echo "upload exportPath ${exportPath}"
echo "APP_BUNDLEID is ${APP_BUNDLEID} APP_VERSION IS ${APP_VERSION}"
ARCHIVE_XCARCHIVE_PATH=${RELEATIVE_PATH}/${PRODUCT_NAME}.xcarchive
DSYM_PATH=${ARCHIVE_XCARCHIVE_PATH}/dSYMs/${PRODUCT_NAME}.app.dSYM
BACK_UP_DSYM_FOLDER_PATH=${RELEATIVE_PATH}/${BUILD_NUMBER}/UPLOAD_BUGLY_DYSM_BACKUP
BACK_UP_DSYM_FILE_PATH=${RELEATIVE_PATH}/${BUILD_NUMBER}/UPLOAD_BUGLY_DYSM_BACKUP/${PRODUCT_NAME}-dSYM.dSYM
LOG_FILE_PATH=${RELEATIVE_PATH}/$(date "+%Y-%m-%d %H:%M:%S").txt
UPLOAD_JAR_FILE_PATH=${HOME}/Desktop/baletu_bugly_dsym_upload/buglyqq-upload-symbol.jar
# 创建log日志文件
if [ ! -f "${LOG_FILE_PATH}" ] # 判断日志文件是否存在
then
touch $LOG_FILE_PATH
fi
#没有备份的文件夹路
if [ ! -d "${BACK_UP_DSYM_FOLDER_PATH}" ] #判断项目文件夹是否存在
then
mkdir "${BACK_UP_DSYM_FOLDER_PATH}"
fi
# 复制符号表到备份文件夹下
echo "start backup dysm file"
cp -r "${DSYM_PATH}" "${BACK_UP_DSYM_FILE_PATH}"
java -jar ${UPLOAD_JAR_FILE_PATH} -appid $APP_ID -appkey $APP_KEY -bundleid $APP_BUNDLEID -version $APP_VERSION -platform IOS -inputSymbol $DSYM_PATH 2>&1 | tee -ai $LOG_FILE_PATH
fi
使用命令行来备份项目和使用命令行来根据备份项目创建一个新的项目(参考:https://blog.csdn.net/wangxiaoyu_m/article/details/119800531 )
先Jenkins 系统管理-》工具和动作-》Jenkins命令接口-》下载jenkins-cli.jar,下载完成后执行jar包备份项目
java -jar jenkins-cli.jar -s 【jenkins访问路径,即登录jenkins后的路径】 -auth 【jenkins登录账号】:【jenkins登录密码】 get-job 【job名称】> 【job名称】.xml
#备份一个项目
java -jar jenkins-cli.jar -s http://192.168.83.159:8080 -auth liubin:liubin123 get-job landlord_ios> backup_landlord_ios.xml
#根据备份创建一个项目
java -jar jenkins-cli.jar -s http://192.168.83.159:8080 -auth liubin:liubin123 create-job test_backup_project < backup_landlord_ios.xml
备份文件:
https://www.aliyundrive.com/drive/legacy/folder/63903a410181509b45b9452fa4fc82addeafbad3
上传bugly,项目中上传的方式
5081670394325_.pic.jpg
上传脚本文件在:
https://www.aliyundrive.com/drive/folder/63903a410181509b45b9452fa4fc82addeafbad3
xcrun atool上传appstore的api文档地址:
https://help.apple.com/asc/appsaltool/#/apdATD1E53-D1E1A1303-D1E53A1126
发钉钉群消息接入文档:
https://cloud.tencent.com/developer/article/2057229
jenkins上传蒲公英插件方式:
https://github.com/jenkinsci/upload-pgyer-plugin/blob/master/README_cn.md









网友评论