iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)

说明: iOS的持续集成一定要在Mac上进行

Jenkins安装

使用brew 进行安装 Homebrew
默认已经安装好brew了,下面开始操作了

一.Jenkins命令行安装
  • 在终端输入命令行 brew install Jenkins, Jenkins 基于java环境,所以命令执行后,可能会看到
    Jenkins: Java 1.7+ is required to install this formula.
    JavaRequirement unsatisfied!
    
    You can install with Homebrew-Cask:
      brew cask install java
    
  • 然后根据提示 在终端中输入 brew cask install java ,安装过程需要输入Mac登录密码
  • 安装java环境完成之后,提示 🍺 java was successfully installed!
  • 安装java成功之后,重新执行 brew install Jenkins, 即可.等待完成
  • 结束以后,默认端口8080,终端打印日志可以看到安装成功
如果需要修改端口: 
1.   到java安装环境路径下 cd /usr/local/Cellar/Jenkins/2.73/libexec 
2.   指定端口启动jenkins  java -jar ./Jenkins.war --httpPort=8889

安装成功提示:

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins安装成功提示.jpeg

  • 然后按照日志中的提示: 在终端直接执行Jenkins,等待运行完毕即可
二.Jenkins配置
  • 打开网址 localhost:8080. 第一次打开,会进入到初次登录页面 《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins初次登录页面.png
  • 按照提示进入到路径文件夹下获取密码即可,也可以从刚刚终端输出位置找到默认密码即可 /Users/用户名/.Jenkins/secrets/initialAdminPassword

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins终端密码提示.png

后续步骤如下

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins配置选择页.png

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins安装进度页.png

安装过程保证网络良好,如果卡着不动了,参考下面一个朋友的解决办法.

  • 就在上图所示的这一步下载的时候,基本上最后肯定有几个插件没有下载好,然后就停在这里不动了,不管怎么都不动,然后关机重启,重新进入.wars所在的文件路径,在终端执行java -jar Jenkins.war --httpPort=8888命令才能在输入http://localhost:8888后能登录Jenkins登录界面,才跳到下图所示的管理员用户注册页面

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins注册页面.png

然后就是常规注册,不表!

三.Jenkins 插件安装
  • 登陆后 -> 系统管理 -> 管理插件 -> 可选插件, 搜索需要的插件,选中之后拖到底部,点击安装

    《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins 管理页面.png
    《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins 管理插件.png
    《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins 选择插件.png

    安装下列插件,拖到底部,安装所选插件,(有时候会卡主,需要手动刷新), 也可以选择自动一段时间后刷新页面即可

    GitLab plugin
    - Gitlab是一个用于代码仓库管理的开源项目,用来在Jenkins上管理源代码
    - 当git上的代码被提交 / 创建一个合并请求 / 现有合并请求关闭/合并时, 
    - GitLab 会记录构建状态,然后触发Jenkins,将Git上代码获取到Jenkins 上
    
    Xcode integration   
    - Xcode 编译插件,相当于将Xcode的编译过程的命令行操作,通过界面化展示了出来,Jenkins 调用本地Xcode进行编译,相当于讲一个Xcode 装在了Jenkins上
    
    Credentials Plugin
    - 管理证书插件
    
    Keychains and Provisioning Profiles Management  
    - 钥匙串开发者证书 及 项目描述文件
    
说明: 评论里有个哥们说:

最新的Jenkins直接会从资源库的Provisioning Profiles读取Profiles,模板的 Mobile Profiles 也不用勾选了,大家可以试一下

  • 安装完成后 -> 系统管理 -> Keychains and Provisioning Profiles Management (如果没有的话,查看上一步,安装Keychains and Provisioning Profiles Management插件)

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins密码描述文件设置.png

这个地方需要注意,需要上传两个文件,一个是钥匙串 keychains 文件(用于打开钥匙串中的相应的开发证书),一个是项目所需的描述文件(可以将生产描述文件 和 开发描述文件都传上去)

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins证书和描述文件具体设置页.png

上传到Jenkins上的钥匙串需要输入密码, 上传的描述文件,需要指定一个存放路径,路径自己指定,Jenkins能找到就行

钥匙串的开发证书名称获取: 钥匙串 -> 找到对应开发证书 -> 右键显示简介 -> 细节 -> 常用名称就是我们需要的证书完整名称了,填入到上图对应位置即可

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins钥匙串路径.png

描述文件,就是我们从苹果开发者网站下载的,UUID就是证书的标识,系统会自动识别,不需要手动输入

设置完毕之后点击保存即可,需要注意的是,两个上传操作最好分开进行,因为上传另一个时,之前输入的内容可能会消失,这个地方需要注意下,好好检查下,是否输入完毕.

三.项目创建

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins新建项目.png

  • 点击Jenkins主目录下的新建按钮,进到新建项目页面,输入项目名称,选择构建一个自由风格的软件项目

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins具体新建项目.png

  • 创建完毕之后,可以在Jenkins主界面,看到项目,点击进入项目,在左侧选项栏中,选择配置,进入配置界面
  • 在构建步骤,需要添加脚本和xcode设置,后面会讲

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins项目设置.png

构建新版本时,之前的ipa如果想保留,可以设置ipa包名称按照时间戳命名

Git设置,Credentials相当于告诉GitLab插件,GitHub账号和密码,在自己的电脑上一般不用设置,需要设置的话,可以设置账号和密码,也可以上传密钥方式

当前打包触发方式,需要自己设置,我这里没有设置,可以定时,或者安装githook插件

构建环境中钥匙串和描述文件,一般在第一次设置时,会不显示我们之前上传的钥匙串和描述文件内容,保存退出,再次进入一次就可以了

Git上只有podfile文件,没有将pods文件上传上去,所以要执行一个脚本更新一下,pod:添加构建步骤 -> Execute shell,需要放到最前,因为pods要在编译前就添加

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo ++++++++++++++++++++++++++++++++++
pod install --verbose --no-repo-update
echo ++++++++++++++++++++++++++++++++++

添加xcode运行步骤,需要注意的是:如果项目使用pods需要设置scheme和xcworkspace 同名

Code signing & OS X keychain options步骤,要输入Development Team ID这个就是开发证书编号,就是我们在描述文件和钥匙串上传的那个开发证书最后几位数字

打包成功之后,将ipa上传到蒲公英是一个不错的选择,需要ukey和apikey,蒲公英

#蒲公英上的User Key
uKey="你的ukey,蒲公英获取"
#蒲公英上的API Key
apiKey="蒲公英获取"
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@/Users/用户名/.jenkins/workspace/Jenkins_Demo/build/Jenkins_Demo.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}"  http://www.pgyer.com/apiv1/app/upload
echo http://www.pgyer.com

在本地项目提交到Git时,项目中最好设置好项目配置,什么证书啊,描述文件啊,等等,因为Jenkins的打包代码是你提交的代码,我们应该按照打包的设置设置好,然后提交.Jenkins相当于一个运行脚本和记录的平台,打包环境的配置还是要自己来的

准备工作完成以后,点击保存,回调项目目录,进行构建

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins本地项目设置.png

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins本地项目设置2.png

这个可以通过通过终端,cd到项目路径下, xcodebuild -list ,查看当前项目是否有schemes(一个workspace可以包含多个project,一个project可以包含多个target,Scheme包含了所有的target集合,用于指定一个应用),如果没有的话,需要到 Product --> Scheme --> Manage Schemes 找到和项目同名的scheme

shared打开,使得Jenkins也可以进行调用编译

三.运行Jenkins项目
  • 配置完成以后,回到项目页面点击立即构建,构建当前项目.

    《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins立即构建.png

  • 构建过程

《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins更新Git代码.png
《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkinspofile文件更新.png

  • 打包完成之后,将ipa包上传到蒲公英上,蒲公英会给注册手机发送短信,当然你也可以在Jenkins中加入邮件通知,通过邮件获取结果

    《iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)》 Jenkins上传到蒲公英.png

  • 关于Linux下Jenkins管理iOS代码的问题,可以参考这篇文章,当然你也可以问我,后续有时间在写吧,坑还是很多的

jenkins 更新描述文件

  1. 将 Xcoode signing 改成手动模式 (debug 和 release)手动选择对应的描述文件

  2. 从 Xcode 9 开始,打包需要一个plist文件,用来指定打包的类型和文件,如果修改了描述文件名称和类型,也需要更改相应的配置

  3. 如果还不行的话,将之前的该项目描述文件删除,因为打包时,会自动选择一个默认的描述文件进行打包

写在最后:

当你看到 Finished : SUCCESS的时候,表示你已经成功了,在成功的路上,试验了很多次,记得看到一个简友说他试了40多次.从不知道Jenkins是啥,一步步的走来,一个个坑,一个个踩,成功了,却觉得理所当然.希望你可以成功.有问题和错误欢迎留言!

参考文章,相信你看完一定会有收获

从零开始写个自动打包IPA脚本

iOS持续集成:Jenkins+GitLab+蒲公英

Project、Target、Workspace and Scheme

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