美文网首页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,且我不能选择
        Hi_InHere:@孤独感爆棚 因为你没装对应的插件,例如 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