• gitlab+jenkins自动化打包IOS-jenkins配置


    实现的效果如图: 

    • 构建界面:

     

    • 完成效果:

     

    功能说明:

    • 根据选择的代码分支,执行构建打包 
    • 构建成功后根据ipa/apk生成二维码,并可在历史构建列表中展示各个版本的二维码,通过手机扫描二维码可直接安装对应版本

    因为搭建平台写了一系列博文,这里作一个总结与整理 

    首先jenkins需要的插件:

    • build-name-setter:用于修改Build名称
    • description setter plugin:用于在修改Build描述信息,在描述信息中增加显示QRCode(二维码)
    • Build Name and Description Setter
    • Git Parameter 参数化构建分支

    具体的配置:

    1.MAC搭建jenkins

    • 注意:直接下载war包, 不要下载Mac OS X,

    参照:MAC 安装jenkins

     

    Tips:

    最好是把jenkins.war包放在tomcat中运行,这样比较方便配置开机自启动,

    如果使用java命令启动jenkins,每次开机都要使用命令去启动会很麻烦

     

    2.jenkins创建测试job

     

    3.配置与gitlab连接,别忘记在jenkins宿主机配置gitlab的host

    在Repository URL处:输入仓库地址,这里选择http方式:

    添加用户名,密码

     

    点击【保存】,执行构建,查看日志可以看到commit message,说明git已经与jenkins连接成功了

     > git fetch --tags --force --progress http://git.xxxx.com/kaifa/testcase.git +refs/heads/*:refs/remotes/origin/*
     > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
     > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
    Checking out Revision 724dd42afc5ecd9b92842681cd85c2da6992ddda (refs/remotes/origin/master)
     > git config core.sparsecheckout # timeout=10
     > git checkout -f 724dd42afc5ecd9b92842681cd85c2da6992ddda
    Commit message: "aa"
    First time build. Skipping changelog.
    Finished: SUCCESS

     另外要注意:

      在Jenkins的默认配置中,clone代码时会拉取所有历史版本的代码,而且默认的超时时限只有10分钟。这就造成在某些项目中,由于代码量本身就比较大,历史版本也比较多,再加上网络环境不是特别好,Jenkins根本没法在10分钟之内拉取完所有代码,超时后任务就会被自动终止了(错误状态码143)。

      这种问题的解决方式也很简单,无非就是两种思路,要么少拉取点代码(不获取历史版本),要么提高超时时限。对应的配置在Advanced clone behaviours中:

    • Shallow clone:勾选后不获取历史版本;
    • Timeout (in minutes) for clone and fetch operation:配置后覆盖默认的超时时限。

     

    4.构建-打包脚本 

     1 ## !/bin/sh
     2 ## 项目名
     3 TARGET_NAME="XXXXAPP"
     4 ## xcworkspace文件所在目录 
     5 TARGET_PATH="XXXXWorkspace/XXXXAPP"
     6 ## Scheme名
     7 SCHEME="XXXXAPP"
     8 ##=======================
     9 ## 编译类型
    10 BUILD_TYPE=${ENV}
    11 ## 当前目录
    12 SORCEPATH=${WORKSPACE}
    13 ## workspace名
    14 SPACE=${WORKSPACE}/${TARGET_PATH}/${TARGET_NAME}.xcworkspace
    15 ##xcarchive文件的存放路径
    16 ARCHIVEPATH=$SORCEPATH/build/$SCHEME.xcarchive
    17 ## ipa文件的存放路径
    18 EXPORTPATH=$SORCEPATH/build/$SCHEME
    19 ## ExportOptions.plist文件的存放路径
    20 EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
    21 ## 导出后的ipa路径
    22 EXPORTPATHIPA=$SORCEPATH/build/$SCHEME/$SCHEME.ipa
    23 
    24 
    25 echo -e "============First Build Clean============"
    26 ## 清理缓存
    27 xcodebuild clean -workspace $SPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE}
    28 
    29 echo -e "============Build Clean============"
    30 ## 输出关键信息
    31 echo -e "  TARGET_NAME    : ${TARGET_NAME}"
    32 echo -e "  BUILD_TYPE    : ${BUILD_TYPE}"
    33 echo -e "  SORCEPATH    : ${SORCEPATH}"
    34 echo -e "  ARCHIVEPATH    : ${ARCHIVEPATH}"
    35 echo -e "  EXPORTPATH    : ${EXPORTPATH}"
    36 echo -e "  EXPORTOPTIONSPLIST    : ${EXPORTOPTIONSPLIST}"
    37 
    38 echo -e "============Build Archive============"
    39 
    40 ## 导出archive包
    41 xcodebuild archive -workspace ${SPACE} -scheme ${SCHEME} -archivePath ${ARCHIVEPATH}  -configuration ${BUILD_TYPE}
    42 
    43 echo -e "============Build Archive Success============"
    44 
    45 echo -e "============Export IPA============"
    46 
    47 ## 导出IPA包
    48 xcodebuild -exportArchive -archivePath ${ARCHIVEPATH} -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}
    49 
    50 echo -e "============Export IPA SUCCESS============"
    51 
    52 ## 编译完成时间 20181030_0931
    53 BUILD_DATE="$(date +'%Y%m%d_%H%M')"
    54 
    55 ## info.plist路径
    56 PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_PATH}/${TARGET_NAME}/Info.plist"
    57 ## 取版本号
    58 BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
    59 ## 取build值
    60 VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
    61 ## ipa更名规则  项目名V版本_年月日_时分
    62 IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
    63 ## 更名后ipa路径
    64 EXPORTPATHNEWIPA=$EXPORTPATH/$IPANAME
    65 
    66 echo -e "============Export end :${BUILD_DATE}============"
    67 echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
    68 echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============"
    69 
    70 ## IPA更名
    71 cp $EXPORTPATHIPA $EXPORTPATHNEWIPA
    72 
    73 echo -e "============Create New Name Success============"
    74 
    75 ## 删除老IPA
    76 ##rm $EXPORTPATHIPA
    77 
    78 ##echo -e "============Delete Old Name Success============"

    执行脚本,如果在执行pod update 时报错 pod: command not found

    /Library/Tomcat8/temp/jenkins1548742361760571620.sh: line 3: pod: command not found
    Build step 'Execute shell' marked build as failure

    解决办法看这里:https://www.jianshu.com/p/3ef37b9538bf

    解决办法是:

    出现这个问题可能是因为你没有设置pod的运行路径,解决方法如下
    第一步:打开Jenkins,然后在Jenkins左侧的菜单中找到 系统管理--->系统设置--->全局属性,然后找到Environment variables(中文:环境变量)并且勾选。
    第二步:打开你的终端,在终端中输入echo $PATH,终端会打印出一串字符串,几个路径,复制该路径,返回到Jenkins中
    第三步:会让填写一个键值对,键默认填写PATH,值填写你从终端复制的那个字符串,点击保存,完成,构建该项目。

     



     5.将ipa文件上传蒲公英

    参照:

    pytho脚本-上传apk至蒲公英

     

    6.构建成功,在构建历史中展示二维码

    jenkins插件set build description使用规则

     

    7.收集编译成功物

    每次完成构建后,编译生成的文件较多,但是并不是所有的文件都是我们需要的。

    通常情况下,我们可能只需要其中的部分文件,例如.ipa/.app/.plist/.apk等,这时我们可以将这部分文件单独收集起来,并在构建页面中展示出来,以便在需要时进行下载。

    要实现这样一个功能,需要在【Post-build Actions】栏目中新增Archive the artifacts,然后在Files to archive中通过正则表达式指定成果物文件的路径。

    设置完毕后,每次构建完成后,Jenkins会在Console Output中采用设定的正则表达式进行搜索匹配,如果能成功匹配到文件,则会将文件收集起来。

    8.自定义build名字

      在Build History列表中,构建任务的名称默认显示为按照build次数递增的BUILD_NUMBER。有时候我们可能想在build名称中包含更多的信息,例如包含当次构建的SCHEMECONFIGURATION,这时我们就可以通过修改BuildName实现。

      Jenkins默认不支持BuildName设置,但可通过安装build-name-setter插件进行实现。安装build-name-setter插件后,在配置页面的Build Environment栏目下会出现Set Build Name配置项,然后在Build Name中就可以通过环境变量参数来设置build名称。

      例如,要将build名称设置为上面截图中的StoreCI_Release_#130样式,就可以在Build Name中配置为${SCHEME}_${CONFIGURATION}_#${BUILD_NUMBER}

    除了在Build Name中传递环境变量参数,build-name-setter还可以实现许多更加强大的自定义功能,大家可自行探索。

     

    如果想在buildName中加入启动构建的用户名,可以参照Jenkins获取运行job的用户名

    9.通过git parameter动态选择仓库中的分支进行打包

     参照:

    jenkins-参数化构建(三)插件:Git Parameter

    https://www.cnblogs.com/zhaojingyu/p/9862443.html

     

    遇到的问题及解决办法:

    搭建jenkins:

    初次打开jenkins页面一片空白的解决办法

     

    其它配置:

    JENKINS针对不同项目组对用户进行权限分配

     

    感谢大佬:

    提供了很多思路: 

    https://debugtalk.com/post/iOS-Android-Packing-with-Jenkins/

     

  • 相关阅读:
    MMU_段式映射
    MMU段式映射(VA -> PA)过程分析
    NOR FLASH驱动程序
    PCB上 如何显示 汉字
    poj1273 Drainage Ditches
    poj2349 Arctic Network
    poj3660 Cow Contest
    poj3259 Wormholes
    poj3159 Candies
    poj1011 Sticks
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11221267.html
Copyright © 2020-2023  润新知