美文网首页Jenkins & Linux
Mac下Jenkins打包IPA上传蒲公英

Mac下Jenkins打包IPA上传蒲公英

作者: Vicent_Z | 来源:发表于2019-05-29 15:40 被阅读8次

    1.前言

    这是一篇通过无数次踩坑后成功进行的总结。。。希望能帮助新手们快速上手。

    2.正文

    配置JDK环境

    安装前确认已经安装好JDK1.8版本下载地址,因为最新的Jenkins最高只支持1.8版本,如果当前安装过高版本的,需要安装完1.8的进行配置。

    image.png image.png

    终端执行

    $ open ~/.bash_profile
    

    结尾另起一行添加

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk[对应的版本].jdk/Contents/Home
    

    下载Jenkins文件&安装

    通过官网下载mac版本的pkg文件,然后进行默认选项的安装。

    image.png image.png

    Jenkins配置

    安装完成后浏览器会默认打开http://localhost:8080,然后首次会进入输入管理员密码界面

    image.png

    通过前往文件夹工具无法进入到

    /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
    
    image.png

    是因为secrets有访问权限,我们可以先进入

    /Users/Shared/Jenkins/Home
    

    然后在secrets目录上 右键-》显示简介,后点击右下角的小锁头,输入登录密码后,点击共享与权限一栏的【everyone】右侧的无访问权限,选择【读与写】后,然后点击底部齿轮选择【应用到包含项目】最后关闭锁头。

    image.png image.png image.png

    打开【/Users/Shared/Jenkins/Home/secrets/initialAdminPassword】文件复制密码后在jenkins登录界面粘贴后继续。

    解决【该Jenkins实例似乎已离线】

    此时界面会提示【该Jenkins实例似乎已离线】,解决方案:

    另开启新界面,进入【http://localhost:8080/pluginManager/advanced】界面,将Update Site地址从https改为http后提交,然后点击右下角的Check now,浏览器输入http://localhost:8080/restart 重启jenkins即可解决。

    image.png

    也可以使用终端命令操作

    启动:sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
    停止:sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
    

    重启完重新输入http://localhost:8080,按顺序操作即可,进入到【自定义Jenkins
    】,点击安装推荐插件后耐心等待即可。

    image.png

    创建用户

    创建后点击保存并完成,实例配置使用默认配置即可,直接点击保存并完成,至此配置完毕,点击开始使用Jenkins,如果界面没反应,可以使用localhost:8080/restart重启jenkins后登录。

    image.png

    下载打包插件

    主界面菜单点击【系统管理】-》【插件管理】

    image.png

    安装Keychains and Provisioning Profiles Management和Xcode integration

    点击【可选插件】-》过滤里输入【keychains】后安装一栏选上【对号】,后点击直接安装,等待安装完毕后,相同方式安装【Xcode integration】,安装完成后重启jenkins。

    image.png

    配置Keychains and Provisioning Profiles

    主界面菜单点击【系统管理】-》【Keychains and Provisioning Profiles Management】(插件安装成功后才有)

    前往【/Users/管理员用户名/Library/Keychains/】,将【login.keychain-db】文件复制一份改名为【login.keychain】,前往【/Users/Shared/Jenkins】创建【/Library/Keychains】,将这两个文件拷到下面。

    image.png

    然后在【Keychains and Provisioning Profiles Management】里面点击【选择文件】,选择之前拷贝的【login.keychain】,上传点击【Upload】后点击【Save】,打开【钥匙串访问】-》【登录】-》【证书】-》【开发者证书】,复制名称到【Code Signing Identity】,点击【Save】。

    image.png image.png image.png image.png image.png

    将/Users/管理员用户名/Library的MobileDevice文件夹拷贝到/Users/Shared/Jenkins/Library下。上传需要的Provisioning Profiles文件(位置在/MobileDevice/Provisioning Profiles下)并且输入Provisioning Profiles Directory Path的路径【/Users/用户名/Library/MobileDevice/Provisioning Profiles】后保存。

    新建任务

    主菜单点击【新建任务】-》输入任务名-》选择构建一个自由风格的-》点击确定。

    image.png

    配置构建任务

    由于第一次进入关联不上Code Sign所以需要保存后在重新配置

    点击【构建】-》【Keychains and Code Signing Identities】-》保存

    image.png image.png

    【Mobile Provisioning Profiles】的配置一样需要保存后重新配置才能关联出来变量。

    image.png

    通过立即构建进行测试

    test任务菜单点击立即构建进行测试配置是否成功。结果为蓝色即为正确,如果为红色则按照错误日志进行排查,错误日志查看,点击构建结果-》控制台输出即可查看

    image.png

    shell脚本进行构建配置

    现成的打包shell脚本粘贴到脚本位置即可

    image.png
    #!/bin/bash
    #安装器打包文件
    
    #start---------------------------------------》
    
    # 1.设置配置标识
    configuration="Debug"
    
    #2.项目的根目录
    cur_dir="/Users/jit/My/SVNCodes/TenementPlatform-Branch1.0"
    echo $cur_dir
    
    #生成ipa的目录
    desk_dir="/Users/jit/Desktop"
    echo $desk_dir
    
    #获取当前时间
    CURTIME=`date '+%Y%m%d_%H%M%S'`
    prefix_path="${desk_dir}/uploadIPA"
    upload_path="${prefix_path}/${configuration}/${CURTIME}"
    target_path=$cur_dir
    
    echo "upload_path打包路径:$upload_path"
    echo "target_path项目路径:$target_path"
    
    #判断如果不存在upload_path创建,存在先删除再创建
    if [ -d "$prefix_path" ]; then
    if [ -d "$upload_path" ]; then
    rmdir "$upload_path"
    mkdir -p "$upload_path"
    else
    mkdir -p "$upload_path"
    fi
    else
    mkdir -p "$prefix_path"
    fi
    
    # 项目名称
    target_name="TenementPlatform"
    workspace_name="${target_name}.xcworkspace"
    scheme="$target_name"
    
    echo "configuration配置:$configuration"
    echo "target_name项目名称:$target_name"
    echo "workspace_name工作空间名称:$workspace_name"
    echo "scheme名称:$scheme"
    
    # archive包时使用证书、描述文件UUID;ipa包时使用描述文件(描述文件名称)
    codeSignIdentity="iPhone Developer: 宇 张 (6BVMZN44H8)"
    provision_UUID="bd87e612-1eb0-4aa8-8508-34e673184b24.mobileprovision"
    provisoning_profile="TestAll"
    
    echo "codeSignIdentity开发证书:$codeSignIdentity"
    echo "provision_UUID描述文件UUID:$provision_UUID"
    echo "provisoning_profile描述文件:$provisoning_profile"
    
    # 指定目录时
    cd "$upload_path"
    ipa_path="$upload_path"
    archive_path="$upload_path/${target_name}.xcarchive"
    # 日志路径
    log_path="$upload_path/log.txt"
    exportOptionsPlist_path="$desk_dir/autoAchive/config.plist"
    
    pwd
    echo "ipa_path导出路径:$ipa_path"
    echo "archive_path生成路径:$archive_path"
    echo "log_path打印路径:$log_path"
    
    # 3 删除旧文件
    rm -rf "$log_path"
    rm -rf "$archive_path"
    rm -rf "$ipa_path"
    cd "$target_path"
    
    pwd
    # 4 清理构建目录
    xcodebuild clean -configuration "$configuration" -alltargets
    xcodebuild clean -configuration "$configuration" -alltargets | tee $log_path
    
    echo $scheme
    echo $workspace_name
    echo $configuration
    
    /usr/bin/security unlock-keychain -p 111111
    
    # 5 归档(其他参数不指定的话,默认用的是.xcworkspace或.xcodeproj文件里的配置)
    xcodebuild archive -workspace "$workspace_name" -scheme "$scheme" -configuration "$configuration" -archivePath "$archive_path" CODE_SIGN_IDENTITY="$codeSignIdentity" PROVISIONING_PROFILE="$provision_UUID" | tee $log_path
    
    # 6 导出IPA
    xcodebuild -exportArchive -archivePath "$archive_path" -exportPath "$ipa_path" -exportOptionsPlist "$exportOptionsPlist_path" | tee $log_path
    
    # 7 删除项目目录下产生的build文件
    rm -rf "$cur_dir/build"
    
    # 8 上传IPA到蒲公英 根据蒲公英官方文档编写
    file_path="${upload_path}/${target_name}.ipa"
    echo "正在上传文件"
    echo $file_path
    curl -F "file=@${file_path}" -F "uKey=6c17bf50b844a231703068ce04b166bb" -F "_api_key=7faa7cc51166fed7f8c181003ce118aa" https://qiniu-storage.pgyer.com/apiv1/app/upload
    

    点击立即构建进行测试,如果报错根据错误日志调试。
    可以先注释掉 【6 导出IPA】之后的脚本,一点点调试。

    主要问题应该是权限问题,例如

    You don't have permission to save the file
    

    授权所有用对【/Users/Shared/Jenkins】以及子目录的的读写权限后重新构建,
    提示ld: library not found for -lAFNetworking错误。
    需要删除【Build Settings】-》【Library Search Paths】下的相关关联。
    并且需要给代码文件夹以及子文件授予所有用户的读写权限。

    再次构建提示成功,至此打包配置基本完成。

    3.结语

    Jenkins还可以配置很多种功能,比如代码规范检查,定时打包等等。

    还有一种通过Homebrew方式安装Jenkins,能指定Jenkins安装目录和Home路径,可以规避很多权限问题,具体就不在此进行介绍了。

    相关文章

      网友评论

        本文标题:Mac下Jenkins打包IPA上传蒲公英

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