安装jenkins
未装过homebrew的参照homebrew主页
使用 homebrew 安装jdk
$brew install Caskroom/cask/java
使用 homebrew 安装 jenkins
$brew install jenkins
安装fir上传命令
$ gem install fir-cli
完成后就可以直接打开http://localhost:8080/如图
jenkins设置
1.安装jenkins插件
点击系统管理->管理插件,在插件管理里面下载几个比较有用的插件,当然可以根据自己的需求增减。
然后等待安装完成就是了,本次用到的插件有
Email Extension Plugin:用于发送邮件,功能比自带的强大
Next Build Number Plugin:修改下次编译的build号
2.新建Item
返回Jenkins主页,点击左上角的新建按钮开始新建一个Item
输入Item的名称,选择构建一个自由风格的软件项目
在源码管理里面选择Subversion,然后配置svn信息
配置参数化内容,如图,可以用${name}
在shell命令中取出对应的值
本次打包中添加了两个参数fir_description、host_distribution
,用来表示发布到fir时的更新日志和打包的host环境
在构建步骤中添加Execute shell,我们通过shell命令进行编译,打包,上传
我的构建步骤分了三步,都在用shell命令完成,当然你也可以写好shell文件放在本地直接执行本地的文件
1.设置build号为jenkins的build号、编译、打包生成ipa文件
2.更新到svn
3.上传到fir
详细代码见文章底部
配置邮件
所有的配置设置完后点应用,再点保存,至此我们已经完全配置完这个item
总结遇到的问题
1.证书找不到
参照http://www.faceye.net/search/81369.html
2.fir上传的描述不能识别中文
原因是shell命令中会使中文乱码,在shell命令前加上
export LANG="en_US.UTF-8"
附shell命令
需要在Xcode中添加In_house_out、In_house_in两个配置项目用于表示内网和外网环境的inhouse包,如果你不需要多个环境的包就不用做参数化配置了
打包命令
#变量
TARGET_NAME="xxxxx"
APPDISPLAY_NAME="xxxxx"
CODE_SIGN="iPhone Distribution: xxxxxxxxxxxx., Ltd."
BUILD_DIR="${WORKSPACE}/build"
IPA_DIR="${WORKSPACE}/ipa"
#环境变量的更改
if ${host_distribution}; then
BUILD_CONFIG="In_house_out"
else
BUILD_CONFIG="In_house_in"
fi
#首先,清除build记录:
xcodebuild clean -workspace $TARGET_NAME.xcworkspace -scheme $TARGET_NAME -configuration $BUILD_CONFIG
#设置build号
xcrun agvtool new-version -all ${BUILD_NUMBER}
#其次,执行build:
xcodebuild -workspace $TARGET_NAME.xcworkspace -scheme $TARGET_NAME -configuration $BUILD_CONFIG build BUILD_DIR=$BUILD_DIR BUILD_ROOT="${WORKSPACE}/buildRoot" CODE_SIGN_IDENTITY="$CODE_SIGN"
#创建输出目录
mkdir -p $IPA_DIR
cp -f -r $BUILD_DIR/$BUILD_CONFIG-iphoneos/$TARGET_NAME.app.dSYM $IPA_DIR
#最后,将app打包为ipa:
/usr/bin/xcrun -sdk iphoneos PackageApplication -v $BUILD_DIR/$BUILD_CONFIG-iphoneos/$APPDISPLAY_NAME.app -o ${WORKSPACE}/ipa/$APPDISPLAY_NAME${BUILD_NUMBER}.ipa
更新svn命令
#更新到svn
svn commit -m "jenkins auto packaging and chang Bundle version to ${BUILD_NUMBER}"
上传到fir命令
export LANG="en_US.UTF-8"
#环境变量的更改
if ${host_distribution}; then
DESCRIPTION="网络环境:正式环境
${fir_description}"
else
DESCRIPTION="网络环境:测试环境
${fir_description}"
fi
#上传到fir
/usr/local/bin/fir publish ${WORKSPACE}/ipa/appName${BUILD_NUMBER}.ipa -T firtoken -c "${DESCRIPTION}"
网友评论
Cleaning up previously generated .dSYM.zip files
Packaging IPA
[网通社测试] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" /Users/LeoTai/.jenkins/workspace/网通社测试/build/NetcomClub.xcarchive/Info.plist
[网通社测试] $ /usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" /Users/LeoTai/.jenkins/workspace/网通社测试/build/NetcomClub.xcarchive/Info.plist
Packaging NetcomClub.xcarchive => /Users/LeoTai/.jenkins/workspace/网通社测试/build/网通社.ipa
[网通社测试] $ /usr/bin/xcodebuild -exportArchive -archivePath /Users/LeoTai/.jenkins/workspace/网通社测试/build/NetcomClub.xcarchive -exportPath /Users/LeoTai/.jenkins/workspace/网通社测试/build -exportOptionsPlist /Users/LeoTai/.jenkins/workspace/网通社测试/build/development4XQRJRP48EExport.plist
2017-09-27 21:52:11.170 xcodebuild[31089:306367] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/kb/04tr2mp13gz3dch8tq3q9v_80000gn/T/NetcomClub_2017-09-27_21-52-11.169.xcdistributionlogs'.
Failed to build /Users/LeoTai/.jenkins/workspace/网通社测试/build/网通社.ipa
Build step 'Xcode' marked build as failure
Finished: FAILURE
请问作者知道这个问题怎么解决吗?
这个命令有对应的dsym产出的路径
+ xcodebuild clean -workspace zhiboji.xcworkspace -scheme zhiboji -configuration In_house_out 不动了,也不报错,请问楼主知道怎么解决不?
export LANG="en_US.UTF-8"
#环境变量的更改
if ${host_distribution}; then
DESCRIPTION="网络环境:正式环境
${fir_description}"
else
DESCRIPTION="网络环境:测试环境
${fir_description}"
fi
#上传到fir
/usr/local/bin/fir publish ${WORKSPACE}/ipa/appName${BUILD_NUMBER}.ipa -T firtoken -c "${DESCRIPTION}"
Jenkins的一些操作
http://localhost:8080/exit //退出Jenkins
http://localhost:8080/restart //重启
http://localhost:8080/reload //重新加载
Ad-hot、上架包、Enterprise Deployntment。
我现在用大企业证书为什么打包出来的是Ad-hot包 这样子的话 就其它人用户不到的。
怎么样可以打出Enterprise Deployntment 所有设备都可以用的包呢?
if ${host_distribution}; then
BUILD_CONFIG="In_house_out"
else
BUILD_CONFIG="In_house_in"
fi
主要通过这个环境变量来改变,需要在xcode的info->configurations里面添加名叫In_house_out和In_house_in的配置,然后就可以用代码来判断这两个值用作内外网的切换