W

创建者:王建军

成长是一条并不平坦的路


欢迎来到王建军的个人博客!如有错误,可加我微信“伟大领袖毛主席教导我们说:”告知或发送邮件至wangjianjun0730@126.com

Jenkins+github+fir持续集成iOS项目

一.Jenkisn安装和启动


安装Jenkins通过homebrew安装比较方便,有的伙伴是通过jenkins主页下载软件的方式,手动安装的,我这里贴出主页链接 jenkins官网本文就不在赘述,请自行百度。

  • 2.确认你的电脑已经安装有Homebrew

Homebrew 简称 brew,是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或者卸载软件.

直接在终端输入以下命令,查看当前设备的Homebrew版本信息:

brew -v

(如果当前设备未安装Homebrew终端上回报错,这时请直接copy下列命令到终端安装Homebrew:)

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

回车执行上方命令,安装全都是自动化的,很简单。
  • 3.安装jenkins
命令行直接输入:

$ brew install jenkins

这一步需要留意Administrator password,这个Administrator password会在后面设置用到,尽量copy出来备用。

  • 4.启动jenkins
命令行直接输入:

$ jenkins

二.注册Jenkins账号


  • 1.保持jenkins开启状态,打开浏览器输入:http://localhost:8080,就能进入jenkins页面.

  • 2.jenkins页面设置

    初次使用kenkins会先看到以下页面

    Administrator password的设置区分是脚本安装,还是dmg文件安装:
    a ~> 如果是脚本安装的话,可以从终端直接查阅password;

    b ~> 如果是dmg文件安装的话,必须从文件查看(安装目录—>secrets—>鼠标右击—>显示属性—>共享与权限—>修改成读与写—>initialAdminPassword—>鼠标右击—>显示属性—>共享与权限—>修改成读与写—>双击打开initialAdminPassword)

  • 3.注册并登陆jenkins账号

三、Jenkins插件


  • 1.安装插件plugin

    左边栏选择系统设置

    选择功能列表中的管理插件

    搜索并安装下列插件

      1.Global Post Script Plugin (配置打包脚本)
    	
      2.Git Parameter Plug-In (用于配置打包分支)
    	
      3.Keychains and Provisioning Profiles Management (用于配置项目发布/测试证书)
    	
      4.Git plugin/GitHub plugin/Git client plugin/Email Extension Plugin
      (这些插件jenkins默认已经安装,如果没有需要手动安装)
    	
      5.Xcode integration 
      此插件是用于Xcode配置的,这里注意不用下载
      因为Xcode9打包流程有变化,不管用了,下了也白瞎,文章后面再讲。
    

    已经安装的插件在“可选插件”中搜索是搜索不到的,如果你发现你需要的插件搜不到,可能说明它已经默认安装了,到已“已安装”看看是不是已经安装过了。如果你使用GitLab或者SVN请百度搜索相应的插件,本文demo项目代码都在Github仓库里,网上有大量的资料可查。

  • 2.管理证书和描述文件插件配置
    (使用Keychains and Provisioning Profiles Management插件)

    进入 ~/Library/Keychains/ 复制该目录下的login.keychain-db到桌面,去掉后面的-db,修改命名为login.keychain备用.

    回到jenkins页面进入如下操作进入证书插件管理页面

    点击”选择文件”,选择刚才复制到桌面的login.keychain,点击upload上传。

    Keychains配置:

      Filename: 填写上传的文件名:login.keychain
      Password: 开机密码
      Description: 可以不填
      Code Signing Identity : iPhone Distribution: xxxxx Company of China, Ltd. (下面介绍了获取方法)
    

    Provisioning Profiles配置:

      Filename: 填写当前证书对应的描述文件名称 (下面介绍了获取方法)
      Provisioning Profiles Directory Path: /Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles  (这是jenkins存放证书对应的描述文件的地方,通过finder到文件夹目录下看看就知道是啥)
      UUID:3ff1xxx-xxxx-xxxx-xxxx-xxxxxbe09d1e7  (下面介绍了获取方法)
    

    这里需要说明,如有多个项目并且证书不同的话,可以在Keychains下面的Add Code Signing Identify添加签名标示;另外把对应的新添加的描述文件拷贝到桌面,点击最上面的“选择文件”按钮上传。完成后,下面的Provisioning Profiles会出现新增的描述文件名称和对应的UUID.

    获取工程的CODE_SIGN_IDENTITY和PROVISIONING_PROFILE

    Keychains配置和Provisioning Profiles配置中的Code Signing Identity,UUID,的获取可通过如下方法:

    • 右键 xxx.xcodeproj 显示包内容 然后打开project.pbxproj文件
    • command F 搜索 CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE

    上图中可以获取Keychains配置的Code Signing Identity,Provisioning Profiles配置的Filename(PROVISIONING_PROFILES_SPECIFIER对应的值)和UUID(PROVISIONING_PROFILES对应的值)

    • 点击save保存设置

四、新建项目

五、构建配置

  • 1.源码管理

打开创建的jenkins项目

源码管理配置

  a.点选Git选项
  b."Repository URL"处填写Github仓库地址
  c.点击"Repository URL"下方"Credentials"右侧的"Add"按钮 添加Github账号和密码
  • 2.分支配置

    上面点选”参数化构建过程”,会出现Git Paraeter配置,这个就是我们下载的Git Parameter Plug-In插件。Name一栏的名字可以随便取但是要保证这里填写的名称要跟源码管理中的Branch Specifier (blank for ‘any’)一栏就需要用$ + 上面填的名称.

  • 4.构建配置

    需要注意和了解:
      1.手动创建四个(根据需要创建,如果只需要打测试和发布两种包,只需创建两种即可)对应的plist文件到源项目的根目录,并传到git仓库。
      2.在打包时Xcode需要根据exportOptions.plist文件打出对应类型的包(Xcode9).
      3.我这里是专门创建了一个ExportPlist文件夹存放自建的ExportOptions.plist文件。(注意脚本中的路径能找到这些文件,不然打包会出错)
    

      需要注意和了解:
      1.图上已经给出了plist文件的样式,需要根据你的要求修改对应的配置.
      2.也可以用xcode打包导出后,让xcode生成ExportOptions.plist文件,我们copy出来用也行(推荐),但注意文件名要跟自动打包脚本中的保持一致,这样可以保证exportOptions.Plist不会配置错误)
    

      需要注意和了解:
      1.这里需要注意的是 "#获取钥匙串权限:-p" 这里填开机密码;后面的"~/Library/Keychains/login.keychain-db" 此时应该填login.keychain-db,而不是login.keychain。login.keychain-db的路径是固定的。
      2.Mac系统10.12版本以后login.keychain都变成了login.keychain-db,所以低版本的mac上找不到login.keychian文件。
      3.脚本中"fir login -T 479d380eae1xxxxxxxxxx8a953a8ca27"的"479d380eae1xxxxxxxxxx8a953a8ca27"是fir的APIToken,你需要登录fir账号,鼠标移动到右上角的按钮会显示出APIToken。
    

下面贴出脚本源码供大家复制粘贴(需要注意的部分我在脚本中也加了注释,注意看注释!

#!/bin/sh -
export LANG=en_US.UTF-8

# 工程名(根据项目自行填写)
APP_NAME="MyDemos"

# TARGET名称(根据项目自行填写)
TARGET_NAME="MyDemos"

# 工程根目录#工程源码目录(这里的${WORKSPACE}是jenkins的内置变量表示(jenkins job的路径):/Users/pingankeji/.jenkins/workspace/Mydemos/)   
# ${WORKSPACE}/MyDemos/ 中的MyDemos根据你的项目自行修改
CODE_PATH="${WORKSPACE}/MyDemos/"

# 证书
# 证书配置根据自己的项目自行修改
CODE_SIGN_DISTRIBUTION="iPhone Developer: hxxxxxx hxx (63xxxx9WZ9)"

# 存放ipa的文件夹名称(根据自己的喜好自行修改)
IPA_DIR_NAME="${TARGET_NAME}_IPA"

# 导出ipa包的路径
IPA_EXPORT_PATH=${CODE_PATH}${IPA_DIR_NAME}

# 导包方式(这里需要根据需要手动配置:AdHoc/AppStore/Enterprise/Development)
EXPORT_METHOD="Development"

# 导包方式配置文件路径(这里需要手动创建对应的XXXExportOptionsPlist.plist文件,并将文件复制到根目录下[我这里在源项目的根目录下又新建了ExportPlist文件夹专门放ExportPlist文件])
if test "$EXPORT_METHOD" = "AdHoc"; then
	EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportPlist/AdHocExportOptions.plist
elif test "$EXPORT_METHOD" = "AppStore"; then
	EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportPlist/AppStoreExportOptios.plist
elif test "$EXPORT_METHOD" = "Enterprise"; then
	EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportPlist/EnterpriseExportOptions.plist
else 
	EXPORT_METHOD_PLIST_PATH=${CODE_PATH}/ExportPlist/DevelopmentExportOptions.plist	
fi	

# 指ipa定输出文件夹,如果有删除后再创建,如果没有就直接创建
if test -d ${IPA_EXPORT_PATH}; then
	rm -rf ${IPA_EXPORT_PATH}
	mkdir -pv ${IPA_EXPORT_PATH}
 	echo ${IPA_EXPORT_PATH}
else
 	mkdir -pv ${IPA_EXPORT_PATH}
fi

# 删除工程文件
echo "+++++++++删除工程文件+++++++++"
rm -rf "${TARGET_NAME}.xcarchive"

# 进入工程源码根目录
cd "${CODE_PATH}"

# 更新pod
#/user/local/bin/pod update —verbose —no-repo-update

# 清除工程
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -configuration 'Release' clean

# 获取钥匙串权限(-p 后面的密码为你的开机密码)
/user/bin/security unlock-keychain -p "1XXXX6" ~/Library/Keychains/login.keychain-db

#将app打包成xcarchive格式文件(PROVISIONING_PROFILE后面是你配置的证书对应的描述文件UUID)
echo "+++++++++++++++++archive+++++++++++++++++"
xcodebuild  archive -workspace "${APP_NAME}.xcworkspace" -scheme "${TARGET_NAME}" -archivePath "${TARGET_NAME}.xcarchive" -configuration 'Release' PROVISIONING_PROFILE='e35fb68b-xxxx-xxxx-xxxx-966d73bcdfa2' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}"

# 将xcarchive格式文件打包成ipa
echo "+++++++++++++++++ipa+++++++++++++++++"
xcodebuild -exportArchive -archivePath "${APP_NAME}.xcarchive" -exportPath "${IPA_EXPORT_PATH}" -exportOptionsPlist ${EXPORT_METHOD_PLIST_PATH}

# 登录fir,此处将APIToken换成自己申请的APIToken(-T 后面是你的fir账号APIToken)
fir login -T 479d380eae1xxxxxxxxxx8a953a8ca27

# 发布到fir
fir publish ${IPA_EXPORT_PATH}/${APP_NAME}.ipa

六、开始构建

七、其他电脑控制你的mac打包上传

1.首先保证的电脑jenkins服务是开启的
2.获取电脑当前的ip

3.在他人的电脑浏览器输入:<你电脑的ip>:8080/login

好,现在请开始装逼…

最近的文章

Testflight 苹果测试平台

一.Testflight…

继续阅读
更早的文章

github pages + jekyll制作个人BLOG详细流程

一. Github Pages介绍 GitHub Pages 可以为你或者你的项目提供介绍网页,它是由 GitHub 官方托管和发布的。你可以使用 GitHub 提供的页面自动生成器,也可以做个人博客,是个轻量级的博客系统。它不需你自己搭建服务器,但是每一个github账号只能制作一个首页,下面讲讲详细的制作流程。二. Github二级域名创建 这一步Github Pages官网首页就有图文说明,但前提是你必须注册申请github账号,但是作为码农,github账号还是用该有的。 1...…

继续阅读