美文网首页iOS工程化
iOS+Jenkins持续构建-编译打包上传

iOS+Jenkins持续构建-编译打包上传

作者: 圣艾修 | 来源:发表于2019-08-21 16:43 被阅读0次

    实验步骤

    1.安装Xcode(不做赘述)

    2.Jenkins安装插件: Xcode integration

    1.png

    3.Jenkins安装插件: Keychains and Provisioning Profiles Management

    2.png

    4.git shhkey 配置(有的同学可跳过,按照初学者来写的)

    终端输入:
    ssh-keygen -t rsa -C"邮箱"
    ssh-add ~/.ssh/id_rsa
    cat /Users/用户名/.ssh/id_rsa.pub

    尝试使用一下

    • 错误一: unable to get local issuer certificate
    • 终端输入命令去掉git的ssl验证: git config --global http.sslVerify false
    3.png

    复制公钥至GIT

    4.png

    私钥复制,待会儿有用

    终端输入:
    cat /Users/用户名/.ssh/id_rsa

    5.新建自由风格JOB

    5.png

    6.配置git

    输入第4步拿到的私钥

    6.png

    保存,注意使用.git地址

    7.png

    7.配置证书

    先将证书导入钥匙串
    将/Users/用户名/Library/MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library
    将/Users/用户名/Library/Keychains/下的login.keychain及login.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面(我在10.13上有这两个文件,而10.14上只有-db文件,将-db改为db,在将两个文件拷贝)

    8.png

    8.上传证书

    回到jenkins,选择Keychains and Provisioning Profiles Management插件进行配置
    选择profile和login.db文件进行上传,需要几个证书就需要多少profile文件
    Code Signing Identity 可以在钥匙串-证书-右键简介查看
    Provisioning Profiles Directory Path为

    /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles 
    
    9.png

    9.继续配置JOB

    勾选Keychains and Code Signing Identities、Mobile Provisioning Profiles选择对应证书,直接保存。

    10.png

    10.继续配置脚本

    11.png

    参考脚本:

    #!/bin/sh
    # appName
    export K_APP_NAME=""
    # 项目名称
    export K_PROJECT_NAME=""
    # xcodeproj
    export K_XCODEPROJ_NAME=".xcodeproj或.xcworkspace"
    # project
    export K_PROJECT_WORKSPACE_NAME="project"
    # scheme名称
    export K_SCHEME=""
    # 编译类型(用于区分发布还是AdHoc模式,可以忽略)
    export K_BUILD_TYPE="Development"
    # 编译配置(主要根据自己的多环境进行配置,比如Release,Debug等)
    export K_CONFIGURATION="Release"
    
    
    # 包名前缀
    export K_IPA_PREFIX=""
    # 包类型
    export K_IPA_TYPE="_alpha_"
    # export
    export K_EXPORT="export"
    # Resources
    export K_RESOURCES="Resources"
    
    
    # xcode环境
    export XCODE=/usr/bin
    
    # 项目workspace
    export K_WORK_SPACE=$WORKSPACE/$K_PROJECT_NAME/$K_XCODEPROJ_NAME/$K_PROJECT_WORKSPACE_NAME.xcworkspace
    
    # 工程目录
    export K_PRO_SPACE=$WORKSPACE/$K_PROJECT_NAME
    
    # info.plist路径
    export K_PROJECT_INFOPLIST_PATH=$WORKSPACE/$K_PROJECT_NAME/$K_APP_NAME/$K_RESOURCES/项目名-Info.plist;
    
    # cd 工程目录
    cd $K_PRO_SPACE
    
    # 获取当前版本号
    export K_VERSION_PRO=`/usr/bin/agvtool mvers -terse1`
    
    # 取build值
    export K_BUILD_VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" ${K_PROJECT_INFOPLIST_PATH})
    
    # ExportOptions位置
    export ExportOptionsPlistPath=/Users/用户/Desktop/项目名-Release/ExportOptions.plist
    
    # 包释放根目录
    export K_DIST_ROOT_PATH=/Users/用户/Desktop/项目名-Release
    
    # 获取时间
    export K_JENKINS_TIME=`date +%Y%m%d%H%M`
    
    # 包/时间
    export K_DIST_PATH=$K_DIST_ROOT_PATH/$K_JENKINS_TIME
    
    # xcarchive文件
    export K_ARCHIVE_PATH=$K_DIST_PATH/$K_APP_NAME.xcarchive
    
    # 导出目录
    export K_EXPORT_PATH=$K_DIST_PATH/$K_EXPORT
    
    # 包命名规则示范:
    export K_IPA_NAME=$K_IPA_PREFIX$K_VERSION_PRO$K_IPA_TYPE$K_BUILD_VERSION"_"$K_JENKINS_TIME
    
    
    ###############################################################################################################
    
    # 目录判断
    if [ ! -d $K_DIST_ROOT_PATH ]; 
    then
       mkdir $K_DIST_ROOT_PATH
    fi
    
    if [ ! -d $K_DIST_PATH ];
    then
       mkdir $K_DIST_PATH
    fi
    
    
    # 解锁钥匙串
    # security unlock-keychain -p "电脑密码" ~/Library/Keychains/login.keychain-db
    
    # clean
    $XCODE/xcodebuild clean  -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet
    
    # build
    $XCODE/xcodebuild build -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME -configuration $K_CONFIGURATION -quiet
    
    # archive
    $XCODE/xcodebuild archive -archivePath $K_ARCHIVE_PATH -workspace $K_WORK_SPACE -destination generic/platform=iOS -scheme $K_SCHEME 
    
    $XCODE/xcodebuild -exportArchive -archivePath $K_ARCHIVE_PATH -exportPath $K_EXPORT_PATH -exportOptionsPlist $ExportOptionsPlistPath -allowProvisioningUpdates
    
    cd $K_DIST_PATH
    
    # 移除打包生成的.xcarchive文件
    rm -rf 项目名.xcarchive
    
    
    cd $K_DIST_PATH/$K_EXPORT
    
    # 重命名包文件
    mv 项目名.ipa $K_IPA_NAME.ipa
    
    echo $K_IPA_NAME
    
    # 包本地路径
    export K_APP_PATH=$K_DIST_PATH/$K_EXPORT/$K_IPA_NAME.ipa
    
    echo $K_APP_PATH
    
    # svn上传
    svn import -m "Jenkins upload ipa" $K_APP_PATH http://用户名@上传目录/$K_IPA_NAME.ipa --username 用户名 --password 密码
    
    
    

    11.构建一次

    12.png
    • 失败了查看控制台输出日志
      错误原因:Failed to copy /Users/Shared/Jenkins/Home/kpp_upload/ 拷贝描述文件失败了。
      开放Jenkins下面Library权限,参照MAC Jenkins安装》第一步。
      再跑一次,结果如下:
      错误:Command CodeSign failed with a nonzero exit code 签名失败。
      修正: 打开钥匙串,设置证书可信任或者打开xcode,在对应项目上signing & Capabilities签名栏设置信任配置
    13.png

    重新做一次第七步,也就是替换login.keychain ,然后在 Keychains and Provisioning Profiles Management重新上传login.keychain

    再次构建,就可以了

    注意我这里导出的包放在了桌面,把desktop读写权限也开一下。

    我的打包执行后包存放目录

    14.png
    • 如果还报错Command CodeSign failed with a nonzero exit code
      可以尝试把脚本中的打开钥匙串代码放开注释
    • 2020-04-23补充
      如果更换了证书,在进行打包导出的时候需要更换ExportOption.Plist文件

    相关文章

      网友评论

        本文标题:iOS+Jenkins持续构建-编译打包上传

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