zoukankan      html  css  js  c++  java
  • iOS-Jenkins自动化打包集成

    前言自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给机器去做。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。搭建Jenkins前,请确认mac系统上已经搭建好了Java环境

    一、Jenkins安装

    打开Jenkins官网下载最新的pkg安装包(选择Mac OS)。安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

     

     

    这时候可能出现这个页面,这个问题的原因就是Java环境有问题,需要重装Java环境。下载Java的JDK

    一般会有2个版本可选,选一个下载即可,下载完安装后打开终端,cd进入到jenkins.war包所在目录,执行以下命令:

    $ java -jar jenkins.war --httpPort=8080

    httpPort指的就是Jenkins所使用的http端口,这里指定8080(默认的就是这个),可根据具体情况来修改。待Jenkins启动后,在浏览器页面输入以下地址:http://localhost:8080这样就可以打开Jenkins管理页面了。

    如果已经安装完java环境,则显示:

    输入终端命令:

    hujintaodeMacBook-Pro:~ MengYu$ sudo su

    使用vim编辑,并复制密码 0b4e9c1d8524401182338a4d63612ae3 

    Password:
    sh-3.2# vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
    [1]+  Stopped(SIGTSTP)        vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword

    创建你的账号信息

    安装成功~

    二、拷贝文件

    2.1

    /Users/用户名/Library的MobileDevice 文件夹拷贝到 /Users/Shared/Jenkins/Library

    注意:是将MobileDevice这个文件夹拷贝过去,而不是MobileDevice里的文件,/Users/Shared/Jenkins/Library 目录下是没有MobileDevice这个文件夹,所以先创建一个MobileDevice文件夹

    在终端输入

    sudo mkdir /Users/Shared/Jenkins/Library/MobileDevice 
    sudo cp -r /Users/MengYu/Library/MobileDevice/ /Users/Shared/Jenkins/Library/MobileDevice/

    注意:曾遇到/Users/xxx/Library/下没有MobileDevice文件夹,原来是新机上没有安装Xcode。

     

    2.2

    /Users/用户名/Library/Keychains/下的login.keychainlogin.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面

    注意:Mac OS 10.12以下的没有login.keychain-db这个文件,只需要拷贝login.keychain文件

    在终端输入:

    cd /Users/Shared/Jenkins/Library/ 
    sudo mkdir Keychains 
    sudo cp /Users/MengYu/Library/Keychains/login.keychain ./Keychains/ 
    sudo cp /Users/xxx/Library/Keychains/login.keychain-db ./Keychains/

    再将这个login.keychain拷贝到桌面上

    在终端输入

    sudo cp /Users/MengYu/Library/Keychains/login.keychain ~/Desktop/

    注意:如果/Users/xxx/Library/Keychains/目录下没有login.keychain这个文件,就复制login.keychain-db文件到指定目录,然后将复制在桌面上的该文件改后缀为.keychain。

     

    三、修改钥匙串权限、~/Library权限以及电脑用户管理权限

    3.1

    打开钥匙串,找到相应的证书

    右键密钥显示简介,在访问控制那一项里勾选允许所有应用程序访问此项目,并存储更改。

    3.2

    找到Library资源库文件夹,显示简介,设置共享与访问权限,everyone读与写都可以

    3.3

    进入mac系统偏好设置 — 用户与群组 — 其他用户 — jenkins ,勾选允许用户管理这台电脑,并右键选择高级选项,将名字改为jenkins

     

    四、Jenkins插件及系统设置(Keychains和证书配置)

    4.1进入管理插件,在可选插件里所有关键字,下载安装插件Keychains and Provisioning ProfilesManagement和 Xcode integration

    点击系统管理,并 添加插件 Keychains(钥匙串插件)

    4.2 login.keychain和证书配置

     

    如何导出Xcode自动生成的Provisioning Profiles文件

    1.打开终端输入下列命令,回车,进入到Xcode管理的.mobileprovision文件目录

    #whoami 命令读取系统用户名
    cd /Users/`whoami`/Library/MobileDevice/Provisioning Profiles/

    2.通过BundleId 递归查找.mobileprovision文件,两个:一个development ,一个distribution版本

    -r递归查找,因为.mobileprovision是一个二进制文件,不加会报错
    -l只显示文件名

    grep -r -l com.tencent.xin .

    3.如何区分dev和dis

    继续输入下面的代码,会打开Finder并选中文件。选中这个文件后,按空格键,会生成mobileprovision文件的预览窗口,里面会显示对应的信息,仔细找一下就能区分了

    open -R ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

    4.显示详细的预览信息

    security cms -D -i ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

    打印结果如下,是一个XML文件,如果有ProvisionedDevices字段(设备列表),说明是dev版本的,dis版本的没有这个字段。

    <?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>AppIDName</key>
        <string>aaa</string>
        <key>ApplicationIdentifierPrefix</key>
        <array>
        <string>X9ASDF2345</string>
        </array>
        <key>CreationDate</key>
        <date>2018-02-03T14:19:45Z</date>
        <key>Platform</key>
        <array>
            <string>iOS</string>
        </array>
        <key>DeveloperCertificates</key>
        <array>
            <data>MIIFmjCCBIKgAwIBA..省略
    </array>
        <key>Entitlements</key>
        <dict>
            <key>keychain-access-groups</key>
            <array>
                <string>X9ASDF2345.*</string>       
            </array>
            <key>get-task-allow</key>
            <true/>
            <key>application-identifier</key>
            <string>X9ASDF2345.com.xxxx.aaa</string>
            <key>com.apple.developer.team-identifier</key>
            <string>X9ASDF2345</string>
        </dict>
        <key>ExpirationDate</key>
        <date>2019-02-03T14:19:45Z</date>
        <key>Name</key>
        <string>iOS Team Provisioning Profile: com.xxxx.aaa</string>
        <key>ProvisionedDevices</key>
        <array>
            <string>6126203adse3dbab4012374e5c01e2a497b9aa66</string>
          </array>
        <key>TeamIdentifier</key>
        <array>
            <string>X9SABCD345</string>
        </array>
        <key>TeamName</key>
        <string>xiaoming</string>
        <key>TimeToLive</key>
        <integer>365</integer>
        <key>UUID</key>
        <string>5b857e06-f2ed-4256-88a3-0d7847e34371</string>
        <key>Version</key>
        <integer>1</integer>
    </dict>

     

    选取拷 在桌上login.keychain以及项 相对应的Provisioning Profile 并upload, 可以导入多个, 且应该是/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles目录下的provisioningProfile.

    注意:开发证书和provision profile 一定要对应正确,不然命令行打包会认证不了而失败

     

    password 一定要填写正确的钥匙串的密码

    Code Signing Identity 是从钥匙 找到相应的证书,然后显示简介复制 来,这 Identities 少要填 两项,是因为这 放 个的话后 的设置 Code Signing Identity 能 动对应上。

     

    Provisioning Profiles Directory Path 这 项 填写/Users/用户名/Library/ MobileDevice/Provisioning Profiles

    注意:路径里Provisioning Profiles是Provisioning Profiles

    此外,Xcode工程必须手动配置证书,并取消自动配置证书

     

    五、开始构建打包任务

    5.1点击新建任务,填写名字,选择自由风格,点击确定进行创建

    5.2添加源码管理工具和SVN仓库地址,这里使用Subversion 进行管理,仓库地址去掉@和昵称-xxx@

    添加构建者并且Add设置为Jenkins

    添加账号:

     

    5.3.构建触发器配置

    配置为每五分钟自动打包一次

     

    5.4构建环境勾选Keychains和Mobile Provisioning Profiles.

    5.5增加构建步骤,执行Shell

    Shell脚本如下:

    a.自动配置证书的Shell脚本

    #——————————————自动证书 ————————————————
    # 工程名
    APP_NAME="TEST"
    # 证书
    CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
    # info.plist路径
    project_infoplist_path="./${APP_NAME}/Info.plist"
    
    #取版本号
    bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
    
    #取build值
    bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
    
    DATE="$(date +%Y%m%d)"
    IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
    
    #要上传的ipa文件路径
    IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}"
    echo ${IPA_PATH}
    echo "${IPA_PATH}">> text.txt
    
    # 下面2行是没有Cocopods的用法
    echo "=================clean================="
    xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean
    
    echo "+++++++++++++++++build+++++++++++++++++"
    xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release'  SYMROOT='$(PWD)'
    
    xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"
    
    
    # 设置上传到 Fir
    FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2"
    
    fir l ${FIRTOKEN}
    fir p ${IPA_PATH}

    b.手动配置证书的Shell脚本

    # 工程名---- 手动证书
    APP_NAME="TEST"
    # 证书
    CODE_SIGN_DISTRIBUTION="iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
    # info.plist路径
    project_infoplist_path="./${APP_NAME}/Info.plist"
    
    #取版本号
    bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
    
    #取build值
    bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
    
    DATE="$(date +%Y%m%d)"
    IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
    
    #要上传的ipa文件路径
    IPA_PATH="$HOME/Desktop/iPAs/${IPANAME}"
    echo ${IPA_PATH}
    echo "${IPA_PATH}">> text.txt
    
    # 下面2行是没有Cocopods的用法
    echo "=================clean================="
    xcodebuild -target "${APP_NAME}"  -configuration 'Release' clean
    
    echo "+++++++++++++++++build+++++++++++++++++"
    xcodebuild -target "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
    
    xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"
    
    # 设置上传到 Fir
    FIRTOKEN="6815935ea0c92e69d30793d7f81a26f2"
    
    fir l ${FIRTOKEN}
    fir p ${IPA_PATH}

     

    5.6构建后步骤

    可以发送邮件、上传蒲公英等操作

    然后保存,应用。

  • 相关阅读:
    vision transformer
    亮剑,gacutil.exe
    MOSS自定义登陆页面
    查看应用程序的进程ID
    基于AD的表单认证 Moss2010
    js 实现拖动
    获取指定数据库表, 以及指定表的数据信息
    二分法
    JZ053表示数值的字符串
    JZ054字符流中第一个不重复的字符
  • 原文地址:https://www.cnblogs.com/StevenHuSir/p/iOS_Jenkins_Package.html
Copyright © 2011-2022 走看看