Jenkins实现自动化打包

对于一个开发来讲,Xcode手动打包是比较耗时的,而且是没有很大技术含量的工作。自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给系统去做。下面我介绍jerkins实现自动打包方案:

什么是Jenkins

Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

Jenkins的安装

具体安装的步骤可以参考这篇文章

Jenkins配置

安装完成之后,在浏览器中输入http://localhost:8080 就会进入Jenkins启动页面

截屏2021-11-08 上午8.38.21.png

找到Jenkins安装的目录,在Jenkins目录下/Home/secrets/initialAdminPassword这个目录,打开initialAdminPassword然后把密码复制出来粘贴到这里输入框

点击继续进入这个页面,点击建议安装的插件(默认左边这个选项)

截屏2021-11-07 下午2.56.02.png

然后就耐心的等待插件的安装

截屏2021-11-07 下午2.58.20.png

再然后就是创建第一个管理账户,就按着提示一步步走下来,这样就初始化配置完成了。

Jenkins配置插件

接下来就可以配置Jenkins常用到的插件了,选择系统管理-》插件管理-》可选插件。 安装GitLab插件["GitLab Plugin"、"Gitlab Hook Plugin"]和Xcode插件["Xcode integration"]

注意:有个重要的插件需要安装,安装[Keychains and Provisioning Profiles Management],但是这个最新版本的Jenkins安装完这个插件后,选择了文件点击upload一直没有反应是个Bug,需要在安装jerkins版本的时候选择旧版的安装,具体可以参看这篇文章:Mac Jenkins环境搭建

当jerkins插件都安装完毕后,需要重启jerkins,然后才能使用刚安装的插。 重启完成之后,点击系统管理,滚动到页面最下方,发现了【Keychains and Provisioning Profiles Management】这个插件

截屏2021-11-07 下午3.46.48.png

Keychains and Provisioning Profiles Management插件配置
  • Keychains文件目录在~/Library/Keychains,注意找到后需要把文件复制一份改成后缀名**.keychain** ,因为插件不允许上传后缀是keychain-db 文件。Description这个可以自定义,然后打开钥匙串,找到开发者证书,把名字复制出来粘贴在Code Signing Identity选项里。

截屏2021-11-07 下午4.00.06.png

  • Provisioning Profiles文件目录是:~/Library/MobileDevice/Provisioning Profiles,找到对应项目的描述文件上传。

截屏2021-11-07 下午3.50.03.png

这样就配置好了证书和描述文件

截屏2021-11-07 下午3.54.38.png

安装完了这个,我们就可以配置一个构建项目了。

Jenkins的使用

创建任务

截屏2021-11-07 下午3.18.35.png

截屏2021-11-07 下午3.19.56.png

配置一下General参数

截屏2021-11-07 下午3.22.45.png

配置源码管理

打开自己的项目,复制项目链接填入Repository URL,然后点击Credentials右边的添加,主要是为了拉取项目使用,会展示出下图所示。有两种选择,使用账户密码或者使用SSH

截屏2021-11-07 下午3.29.41.png

添加完之后会自动检查你添加的凭证是否正确,错误是会有报错信息的

截屏2021-11-07 下午3.24.53.png

截屏2021-11-07 下午3.28.27.png

提示:关于怎么配置SSH,首先检查是否配置过SSH,在终端执行命令 ls -al ~/.ssh,会存在以下两种情况:

  1. 如果配置过会输出id_rsa 和 id_rsa.pub,则证明配置过;
  2. 如果没有配置过,则执行命令ssh-keygen -t rsa -C "[email protected]",就会生成id_rsa 和 id_rsa.pub文件;

直接在终端输入vim ~/.ssh/id_rsa.pub,把输出的内容复制到gitLab配置SSH,在上面配置凭证那里也添加一下。

构建触发器这个配置项假如有需求的,可以根据自己的需求进行配置

设置构建环境

iOS打包需要签名文件和证书,所以我们勾选“Keychains and Code Signing Identities”和“Mobile Provisioning Profiles”。上面已经配置过这个插件的内容了,会自动填充相应的内容

截屏2021-11-07 下午5.12.26.png

设置构建,有两种选择:

使用脚本构建,增加Shell脚本
#!/bin/sh -l
#项目名
TARGET_NAME="TestDemo"

#证书
CODE_SIGN_DISTRIBUTION="XXXXX"

#info.plist路径
project_infoplist_path="./${TARGET_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="${TARGET_NAME}_V${bundleShortVersion}_${DATE}.ipa"

#要上传的ipa文件路径,这里我将ipa包放在用户目录下的archive文件夹中
IPA_PATH="$HOME/archive/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt

#获取权限,这个是电脑密码›
security unlock-keychain -p "XXXXX" $HOME/Library/Keychains/login.keychain
# //下面2行是没有Cocopods的用法
# echo "=================clean================="
# xcodebuild -target "${TARGET_NAME}"  -configuration ‘Debug’ clean

# echo "+++++++++++++++++build+++++++++++++++++"
# xcodebuild -target "${TARGET_NAME}" -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

#//下面2行是集成有Cocopods的用法
echo "=================clean================="
xcodebuild -workspace ${project_scheme}.xcworkspace -scheme "${TARGET_NAME}"  -configuration 'Debug' clean

echo "+++++++++++++++++build+++++++++++++++++"

xcodebuild -workspace ${project_scheme}.xcworkspace -scheme "${TARGET_NAME}" -sdk iphoneos -configuration 'Debug' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'

#//打包输出ipa
xcrun -sdk iphoneos PackageApplication "./Debug-iphoneos/${TARGET_NAME}.app" -o ${IPA_PATH}

#上传到蒲公英
uKey="XXXXXX"

#蒲公英上的API Key
apiKey="XXXXXX"

#蒲公英版本更新描述,这里取git最后一条提交记录作为描述
pgyer_desc=`git log -1 --pretty=%B`

#要上传的ipa文件路径
echo $IPA_PATH

#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@${IPA_PATH}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "buildUpdateDescription=${pgyer_desc}" http://www.pgyer.com/apiv2/app/upload

#通知钉钉@对应的同学,同样通知到企业微信也是可以的
qrUrl="上传蒲公英包的URL"

#对应钉钉的链接
curl 'https://oapi.dingtalk.com/robot/send?access_token='
 -H 'Content-Type: application/json' 
 -d '{
     "msgtype": "markdown",
     "markdown": {
         "title":"新包",
         "text": "#### iOS新包 \n > \n > ![screenshot]('${qrUrl}')"
     },
      "at": {
          "atMobiles": [
              "艾特谁填写谁的手机号码"
          ]
      }
 }'
echo -e "\n UPLOAD TO PGYER SUCCEED \n"

复制代码
使用Xcode进行构建

项目使用了cocoapods管理第三方库,所以先需要增加了构建脚本shell。记得一定要加pod前面的语句,不然pod语句会出错。

#bin/bsah - l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
cd $WORKSPACE/TestDemo
/usr/local/bin/pod update --verbose --no-repo-update

复制代码

截屏2021-11-09 上午11.11.12.png

接下来添加xcode构建工具,首先配置General build settings

截屏2021-11-09 上午10.40.49.png

截屏2021-11-09 上午10.41.34.png

截屏2021-11-09 上午10.41.44.png

配置Code signing & OS X keychain options

截屏2021-11-09 上午10.42.02.png

配置Advanced Xcode build options

截屏2021-11-09 上午10.50.17.png

关于插件上传蒲公英的文档:www.pgyer.com/doc/view/je…

然后保存,点击构建

截屏2021-11-07 下午6.21.26.png

截屏2021-11-07 下午6.35.09.png

截屏2021-11-07 下午6.37.49.png

构建过程中出现的问题可以参考:www.jianshu.com/p/8b2fc2da0…

至此完成了一整套的构建流程

一般这样配置完就可以成功打包了,在整个配置过程中,都不能粗心大意的随意设置。这就是整个的打包过程,欢迎大家提出更好的改进意见和建议。

猜你喜欢

转载自juejin.im/post/7028010280575565838