Jenkins自动化打包整套流程说明

       最近公司要将Jenkins自动化构建工具搭建起来,网上百度了一下,这方面的介绍真是百家讲坛,非常的零散,而且都是针对自己当时的项目情况做的脚本,直接跑到自己的Jenkins里面,报错,报错,报错,一脸懵逼,确实也难为了能写这些的战友们,因为每个人的项目结构真的区别太大了,有的工程文件包含多个工程文件,有的用pods,有的不用pods等等,需求也不一样,脚本参数设置也各有不一,甚至有的只是需要jerkins帮忙启动一下脚本而已,下面来说说我对于Jenkins的搭建踩过的坑。

1.先讲怎么卸载Jenkins,原因就是针对大多数按照常规方式安装Jenkins的战友们会发现,Jenkins对于我们整个mac的文件操作是没有权限的,Permission denied!!!,这是个神坑。。。

解决办法就是,不要使用jenkins.pkg包直接安装jenkins,它会在./share目录下创建一个jenkins文件夹,对于本地admin管理下的所有文件操作都没有权限,改了各种权限配置,居然都是个坑,最终的结果是localhost:8080都跑不起来了,没办法,这里建议大家,如果是Jenkins.pkg包安装的就先卸载了吧。

卸载命令(建议按顺序执行):

$ /Library/Application Support/Jenkins/Uninstall.command

$ sudo rm -rf /var/root/.jenkins ~/.jenkins   #删除一些遗忘的设置

$ sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

$ sudo rm /Library/LaunchDaemons/org.jenkins-ci.plist

$ sudo rm -rf /Applications/Jenkins “/Library/Application Support/Jenkins” /Library/Documentation/Jenkins

$ sudo rm -rf /Users/Shared/Jenkins # 删除Jenkins文件夹里面所有的目录

$ sudo dscl . -delete /Users/jenkins # 删除User和Group

$ sudo dscl . -delete /Groups/jenkins

$ sudo rm -f /etc/newsyslog.d/jenkins.conf

$ sudo rm -f /etc/newsyslog.d/jenkins.conf # 以下命令也被卸载脚本中较新版本的 jenkins 脚本

$ pkgutil –pkgs | grep ‘org\.jenkins-ci\.’ | xargs -n 1 sudo pkgutil –forget

2.开始安装Jenkins,在终端命令行之行安装程序,具体流程参照:详细安装Jenkins流程

1.安装brew

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

2.安装java环境

$ brew cask install java

3.安装jenkins

$ brew install jenkins

4.执行Jenkins(这里要在本地浏览器中打开,localhost:8080)

$ java -jar /usr/local/Cellar/jenkins/2.49/libexec/jenkins.war –httpPort=8080 //2.49是指Jenkins的版本号

5.链接launchd配置文件

$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents

6.启动jenkins

$ launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

7.停止Jenkins

$  launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

3.前面的流程走完,就默认大家已经安装好Jenkins了,接下来需要在Jenkins里面创建一个项目,这个步骤比较简单,就不作赘述,简单说明一下jenkins里面的一些有用的配置吧。

1.Jenkins可以做参数化配置,这个需要和脚本结合起来,在脚本中预留参数位置.(这里就使用Shell脚本作为说明)

2.源码管理,Jenkins为我们做好了Git/SVN的代码管理流程,其实也可以不使用Jenkins的代码管理,但是既然用到了Jenkins,还是用它的比较好,因为它的关于代码管理的选项做的非常好,比较每次update代码前,先做一次reverse操作,就很不错啊。既然用Jenkins的源码管理,那么我们的代码最好放在Jenkins的workflow里面。

3.启动执行Shell脚本,这是个人认为作用最大的点,帮我们执行脚本,并将脚本的执行过程和echo全部显示出来。

4.下面结合具体Shell脚本讲述jenkins打包。

checkout_name=”tdxUpdateVersion” # 这个是从SVN上checkout下代码后的文件目录(如果使用Jenkins自身的代码管理,这个参数不需要)

project_name=”tdxApp”  # 工程名,这个必须和可执行文件同名

# 配置项目版本

targetProject_destination=”generic/platform=iOS” # 这个参数都是这样写的,不需要做修改

configuration=”Release” # 打包的模式

scheme=”$project_name” # 这个这样写吧

workspace_name=”${project_name}.xcodeproj” # 工程执行文件

# 目录配置(以这个为基本路径)

save_path=”/Users/chuancaiios/Desktop/CCZQ_IPA” # 这个是所有逻辑的基本路径,这个在Jenkins里面配置后,根据Jenkins的配置做修改

# 可执行工程目录(必须在这个目录下进行)

excutePath=”${save_path}/${checkout_name}/AppIOS/AppBeta”

# 编译打包成功后的文件

archive_path=”$save_path/${project_name}.ipa.xcarchive”

# ipa包路径(取出最终ipa包)

ipa_path=”$save_path/${project_name}.ipa”

# 所有执行命令的日志重定向写入log.txt中

log_path=”${save_path}/log.txt”

# 配置签名证书、描述文件

codeSignIdentity=”iPhone Distribution: ***** ****** Co., Ltd.”

provision_UUID=”71565455-****-492c-9635-********”

# 配置蒲公英(暂不配置)

#upload_path=”$save_path/${project_name}.ipa”

#pgy_userKey=”a512b58c56285d23456e011fgh706509″

#pgy_apiKey=”ab9c240d2efg9hi17j9642k3l5mnop5q”

# 删除旧源码目录

#echo “正在删除旧源码”

#rm -rf “$checkout_path” >> $log_path

# 新建源码目录

#echo “正在创建新的源码目录”

#cd “$save_path” >> $log_path

#pwd

#mkdir “$checkout_name” >> $log_path

# 从svn导出最新代码

#echo “正在从svn下载最新的源码”

#svn checkout “$svn_path” “$checkout_path” –username “$svn_name” –password “$svn_password” >> $log_path

# 删除旧文件

echo “正在删除旧文件”

rm -rf “$archive_path” >> $log_path

rm -rf “$ipa_path” >> $log_path

rm -rf “$log_path” >> $log_path

# 进入可执行文件目录下(./AppIOS/AppBeta)

cd “${excutePath}” >> $log_path

pwd

# 清理构建目录

echo “正在清理工程缓存文件…”

xcodebuild clean -project ${project_name}.xcodeproj -scheme ${scheme} -configuration ${configuration} >> $log_path

echo “正在打包…”

# 归档(其他参数不指定的话,这里使用.xcodeproj文件配置)

xcodebuild archive -project ${workspace_name} -scheme ${project_name} -destination ${targetProject_destination} -configuration ${configuration} -archivePath ${ipa_path} CODE_SIGN_IDENTITY=”*******” PROVISIONING_PROFILE=${provision_UUID}

# 导出IPA

echo “正在导出ipa包…”

xcodebuild -exportArchive -archivePath $archive_path -exportPath ${ipa_path} -exportOptionsPlist “${save_path}/EnterpriseExportOptionsPlist.plist”

# 上传IPA到蒲公英(暂不上传)

#echo “正在上传ipa到蒲公英”

# curl -F “file=@$upload_path” -F “uKey=$pgy_userKey” -F “_api_key=$pgy_apiKey” https://www.pgyer.com/apiv1/app/upload

还要注意的是,需要为打出的ipa包做一个plist文件${save_path}/EnterpriseExportOptionsPlist.plist放在对应的目录下,有需要的可以留言,说到最后,感觉也无法说清,最多还是根据自己的情况来定的。可视化的东西用语言表述,真的很难。望大家理解,大家遇到这类的问题,随时留言,很乐意解答。

    原文作者:Jeff_Kitty
    原文地址: https://www.jianshu.com/p/ea8af6955518
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞