使用Jenkins进行iOS的持续集成 - eju-front/mobile-solution GitHub Wiki

使用Jenkins进行iOS的持续集成

作者: 易居创研 前端技术部

文档版本:Creative Commons 3.0许可证 署名-禁止演绎)

本文涉及使用Jenkins对iOS进行持续集成,以提高项目的自动化过程

目录

  • 安装 Jenkins
  • [可选] 配置 Jenkins主题
  • 申请蒲公英账号 - 内测程序分发
  • 创建持续集成项目
  • 执行编译过程
  • 获取结果

安装 Jenkins

iOS的编译一定基于Mac设备进行,所以Jenkins也必须安装在一台Mac设备上。这里给出的是在Mac设备上安装Jenkins的过程。

参考:在 Mac mini 上架设 Jenkins 服务器来运行 iOS 测试

使用homebrew安装Jenkins

$ brew install jenkins

然后链接 launchd 配置文件

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

可以更改此 plist 来进行一些自定义的配置,详细列表可以参考 这里

如果要其他机器也可以访问,把 plist 里的 --httpListenAddress=127.0.0.1 删掉即可

修改完后,在终端执行

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

即可启动 Jenkins

接着用浏览器访问 localhost:8080(默认配置),就可以看到 Jenkins 的 web 界面了

[可选] 配置 Jenkins主题

在Jenkins中提供了一种插件叫做: Simple Theme Plugin 用来做Jenkins的主题配置,配合Jenkins Material Theme进行使用,可以满足一般的视觉需求。

参考:Jenkins Material Theme

  1. 进入管理插件目录,通过右上角Filter选择安装Simple Theme Plugin插件

  2. 安装完成之后回到系统管理进入系统设置找到Theme一栏,填写Jenkins Material Theme的CSS地址

  3. 保存之后,刷新系统,就可以看到新的页面了

申请蒲公英账号 - 内测程序分发

登陆蒲公英站点,注册账号。蒲公英会提供api接口可以通过接口上传编译之后的app,具体查看这里的文档,我们会在完成编译之后上传编译好的app到蒲公英的服务器上。

创建持续集成项目

  1. 点击新建创建新的项目

  2. 选择自由风格的软件项目并且输入项目名,并点击OK进行确认

  3. 进入项目的具体配置,我们需要配置价格内容:参数、源码和脚本

    • 配置参数,在General选项卡中 选择参数化构建过程,点击添加参数并且选择String Parameter

    • 配置源码,在源码管理项,选择Git或者SVN

      在这里,Repository URL是git地址,Credential通过点击边上的Add 按钮进行添加,Branches to build 使用参数配置中的commitId,每次发布的时候填写对应提交的commit进行发布

    • 配置脚本

      在出现的脚步配置框中添加如下代码

      if [ "$commitId" == "" ];then
        echo "请填写Commit ID."
        exit 2
      fi
      
      # ipa的编译配置
      developmentTeam=PRLC4HQG59
      projectName=DashboardDemo
      codeSigningIdentifier="Apple Worldwide Developer Relations Certification Authority"
      provisioningProfile="/Users/leewind/Library/MobileDevice/Provisioning Profiles/c1333c69-2f70-4e96-b665-d063b712d8c0.mobileprovision"
      bundleIdentifier="com.cric"
      
      # 蒲公英账号配置
      uKey="替换"
      apiKey="替换"
      password="替换"
      
      #build文件夹路径
      buildPath=$WORKSPACE/build
      #生成的app文件目录
      appdirname=Distribute-iphoneos
      
      cd $WORKSPACE
      
      # xcodebuild clean
      xcodebuild clean
      
      # xcodebuild build
      xcodebuild \
      -workspace $WORKSPACE/${projectName}.xcworkspace \
      -scheme ${projectName} \
      -configuration \
      CODE_SIGNING_IDENTITY="${codeSigningIdentifier}" \
      PROVISIONING_PROFILE="${provisioningProfile}" \
      CODE_SIGNING_REQUIRED=YES \
      PRODUCT_BUNDLE_IDENTIFIER="${bundleIdentifier}" \
      DEVELOPMENT_TEAM="${developmentTeam}" \
      CONFIGURATION_BUILD_DIR="$WORKSPACE/build/${appdirname}/"
      
      #创建ipa-build文件夹
      if [ -d ${buildPath}/ipa-build ];then
        rm -rf ${buildPath}/ipa-build
      fi
      mkdir ${buildPath}/ipa-build
      
      ipaName="${projectName}_$(date +"%Y%m%d")"
      echo $ipaName
      
      #xcrun打包
      xcrun -sdk iphoneos PackageApplication -v ./build/${appdirname}/*.app -o ${buildPath}/ipa-build/${ipaName}.ipa || exit
      
      appPath="${buildPath}/ipa-build/${ipaName}.ipa"
      curl -F "file=@${appPath}" -F "uKey=${uKey}" -F "_api_key=${apiKey}" -F "publishRange=2" -F "password=${password}" http://www.pgyer.com/apiv1/app/upload
      

      其中要更新脚本内容

      # ipa的编译配置
      
      # 开发账号的组织单位,可以在钥匙串中获得
      developmentTeam=PRLC4HQG59
      # 项目名称
      projectName=DashboardDemo
      # 开发账号的签发者常用名称
      codeSigningIdentifier="Apple Worldwide Developer Relations Certification Authority"
      # 描述文件注册之后的文件地址,一般都在~/Library/MobileDevice/Provisioning Profiles/下
      provisioningProfile="/Users/leewind/Library/MobileDevice/Provisioning Profiles/c1333c69-2f70-4e96-b665-d063b712d8c0.mobileprovision"
      # bundle identifier项目中会有具体指定
      bundleIdentifier="com.cric"
      
      # 蒲公英账号配置
      uKey="替换"
      apiKey="替换"
      password="替换"
      

      根据实际的情况进行配置

      点击确认完成设置

执行编译过程

进入编译

点击Build With Parameters填写commitId,点击开始构建进行编译

下面可以看到编译过程,直到编译完成

获取结果

所有编译完成之后,上蒲公英,你可以获得本次编译提交的ipa的下载页面,例如:http://www.pgyer.com/0PNt