美文网首页
2020-03-24

2020-03-24

作者: 欣欣的妈妈 | 来源:发表于2020-04-30 07:03 被阅读0次

    自动化打包

    使用的工具是jenkins,Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,主要用于自动化打包

    安装

    命令行安装

    $ brew install jenkins
    
    

    卸载

    $ brew uninstall jenkins
    
    

    初始化配置

    启动jenkins

    $ jenkins
    
    

    在浏览器中配置jenkins,

    初始化配置
    浏览器输入localhost:8080
    
    

    这样就打开Jenkins管理页面了,此时有一个默认的管理员jenkins,浏览器进入重置密码页面

    image

    初始密码在/Users/dyn/.jenkins/secrets/initialAdminPassword(初始化完成后自动消失)
    然后就是如下图片,依次选择即可

    image image
    创建用户
    image

    输入用户名,密码,邮件这些,就算初始化配置完成了

    安装需要的插件

    安装插件的位置:系统管理->管理插件,在“可选插件”

    GitLab插件

    用来管理源代码,位置:“可选插件”列表中“GitLab Plugin”和“Gitlab Hook Plugin”两项

    Xcode插件

    用于完成xcode命令打包,位置在“可选插件”列表中“Xcode integration”选项

    签名证书管理插件

    用于iOS打包内测版时,需要发布证书及相关签名文件,位置在“可选插件”中选中“Credentials Plugin”和“Keychains and Provisioning Profiles Management”两项。

    脚本插件

    用于在build后执行相关脚本。位置在“可选插件”中选中“Post-Build Script Plug-in”选择。

    设置apple development证书

    新建任务及打包

    新建任务

    安装完插件后的页面如下:

    image

    点击创建一个新任务来开始第一个项目

    image

    选择第一个 “构建一个自由风格的软件项目”

    任务配置

    选中任务名->配置

    基本信息,这里可以设置包的保留天数还有个数。(可略过)。见下图
    image
    源码管理,设置代码的获取方式
    image

    ]
    Repository URL:项目的git地址
    Add按钮:进行认证权限,就是添加git的用户名密码

    image

    填写好用户和密码,点击下面的Add按钮,然后Credentials下拉框就会出现这个用户

    下载代码

    此时保存,然后选择立即构建,就可以下载代码

    ios构建版本配置

    构建触发器

    image

    定时自动打包的配置,

    具体写法参见http://blog.csdn.net/e295166319/article/details/52920036

    构构建环境(掠过)

    构建(添加构建步骤)

    选择xcode就是使用xcode 命令行打包

    选择execute shell 就是使用运行shell脚本打包

    xcode 命令行打包配置,参见本地jenkins服务器的test1项目
    image

    需要选择的选项介绍
    Target:就是我们在项目中建立的Target

    命令行查看所有target

    xcodebuild -list
    
    

    Clean before build?:

    编译前是否clean一次,一般是选择YES,也可不选

    Configuration:

    对应的是xcodebuild命令里的-configuration的参数,可选项为[Debug、Release],一般都填Debug

    Pack application and build .ipa?:

    结束时是否要产生对应的ipa文件,选中即可

    .ipa filename pattern:

    配置ipa的文件名,比如{VERSION}_{BUILD_DATE}

    其中{VERSION}和{SVN_REVISION}都是可以直接用的环境变量,所有可用的环境变量地址为:http://localhost:8080/env-vars.html

    Output directory:

    配置ipa的输出目录。比如$WORKSPACE/build/ipa-build

    证书配置
    image

    Development Team ID :团队id,在keychain的distrubution证书名称的()中就是
    Keychain path 固定路径

    Keychain password:应该是p12文件密码

    Advanced Xcode build options

    Xcode Schema File:对应的是xcodebuild命令中的-scheme的参数
    Xcode Workspace File:xcodebuild中的-workspace的变量,是.xcworkspace的文件路径,从工程总文件夹开始写,切无后缀名
    Xcode Project Directory:同理是单工程的工程文件名,无后缀名
    Build output directory:ipa的路径

    shell打包脚本

    特点:自动读取参数配置文件
    自动循环打包
    参考本地jenkins服务器的项目shelldemo

    #获取当前工程路径,即工程的总文件夹
    projectPath=$PWD
    echo  $projectPath
    
    #工程名
    projectName="ElinkIphoneClientApp"
    projectPath=${projectPath}/${projectName}
    #target名字
    targetName="ElinkIphoneClientApp"
    
    #fir的api token
    apiToken="ceea173a583a842243b7d08af5a0a870"
    
    #配置文件路径
    configPath=${projectPath}/buildConfig.txt
    
    #plist文件路径
    appInfoPlistPath=${projectPath}/${projectName}/Info.plist
    #配置文件相关
    #服务器地址key
    serviceURLKey="serviceURL"
    
    #显示名称key
    displayNameKey="name"
    
    #开发证书的key
    developmentCodeSignIdentifyKey="developmentCodeSignIdentify"
    
    #开发证书的描述文件key
    developmentProvisionProfileKey="developmentProvisionProfile"
    
    #发布证书的key
    appstoreCodeSignIdentifyKey="appstoreCodeSignIdentify"
    
    #发布证书的描述文件Key
    appstoreProvisionProfileKey="appstoreProvisionProfile"
    
    #默认服务器地址
    serviceURLStr="http://www.xaelink.com:8096"
    
    #显示名称.默认是工程名
    displayName=$projectName
    
    #开发证书名称
    developmentCodeSignIdentify=""
    
    #开发证书的描述文件
    developmentProvisionProfile=""
    
    #发布证书
    appstoreCodeSignIdentify=""
    
    #发布证书的描述文件
    appstoreProvisionProfile=""
    
    #打印plist文件内容
    #/usr/libexec/PlistBuddy -c "print" ${appInfoPlistPath}
    
    #读取配置文件内容.并以此替换plist 文件,然后打包
    cat ${configPath} | while read line
    
    do
    
    #获取等号左边的值
    tempKey=${line%%=*}
    #服务器地址
    if [ "${serviceURLKey}" == "${tempKey}" ] ; then
    
    serviceURLStr=${line##*=}
    echo "serviceURLStr=${serviceURLStr}"
    
    #替换plist 文件的ServicesURLStr字符串
    
    /usr/libexec/PlistBuddy -c "set :ServicesURLStr $serviceURLStr" ${appInfoPlistPath}
    
    #程序显示名称
    elif [ "${displayNameKey}" == "${tempKey}" ] ; then
    
    displayName=${line##*=}
    echo "displayName=${displayName}"
    #替换plist 文件的应用程序名
    /usr/libexec/PlistBuddy -c "set :CFBundleDisplayName $displayName" ${appInfoPlistPath}
    /usr/libexec/PlistBuddy -c "set :CFBundleName $displayName" ${appInfoPlistPath}
    
    #开发证书名称
    elif [ "${developmentCodeSignIdentifyKey}" == "${tempKey}" ] ; then
    developmentCodeSignIdentify=${line##*=}
    echo "developmentCodeSignIdentify=${developmentCodeSignIdentify}"
    
    #开发证书的描述文件
    elif [ "${developmentProvisionProfileKey}" == "${tempKey}" ] ; then
    developmentProvisionProfile=${line##*=}
    echo "developmentProvisionProfile=${developmentProvisionProfile}"
    
    #发布证书
    elif [ "${appstoreCodeSignIdentifyKey}" == "${tempKey}" ] ; then
    appstoreCodeSignIdentify=${line##*=}
    echo "appstoreCodeSignIdentify=${appstoreCodeSignIdentify}"
    
    #发布证书的描述文件
    elif [ "${appstoreProvisionProfileKey}" == "${tempKey}" ] ; then
    appstoreProvisionProfile=${line##*=}
    echo "appstoreProvisionProfile=${appstoreProvisionProfile}"
    
    #读取到最后一个参数后,开始打包
    #建立一些需要的文件路径
    basepath=${projectPath}
    #编译输出文件夹名称
    myfile="autobuild"
    
    #日志文件路径
    logPath="${basepath}/${myfile}/log.rtf"
    
    #编译模式,debug 还是release,默认是release
    configuration="Release"
    
    #工作环境名称
    workspaceName="${projectName}.xcworkspace"
    
    #scheme 名字
    scheme="${targetName}"
    
    #build 路径
    configurationBuildDir="${basepath}/${myfile}/build"
    
    #archive路径
    archivepath="${basepath}/${myfile}/archive/${projectName}.xcarchive"
    
    #ipa 文件路径
    #当前时间
    qs_date=`date +%Y_%m_%d_%H_%M_%S`
    
    #ipa导出的文件夹路径,按时间排序
    exportpath="${basepath}/${myfile}/ipa/${projectName}_${qs_date}"
    
    #appstore的ipa到处路径
    appstorepath="${basepath}/${myfile}/appstore/${projectName}_${qs_date}"
    
    #导出配置路径,暂不需要
    exportOptionsPlist="${basepath}/${myfile}/DevelopmentExportOptions.plist"
    
    #ipa的真实路径
    ipaPath="${exportpath}/${scheme}.ipa"
    
    #appstore的ipa真实路径
    appstoreipaPath="${appstorepath}/${scheme}.ipa"
    
    cd  ${basepath}
    #clear
    echo "\033[31m Start Clear!\033[0m" #输出颜色为红色的Start Clear!
    rm -f $logPath  #强制删除日志文件
    xcodebuild clean -configuration "${configuration}" >> $logPath || exit
    echo "\033[31m clear success!\033[0m"
    
    #先打开发者包,上传到fir上
    
    #打包
    
    echo "\033[31m Start archive!\033[0m"
    
    xcodebuild archive -workspace "${workspaceName}" -scheme "${scheme}" -configuration "${configuration}" -archivePath "${archivepath}"  CODE_SIGN_IDENTITY="${developmentCodeSignIdentify}" PROVISIONING_PROFILE="${developmentProvisionProfile}" >> $logPath || exit
    echo "\033[31m archive success!\033[0m"
    
    #导出ipa 包
    echo "\033[31m Start export ipa!\033[0m"
    echo "exportPath=${exportpath}"
    
    xcodebuild  -exportArchive -archivePath "${archivepath}" -exportPath "${exportpath}" -exportOptionsPlist "${exportOptionsPlist}" >> $logPath || exit
    
    echo "\033[31m Export ipa success!,ipa path :${ipaPath}\033[0m"
    
    #打包发布者包
    #上传到appstore的包,准备上传
    else
    echo "-----------"
    
    fi
    done
    
    

    关键命令解释:

    PlistBuddy:是Mac自带的专门解析plist的小工具

    PlistBuddy使用详解

    参考网址http://www.jianshu.com/p/2167f755c47e

    使用PlistBuddy打印plist 内容

    /usr/libexec/PlistBuddy -c "print" ${appInfoPlistPath}
    
    

    使用PlistBuddy给plist添加内容

    添加字符串

    /usr/libexec/PlistBuddy -c 'Add :Version string 1.0' test.plist
    Version是键
    string是类型
    1.0是值
    
    

    添加数组

    # 先添加key值
     /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo array' test.plist 
    # 添加value值
     /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo: string app1' test.plist 
    
     /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo: string app2' test.plist 
    
    

    添加字典

    # 先添加key值 
    /usr/libexec/PlistBuddy -c 'Add :Person dict' info.plist 
    
    # 添加value值
     /usr/libexec/PlistBuddy -c 'Add :Age string secret' info.plist
    
     /usr/libexec/PlistBuddy -c 'Add :Name string yans67' 
      info.plist 
    
    

    PlistBuddy替换plist已有键值的内容

    /usr/libexec/PlistBuddy -c "set :CFBundleDisplayName $displayName" ${appInfoPlistPath}
    
    

    -c:意思是执行后面“”内的命令
    CFBundleDisplayName:是plist 存在的键
    displayName:是新的值{appInfoPlistPath} :plist 文件内容

    删除某个字段

    /usr/libexec/PlistBuddy -c 'Delete :Version' info.plist
    
    

    读取配置文件详解

    shell使用cat逐行读取文件内容

    cat ${configPath} | while read line
    
    

    获取cat 当行的文本内容

    获取等号左边的值
    tempKey=${line%%=*}
    
    获取等号右边的值
    
    serviceURLStr=${line##*=}
    
    

    打包命令详解:

    项目的总文件夹路径

    project_path=$(pwd)
    
    

    指定打包的sdk名称

    sdk="iphoneos9.3"
    
    

    指定打包的target名称

    target="PictureTest"
    
    

    指定项编译环境 Release Debug

    configuration="Release"
    
    

    指定要打包的证书

    # code_sign_identity="iPhone Developer: lei zhang (HWQV7JV39T)"
    
    

    指定打包所使用的provisioning profile名称

    # provisioning_profile="14765a74-1d60-4697-a38b-2183ac1dcfb3"
    provisioning_profile="64f58c03-4649-405c-9c5a-c2d8a6527aa9"
    
    

    指定输出ipa地址

    ipa_path="${project_path}/${target}_${now}.ipa"
    

    相关文章

      网友评论

          本文标题:2020-03-24

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