美文网首页iOS开发shell编程iOS菜鸟食谱
iOS自动化打包 jenkins+svn+命令行打包+fir

iOS自动化打包 jenkins+svn+命令行打包+fir

作者: he15his | 来源:发表于2016-03-02 16:57 被阅读4983次

安装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 .ipa files
    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


    请问作者知道这个问题怎么解决吗?
  • 卡农forever_love:我构建之后一直报错:xcodebuild: error: The workspace named "ChatDemo-UI3.0" does not contain a scheme named "ChatDemo-UI3.0". The "-list" option can be used to find the names of the schemes in the workspace. 求大神指教:joy:
    卡农forever_love:@he15hiss 嗯嗯,是的
    he15his:@卡农forever_love 你targer是ChatDemo-UI3.0这个名字么
  • cf87744ea7b3:请教下楼主,目前用jenkins打包出来的都是32位的应用。iOS 11只支持64位应用,怎么破?
    cf87744ea7b3:@he15hiss 你说这个很早前已经改了。不过问题已解决了,修改Build Active Architecture Only为NO,工程里引用到的其他工程同样修改即刻。
    he15his:@hevin 在Build Settings修改工程配置的Architectures为 armv7 arm64
  • sfandy:请问楼主用jenkins打包如何找到dsym文件呢?
    sfandy:@he15hiss OK,我试试,TKS.
    he15his:cp -f -r $BUILD_DIR/$BUILD_CONFIG-iphoneos/$TARGET_NAME.app.dSYM $IPA_DIR
    这个命令有对应的dsym产出的路径
  • yuandiLiao:楼主你好,我每次构建的时候都卡在:
    + xcodebuild clean -workspace zhiboji.xcworkspace -scheme zhiboji -configuration In_house_out 不动了,也不报错,请问楼主知道怎么解决不?
  • leo2yang:很赞的文章,请教下window下可以集成吗?只能是mac?
    he15his:windows下也是可以的哦,具体可以google
  • 翀鹰精灵:楼主你好哦,想问下你这些she'll脚本需要根据实际情况修改吗,还是可以直接使用的 ????
    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}"
    he15his:@翀鹰女孩 需要根据实际情况修改,host_distribution,fir_description这两个是我在jenkins设置的变量,$(变量) 这样的都是变量,我在脚本开头都有声明的,上面也有对应的说明
  • 翀鹰精灵:Email Extension Plugin:用于发送邮件,功能比自带的强大 这个插件已经安装完成了 ,怎么配置呢?
  • 翀鹰精灵:还有个问题想问楼主,就是Jenkins不是有个自动发送邮件的功能吗 ,我现在能实现通过终端打包并且上传fir,但是自动发送邮件那个好像不行,是需要安装Email Extension Plugin:用于发送邮件,功能比自带的强大这个插件吗 ?
  • 翀鹰精灵:补充下 执行完$brew install jenkins这个命令后,在浏览器中输入http://localhost:8080/并不能打开!需要执行下Jenkins这个命令,启动下Jenkins

    Jenkins的一些操作
    http://localhost:8080/exit       //退出Jenkins
    http://localhost:8080/restart  //重启
    http://localhost:8080/reload  //重新加载
    he15his:@1条大菜狗 说说什么问题吧,看看我能帮得上不
    1条大菜狗:你好,时间过去这么久了。有点问题能请教你否。😁
  • 翀鹰精灵:补充下 执行完$brew install jenkins这个命令后,在浏览器中输入http://localhost:8080/并不能打开!
  • 翀鹰精灵:没有看太明白,这个是从本地代码编译的,是吗?每次都会重新编译本地的最新代码,然后上传到fir,版本号也是自动累加的是吗?
    he15his:@翀鹰女孩 是的,编译svn最新代码打包后上传到fir
  • pengxuyuan:你好,我想问一下iOS jenkins自动打包 可以打出哪种类型的包呢?
    Ad-hot、上架包、Enterprise Deployntment。
    我现在用大企业证书为什么打包出来的是Ad-hot包 这样子的话 就其它人用户不到的。
    怎么样可以打出Enterprise Deployntment 所有设备都可以用的包呢?
    he15his:@彭序猿 嗯,就是你安装jenkins的机器
    pengxuyuan:@he15hiss 你这个本机是指我们的打包机吗?
    he15his:@彭序猿 appstore的我没有试过,按理说也是可以的,使用命令上传,如果要打企业证书的包需要在本机上安装in-house证书
  • 孤独感爆棚:你好,在源码管理时,我怎么默认就选中了none,且我不能选择
    22256f9ee8e8:@孤独感爆棚 因为你没装对应的插件,例如 git或subversion
    he15his:@孤独感爆棚 你在新建的时候选的是这个吗 "构建一个自由风格的软件项目"
  • iOS超级洋:请问一下配置环境是怎么改变的,我还是有点没懂
    he15his:@iOS超级洋 #环境变量的更改
    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的配置,然后就可以用代码来判断这两个值用作内外网的切换

本文标题:iOS自动化打包 jenkins+svn+命令行打包+fir

本文链接:https://www.haomeiwen.com/subject/brynkttx.html