iOS使用Jenkins自动打包ipa且生成二维码

这篇文章提供的方法比较多坑, 请参考另外一篇最新的:https://www.jianshu.com/p/c9075e7005e2 , 最新的方法已经实践目前已经使用.

本文概述

本文将会带领大家一步步实现iOS自动打包, 自动生成ipa安装包和二维码供给测试工程师进行扫描安装.
网络上关于这类博客众多且繁杂, 本人亲测很多已经过时, 大家不要再重复踩坑了. 以下方法流程是我今天亲自用新电脑走的流程, 现详细分解给大家.

一. 安装Java JDK

Jenkins依赖了Java环境,所以在安装Jenkins前,要确保mac系统要安装了Java

  1. 终端命令查看mac电脑是否安装了java sdk, 输入查看java 版本的命令行:
    **注意**: 必须安装jdk 8---jdk 11 之间的版本, 版本太高的话就启动不来jenkins
java --version

新电脑肯定会报 "No Java runtime present, requesting install"

  1. 安装Java JDK网址: Java SDK, 安装包下载完直接安装即可.
  • (如果你下载有pkg安装包, 可以通过命令行: open /Library/Java/JavaVirtualMachines 打开需要安装到java jdk的目录 把jdk解压包放里面去)

二. 安装home brew (跳过吧, 先看第三步, 第二步现在太多坑了 (还是tomcatyun'xjenkins安装包的方式比较好) )

jenkins的命令行下载安装需要借助homebrew, 所以要先下载安装homebrew

  1. 终端命令查看mac电脑是否安装了brew, 输入查看brew 版本的命令行:
brew --version

新电脑肯定会报 "command not found brew"

  1. 安装brew网址: https://brew.sh/
    image.png
  • brew网址说得很清晰, 在命令行输入以下这行命令就能安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

踩坑啦掉坑啦:
终端报错:
xcode-select: error: invalid developer directory '/Library/Developer/CommandLineTools'
Failed during: /usr/bin/sudo /usr/bin/xcode-select --switch /Library/Developer/CommandLineTools

  • 提示为无效的CommandLineTools, 新版本的xcode默认没有安装这个东西了.
    -解决办法1: 手动下载安装, 下载网址: https://developer.apple.com/download/more/
    image.png

    -解决办法2: 命令行安装: 新打开一个终端输入:
  xcode-select --install

一步步确认安装就好了.

  • 然后重新在命令行输入以下这行命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

又掉坑啦😿
以上这个官方最新的命令行并不能成功安装brew
经过一翻操作, 找到能解决的办法

`Homebrew`以前的默认安装命令行:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

`安装以上这行代码成功了!`

*******************************************************************************************************
如果你安装失败, 请使用下面的命令:
/usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)"
//上面脚本中使用了中科大镜像来加速访问。
安装使用到的脚本源码在此 [homebrew-install](https://link.zhihu.com/?target=https%3A//github.com/ineo6/homebrew-install) ,仅修改了仓库地址部分,不会产生安全隐患,

三. 安装Jenkins

安装Jenkins有两种方法

  • 使用命令行安装 (太多坑了 brew总是更新安装失败)
  • 使用jenkins.pkg安装 (推荐使用) jenkins下载地址: https://www.jenkins.io/download/
1

2

安装jenkins完成后, 输入命令行, 打开运行jenkins,

 java -jar  /Applications/Jenkins/jenkins.war 

然后打开浏览器输入网址: http://localhost:8080/ 进入以下页面

image.png

这里需要我们输入Jenkins的密码, 这个安装密码保存在我们安装jenkins的目录下,
输入下面这句命令行: 进入jenkins的安装目录, 由于secrets文件夹是保密了的不可以读写, 需要你查看此文件夹的简介, 然后修改为可以读. 密码就在secrets文件夹里面的initialAdminPassword文件里面, initialAdminPassword文件也是受保护的需要你修改可读写属性.

open /Users/Shared/Jenkins/Home/

打开initialAdminPassword文件复制里面的密码, 粘贴到浏览器上面的输入框, 出现下面插件图示,

image.png

直接下一步
560

如果没出现上面图示, 刷新一下页面就会出现. 这里需要等待20分钟左右...看你们公司网速吧...
这里尽量多安装你所需要的插件, 如果这里不安装, 后面需要你手动查询安装

安装成功后, 输入个人账户,


image.png

jenkins算是启动成功了!


image.png

重启jenkins: 在浏览器输入地址: localhost:8080/restart

四. 配置Jenkins

创建新项目

image.png

Jenkins创建新项目配置环境


image.png
  • 配置 general


    image.png

    image.png

    image.png

    配置好的generea最终在打包界面长成这样:


    image.png
  • 配置 Source Code Management
    image.png

    配置ssh, 至于怎样生成SSH请查看我的文章: https://www.jianshu.com/p/7bce93f452b5
    image.png

    image.png

    id_rsa 文件里面的内容记得要copy 全部 !!!
    -还需要把git路径确认一下
    image.png

    image.png
  • 配置打包的环境名称:


    image.png
  • 打包执行脚本的配置:


    image.png

    相关脚本如下

#修改版本号,build号
# 2020.3.27号修改为: 去掉设置版本号选项,直接使用工程中的版本号

file_path=${PWD}/Configs/Environment/$server.xcconfig
 

echo "使用Jenkins自增编号 ${BUILD_NUMBER}"

sed -i "" 's/APP_BUILD_NUMBER = .*/APP_BUILD_NUMBER = '"${BUILD_NUMBER}"'/g' ${file_path}

echo "开始自动化构建"

echo "${PWD}"   

archive_path=${PWD}/archive/${BUILD_NUMBER}

archive_file_name=${archive_path}/Jimu.xcarchive

workspace_path=${PWD}/Jimu/Jimu.xcworkspace


#install cocoapods

cd Jimu


#更新Blockly仓库,确保能够找到最新的版本
pod repo update JimuSpecs

pod install

#加密编译参数V2.3.0版本(更新于2019.7.4 Glen)
SWIFTFLAG="-Xllvm -ipo -Xllvm -ipo-percentage=80 -Xllvm -ipo-loop=1 \
-Xllvm -transform-operator-identically -Xllvm -split-basic-block"

if [ "$configuration" = 'Inhouse' ]; then

export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist

echo "开始打InHouse版本的包"

elif [ "$configuration" = 'Debug' ]; then

export_options_path=${WORKSPACE}/export/ExportOptionsInHouse.plist

echo "开始打Debug版本的包"

elif [ "$configuration" = 'Release' ]; then

echo "关闭FileShare"
/usr/libexec/PlistBuddy -c 'Set:UIFileSharingEnabled bool false' ${PWD}/Jimu/Info.plist

export_options_path=${WORKSPACE}/export/ExportOptionsAppStore.plist

echo "开始打Release版本的包"

fi

configuration=$configuration$server

if $encryption;  then

#加密归档
xcodebuild -toolchain "cn.ijiami.obf" -workspace ${workspace_path} -scheme Jimu \
-configuration ${configuration} OTHER_SWIFT_FLAGS="${SWIFTFLAG}" \
archive -archivePath ${archive_file_name}

else 

#不加密归档
xcodebuild -workspace ${workspace_path} -scheme Jimu -configuration ${configuration} \
archive -archivePath ${archive_file_name}

fi

#导出ipa包
xcodebuild -exportArchive -archivePath ${archive_file_name} -exportPath ${archive_path} \
-exportOptionsPlist ${export_options_path}
echo "构建完成,创建对应的配置文件以及二维码"


# 到这里,在archive/自增编号/目录下存在两个文件:Jimu.ipa和Jimu.xcarchive

#重命名 【分支名_证书配置_服务器配置_构建自增编号】

name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}


# 2020.3.27更新,使用本地服务器存储plist文件

# 重命名
mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa

# 移动到apache目录下
cp ${PWD}/archive/${BUILD_NUMBER}/$name.ipa /Users/max/Sites/Jimu/ipa/$name.ipa


echo "创建对应的配置文件以及二维码"
cd /Users/max/Sites/Jimu/ipa
#复制配置文件,生成当前版本的配置文件
cp Jimu.plist $name.plist

full_path=https:\/\/10.10.1.74\/Jimu\/ipa\/${name}.ipa

#修改ipa包下载路径
/usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist

#给读写权限
chmod -R 777 /Users/max/Sites/


#以下是旧版的脚本内容
#echo "====== Rename ipa file to: "$name" ======"
#mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.ipa ${PWD}/archive/${BUILD_NUMBER}/$name.ipa 
#mv ${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive ${PWD}/archive/${BUILD_NUMBER}/$name.xcarchive 

#echo "====== Create plist file for this version ipa ======"

#cd ../plist/Jimu3.0

#cp Jimu3.0.plist $name.plist #复制配置文件,生成当前版本的配置文件

#full_path=http:\/\/10.10.1.74:8080\/job\/Jimu3.0\/${BUILD_NUMBER}\/artifact\/archive\/${BUILD_NUMBER}\/${name}.ipa

#修改ipa包下载路径
#/usr/libexec/PlistBuddy -c 'Set items:0:assets:0:url '"${full_path}"'' $name.plist

#git status
#git checkout
#git pull
#git add -A
#git commit -m 'add new version plist file'
#git push origin master
#git status
#2020.3.27更新,使用本地的服务器存储plist文件
echo "创建二维码"

name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}

url="https://10.10.1.74/Jimu/download.html?version=$name"

myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/


#以下是旧版的脚本内容

#echo "====== Create QRCode for this version ======"

#name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}

#url="http://10.10.1.74:8080/Jimu3.0/download.html?version=$name"

#myqr $url -n $name.jpg -d ./archive/${BUILD_NUMBER}/

#echo "====== Create QRCode Success ======"

if $uploadDYSMFile; then 

echo "上传dSYM文件到bugly进行分析"

#dSYM文件路径
name="jimu"_${branch##*/}_${configuration}_${server}_${BUILD_NUMBER}
path=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/dSYMs
dsymFilePath=${path}/Jimu.app.dSYM

#将dSYM文件压缩成zip文件
zip -q -r -o ${path}/Jimu.app.dSYM.zip ${dsymFilePath}

zipFilePath=${path}/Jimu.app.dSYM.zip


#根据bundle id 确定bugly平台的appKey和appId

if [ "$configuration" = 'Inhouse' ]; then

appid="5e31ae0d11"
appkey="91927657-0c29-4c2e-8d7a-4248891a53ae"
bundleId="com.ubtechinc.jimu2s"

else 

appid="47342e2edb"
appkey="a1166164-edb1-4f46-956e-0e871fbd0c1d"
bundleId="com.ubtechinc.jimu"

fi

#读取版本号
plistFilePath=${PWD}/archive/${BUILD_NUMBER}/Jimu.xcarchive/Info.plist
version=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleShortVersionString" ${plistFilePath})
buildNumber=$(/usr/libexec/PlistBuddy -c "Print ApplicationProperties:CFBundleVersion" ${plistFilePath})
productVersion="${version}(${buildNumber})"

echo "读取版本号结果: ${productVersion}"

echo "开始上传dSYM文件"

curl -k "https://api.bugly.qq.com/openapi/file/upload/symbol?app_key=${appkey}&app_id=${appid}" \
--form "api_version=1" --form "app_id=${appid}" \
--form "app_key=${appkey}" --form "symbolType=2" \
--form "bundleId=${bundleId}" \
--form "productVersion=${productVersion}" \
--form "fileName=Jimu.app.dSYM.zip" \
--form "file=@${zipFilePath}" --verbose ||true

echo "上传dSYM文件结束"

fi

编译完成后的动作


image.png
archive/${BUILD_NUMBER}/*.ipa, archive/${BUILD_NUMBER}/*.jpg, archive/${BUILD_NUMBER}/**/Jimu.app.dSYM

五. 最终打出来的ipa包 和 二维码

image.png

注意注意!

近期反馈homebrew安装更新很多问题, 安装jenkins还有一个解决方案, 用Tomcat配合jenkins.war运行Jenkins项目

    1. 需要去Tomcat官网下载一个包安装在电脑上http://tomcat.apache.org/
      image.png
  • 2、安装在资料库的目录下:例如:/Users/XXX(个人电脑名称)/Library

  • 3、然后进入Tomcat 的bin目录下


    image
  • 4/出现红色标识时,需要增加权限,输入: chmod +x *.sh,配置所有权限

 chmod +x *.sh
  • 5、启动Tomcat
 ./startup.sh
  • 6、在浏览器打开:localhost:8080 ,打开界面如下:


    image

    (可能出现的问题:端口号被占,需要更换端口号,更换端口号步骤,(Mac版与Windows更改文件一致));

  • 7、去Jenkins官网下载一个war包

  • 8、把解压的war放入Tomcat的webapps的目录下:


    image
  • 9、在浏览器输入网址 localhost:8080/jenkins/
    此时页面可能在刷新,我们只需要等待几分钟即可,然后就会跳转到如下页面:
    这里的密码输入参考本文章上面, 有提到.


    image

注意 **jenkins会自动安装在root目录下, 请把它重置放在你的用户目录下, 这样才能有权限执行 **

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容