美文网首页
Jenkins 配置iOS自动构建

Jenkins 配置iOS自动构建

作者: Wynter_Wang | 来源:发表于2019-05-17 17:28 被阅读0次

    通常我们的测试流程是这样:
    1、开发人员1、开发人员2……提交代码,否则打包的开发人员拉取最新代码;
    2、使用Xcode->Archive->Export->生成ipa包;
    3、发给测试人员;

    搭建Jenkins后,开发完成后,测试可以直接在Jenkins上构建ipa包测试,少了我们开发很多事情。

    一、Jenkins初始配置

    1、命令安装启动Jenkins

    # 安装
    brew install jenkins
    # 启动
    jenkins
    

    2、在浏览器输入http://localhost:8080/,第一次启动要设置Jenkins管理员密码
    3、选择安装推荐插件
    4、创建管理账号密码
    5、开始使用Jenkins

    emmmm,有点干,初始化的时候忘记截图了

    二、添加配置插件

    搜索安装插件,安装插件后重启Jenkins生效

    插件管理1.png 安装插件.png

    三、创建配置项目

    1、新建项目


    Jenkins2.png

    2、丢弃旧的构版本,我这里设置保留时间5日,保留最大构建数为20,可自行调整


    通用配置.png

    3、配置代码源,git地址、账号密码


    源码管理.png

    4、构建版本,Xcode 9使用插件构建超级麻烦,我们选择脚本构建


    使用shell构建.png

    1)将下面脚本修改后粘贴进去,需要修改的地方已经使用****标出来了

    
    # 获取项目名称
    __PROJECT_NAME=`find . -name *.xcodeproj | awk -F "[/.]" '{print $(NF-1)}'`
    
    # 已经指定Target的Info.plist文件路径
    __CURRENT_INFO_PLIST_NAME="Info.plist"
    
    # 获取时间 如:如:2019-05-17_15_45_58
    __CURRENT_DATE="$(date +%Y-%m-%d_%H_%M_%S)"
    
    #  ****************** ⬇️以下需要修改的参数 ********************
    
    # 证书
    __CODE_SIGN_DISTRIBUTION="iPhone Distribution: *****  Co., Ltd. (****)"
    
    # 上传到蒲公英
    __PGYER_U_KEY=""
    __PGYER_API_KEY=""
    
    # 指定Target名称
    __SCHEME_NAME="SCHEME_NAME"
    
    # ExportOptions.plist配置,根据打包导出方式不同plist文件配置也不同(Developmemt、AdHoc、App Store)
    ExportOptionsPlistPath="文件路径/Plist/ExportOptionsAdHoc.plist"
    
    # 指定打包编译的模式,如:Release, Debug...
    __BUILD_CONFIGURATION="Release"
    
    # 获取 Info.plist 路径
    __CURRENT_INFO_PLIST_PATH="${__PROJECT_NAME}/Resouce/Plist/${__CURRENT_INFO_PLIST_NAME}"
    
    #  ****************** ⤴️以上需要修改的参数 ********************
    
    # 分隔符
    __LINE_BREAK_LEFT="\n*********"
    __LINE_BREAK_RIGHT=*********\n"
    
    # 获取版本号
    __BUNDLE_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" ${__CURRENT_INFO_PLIST_PATH}`
    
    # 获取编译版本号
    __BUNDLE_BUILD_VERSION=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" ${__CURRENT_INFO_PLIST_PATH}`
    
    # 编译生成文件目录
    __EXPORT_PATH="/Users/Wynter/Desktop/Archive/${__SCHEME_NAME}_${__CURRENT_DATE}"
    echo "${__LINE_BREAK_LEFT} 编译生成文件目录 ${__EXPORT_PATH} ${__LINE_BREAK_RIGHT}"
    
    # 归档文件路径
    __EXPORT_ARCHIVE_PATH="${__EXPORT_PATH}/${__SCHEME_NAME}.xcarchive"
    
    # ipa 导出路径
    __EXPORT_IPA_PATH="${__EXPORT_PATH}"
    
    # ipa 名字
    __IPA_NAME="${__SCHEME_NAME}_V${__BUNDLE_BUILD_VERSION}_${__CURRENT_DATE}"
    
    # clean
    echo "================= Clean一下 ================="
    xcodebuild clean  -workspace ${__SCHEME_NAME}.xcworkspace \
                      -scheme ${__SCHEME_NAME} \
                      -configuration ${__BUILD_CONFIGURATION} \
    
    #-alltargets
    echo "================= Clean一下 Over ================="
    
    # archive
    echo "============== archive =================="
    xcodebuild archive  -workspace ${__SCHEME_NAME}.xcworkspace \
                        -scheme ${__SCHEME_NAME} \
                        -configuration ${__BUILD_CONFIGURATION} \
                        -archivePath ${__EXPORT_ARCHIVE_PATH} \
                        CFBundleVersion=${__BUNDLE_BUILD_VERSION} \
                        -destination generic/platform=ios \
                        CODE_SIGN_IDENTITY="${__CODE_SIGN_DISTRIBUTION}"
    
    # export ipa
    echo "+++++++++++++++++ exportArchive +++++++++++++++++"
    xcodebuild -exportArchive -archivePath ${__EXPORT_ARCHIVE_PATH} \
                              -exportPath ${__EXPORT_IPA_PATH}\
                              -destination generic/platform=ios\
                              -exportOptionsPlist ${ExportOptionsPlistPath}\
                              -allowProvisioningUpdates
                              
    # 修改ipa文件名称
    mv ${__EXPORT_IPA_PATH}/${__SCHEME_NAME}.ipa ${__EXPORT_IPA_PATH}/${__IPA_NAME}.ipa
    
    # 上传到蒲公英
    curl -F "file=@${__EXPORT_IPA_PATH}/${__IPA_NAME}.ipa" \
    -F "uKey=${__PGYER_U_KEY}" \
    -F "_api_key=${__PGYER_API_KEY}" \
    "http://www.pgyer.com/apiv1/app/upload"
    
    open ${__EXPORT_IPA_PATH}
    
    

    2)修改plist文件配置后保存到本地,然后在ExportOptionsPlistPath变量后写明路径

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>compileBitcode</key>
        <false/>
        <key>method</key>
        <!-- 打包模式 如:ad-hoc、app-store -->
        <string>ad-hoc</string>
        <key>provisioningProfiles</key>
        <dict>
            <!-- Bundle Identfier -->
            <key>com.***</key>
            <!-- 配置文件名称 -->
            <string>projectName_adhoc</string>
        </dict>
        <key>signingCertificate</key>
        <string>iPhone Distribution</string>
        <key>signingStyle</key>
        <string>manual</string>
        <key>stripSwiftSymbols</key>
        <true/>
        <key>teamID</key>
        <!-- teamID -->
        <string>***</string>
        <key>thinning</key>
        <string>&lt;none&gt;</string>
    </dict>
    </plist>
    ![创建项目.jpg](https://img.haomeiwen.com/i937490/22d67ae7274efa1b.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    

    5、构建完成后发邮件通知

    1)项目中添加邮件通知

    添加邮件通知.png

    2)配置收发件人信息,系统设置->邮件插件管理

    系统设置邮件.png
    邮件通知2.png 构建成功失败邮件通知.png

    四、构建项目

    1、点击立即构建,左下方会出现构建历史
    红色表示失败,蓝色表示成功,灰色表示取消


    构建历史.png

    2、查看构建日志,如果构建失败我们可以通过日志分析


    构建日志.png

    五、总结

    折腾完了发现还是挺简单的,麻烦的也就是脚本配置。

    相关文章

      网友评论

          本文标题:Jenkins 配置iOS自动构建

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