美文网首页Tool
Jenkins - iOS Build、Archive、Uplo

Jenkins - iOS Build、Archive、Uplo

作者: ienos | 来源:发表于2020-07-07 14:28 被阅读0次

Xcode 打包一定需要 苹果系统的电脑,以下均在 Mac 下操作

一、安装步骤

1. 安装 jenkins 前往 【官网

2. 选择 MacOS X 版本进行下载【下载连接

3. Jenkins 安装

  • rew install jenkins-lts

4. 运行 Jenkins

  • 终端运行 jenkins-lts
  • 浏览器打开 http://localhost:8080/

5. 解锁 Jenkins

  • 前往本地路径 cat /Users/iosuser/.jenkins/secrets/initialAdminPassword,复制密码并粘贴到输入框,点击继续按钮
image.png

6. 安装 Jenkins 插件

1592568762751-5b2a5b63d53f59bc.png

7. 创建 Jenkins 账号

1592568788249-0003346ca218ecaf.png

8. 欢迎来到 Jenkins!

1592568815124-9d1d8e1209e3b002.png

二、安装插件

前往 Manage Jenkins -> Manage Plugins 进行插件管理

image.png
  • Git , Gitlab , SVN , SSH Credentials — — 用于授权后拉取远程库的代码
  • Keychains and Provisioning Profiles Management — — 证书与描述文件的管理
  • Xcode integration — — Xcode 打包的插件,所以 iOS 的打包只能部署在Mac系统
  • Cocoapods — — 如果项目使用了 Cocoapods 插件 来获取依赖库
  • Email Extension Plugin — — 邮件插件
  • Locale — — 语言插件

下载过程中会比较慢,可以通过修改 default.json 文件提升下载速度

sed -i "" 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json

Manage Jenkins -> Configure System -> 在主目录下可以看到 Jenkins 路径,defalut.json 在 Jenkins 根目录的 ./updates 下


三、SSH 配置

一般会在项目中添加 Credentials,添加步骤如下:

1593313820116-fc7d74a193249262.png

选择 SSH Username with private key 类型

1593313900430-561700e41b818559.png

配置信息主要填一下几个

  • Username(用户名)
  • Private Key(私钥)
  • Passphrase(密码)

我们添加完 Credentials 之后可以在 Jenkins -> Credemtials(凭证)-> System -> Global credentials(unrestricted)编辑配置

四、简单执行一个项目

前往 Jenkins -> 新建 Item

1593313755549-99a7008a2ee4094d (1).png

新建完一个项目后,可以根据【SSH 配置】,然后配置完 Repository URLCredentials 进行保存

1593314409699-192662958f698587.png

点击 Build Now 可以开始第一次尝试构建项目

1593314502665-b0931885773f2ce5.png 1593314596710-b9edafaef1942aef.png

在构建历史中,我们可以看到构建进度,并且我们可以关闭此次构建,点击构建序列号可以进去查看构建详情

1593314664662-9c1ea35f89ae2339.png

控制台可以查看详细的报错信息,有利于我们定位问题

五、构建前的参数选择及填写

勾选 GeneralThis project is parameterized,然后开始添加参数

在下面例子,使用的是 Choice Paramenter(可选参数), 定义了 ENVIRONMENT 变量,之后可以使用 ${ENVIRONMENT}来引用该变量

1593483810371-2b5bab50f5865047.png

之后在 Build 之前就可以选择参数 ENVIRONMENT 的变量值

1593483966114-6838ec4f218dcd9f.png

六、Cocoapods

对于使用了 Cocoapods 的项目,但是没有上传 Pods 文件夹到仓库中,需要在构建项目前进行 pod install

1593764664726-439b3b3ce0e1e710.png
  • 这里用到 WORKSPACE 环境变量,使用变量用 ${} 将变量名括起来,为了防止变量名中存在空格执行有误,可以用 "" 双引号括起来
  • 如何查看 Jenkins 已有的环境变量
    前往 [JENKINS_URL]/env-vars.html/ 网页查看

如果跑 Jenkins 出现 pod install 慢,有可能是在向 Github 源项目进行 CloneCocoapods Cache (/Users/[USER]/Library/Caches/CocoaPods/Pods/Release) 没有缓存,这种情况需要开启代理,添加 git config --global,详细见上代码


七、邮件发送

系统有一个自带的邮件插件,可以用来测试邮件配置,前往 Jenkins -> Configure System -> 邮件通知

1593502023203-0f0dd84402d6e177.png
  1. 填写和勾选,以下几个选项 — — 填写 SMTP 服务器 / 用户默认邮件后缀 / 使用 SMTP 认证 / 用户名 / 密码 / 使用 SSL 认证 / SMTP 端口
  2. 发送邮件测试 — — 勾选通过发送测试邮件测试配置,然后填写 Test e-mail recipient(接收者邮件), 点击 Test configuration 测试邮件功能

安装 Email Extension Plugin 插件

Q: 在构建项目中添加发送邮件的任务 ?

安装完插件之后,在 Jenkins -> Configure System

image.png

添加构建后发送邮邮件组件

image.png

新增触发器、填写收件人、发送内容、主题

1593505168477-8874684336c2f92a.png

八、构建脚本

主要涉及到的 api

  • build 并导出 xcarchive — — xcodebuild -workspace xxx.xcworkspace -destination 'generic/platform=iOS' -scheme xxxx -configuration xxxx -archivePath xxxx.xcarchive archive build -allowProvisioningUpdates

  • xcarchive 导 ipa — — xcodebuild -exportArchive -archivePath xxxx.xcarchive -exportOptionsPlist xxxx.plist -exportPath xxxx

plist 文件主要为以下内容,填入 bundle_id、profile_name、method(打包方法)

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
   <dict>
    <key>provisioningProfiles</key>
    <dict>
    <key>${BUNDLE_ID}</key>
    <string>${PROFILE_NAME}</string>
    </dict>
    <key>method</key>
    <string>${METHOD}</string>
   </dict>
 </plist>
  • ipa 校验 — — xcrun altool --validate-app -f xxxx.ipa -t ios --apiKey xxxx --apiIssuer xxxx --verbose
  • ipa 上传 — — xcrun altool --upload-app -f xxxx.ipa -t ios --apiKey xxxx -apiIssuer xxxx --verbose
  • 登陆 fir — — fir login xxxx
  • 上传 ipa 到 fir — — fir publish xxxx.ipa -c xxxx

Jenkins 已有可用的环境变量

前往 [JENKINS_URL]/env-vars.html/ 网页查看

  • BRANCH_NAME — — 对于多分支项目,这将被设置为正在构建的分支的名称,例如,如果您希望从master部署到生产环境而不是从feature分支部署;如果对应某种更改请求,则该名称通常是任意的(请参阅下面的CHANGE_ID和CHANGE_TARGET);

  • CHANGE_ID — — 对于与某种更改请求相对应的多分支项目,这将被设置为更改ID,例如拉取请求编号(如果支持);其他未设置;

  • CHANGE_URL — — 对于与某种更改请求相对应的多分支项目,这将被设置为更改URL(如果支持);其他未设置;

  • CHANGE_TITLE — — 对于与某种更改请求相对应的多分支项目,这将被设置为更改的标题(如果支持);其他未设置;

  • CHANGE_AUTHOR — — 对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的用户名(如果支持);其他未设置;

  • CHANGE_AUTHOR_DISPLAY_NAME — — 对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的人名(如果支持);其他未设置;

  • CHANGE_AUTHOR_EMAIL — — 对于与某种更改请求相对应的多分支项目,这将被设置为建议更改的作者的Email地址(如果支持);其他未设置;

  • CHANGE_TARGET — — 对于与某种更改请求相对应的多分支项目,这将被设置为合并到的目标或者基础分支(如果支持);其他未设置;

  • BUILD_NUMBER — — 当前构建的编号,例如“4674”等

  • BUILD_ID — — 当前构建的版本ID,与构建的BUILD_NUMBER相同

  • BUILD_DISPLAY_NAME — — 当前版本的显示名称,默认为“# 4674”,即BUILD_NUMBER。

  • JOB_NAME — — 即此版本的项目名称,例如“foo”或“foo / bar”。

  • JOB_BASE_NAME — — 此构建的项目的短名称剥离文件夹路径,例如“bar / foo”的“foo”。

  • BUILD_TAG — — {BUILD_NUMBER}”的字符串。 JOB_NAME中的所有正斜杠(/)都用破折号( - )替换。方便地放入资源文件,jar文件等,以便于识别。

  • EXECUTOR_NUMBER — — 唯一编号,用于标识执行此构建的当前执行程序(在同一台计算机的执行程序中)。这是您在“构建执行程序状态”中看到的数字,但数字从0开始,而不是从1开始。

  • NODE_NAME — — 如果构建在代理上,则代理的名称; 如果在主版本上运行,则为“MASTER”;

  • NODE_LABELS — — 节点分配的空白分隔的标签列表。

  • WORKSPACE — — 作为工作空间分配给构建的目录的绝对路径。

  • JENKINS_HOME — — Jenkins用于存储数据的主节点上分配的目录的绝对路径。

  • JENKINS_URL — — Jenkins的完整URL,如http:// server:port / jenkins /(注意:仅在系统配置中设置Jenkins URL时可用)

  • BUILD_URL — — 此版本的完整URL,例如http:// server:port / jenkins / job / foo / 15 /(必须设置Jenkins URL)

  • JOB_URL — — 该作业的完整URL,例如http:// server:port / jenkins / job / foo /(必须设置Jenkins URL)

  • GIT_COMMIT — — The commit hash being checked out.

  • GIT_PREVIOUS_COMMIT — — The hash of the commit last built on this branch, if any.

  • GIT_PREVIOUS_SUCCESSFUL_COMMIT — — The hash of the commit last successfully built on this branch, if any.

  • GIT_BRANCH — — 远程分支名称,如果有的话。

  • GIT_LOCAL_BRANCH — — 本地分支名称,如果有的话。

  • GIT_URL — — 远程git仓库的URL。如果有多个,将会是GIT_URL_1,GIT_URL_2等。

  • GIT_COMMITTER_NAME — — 配置的Git提交者名称(如果有的话)。

  • GIT_AUTHOR_NAME — — 配置的Git作者姓名(如果有的话)。

  • GIT_COMMITTER_EMAIL — — 配置的Git提交者电子邮件(如果有的话)。

  • GIT_AUTHOR_EMAIL — — 已配置的Git作者电子邮件(如果有)。

  • SVN_REVISION — — 当前工作区的Subversion版本号,例如“12345”

  • SVN_URL — — 当前工作区的Subversion版本号,例如“12345”

Keychains and Provisioning Profiles Management

Step 1

Find Keychain 并上传到 后台 钥匙串有

  • 登录(login.keychain)
    前往 /用户/${User}/资源库/Keychains/ 该路径下只有 login.keychain-db,在网上找了其他文章,说是复制 login.keychain-db 修改名字为 login.keychain 并上传
  • 系统 (system.chain)
    存放的路径 /Library/Keychains/System.keychain

Step 2:

打开「钥匙串」 App,并点击上传对应的 keychain,找到对应的证书,复制名字后粘贴到 Code Signing identify

使用 login.keychain 之后,复制 Code Signing identify 之后无法在项目中选择,后面将证书复制到 「系统」中,并上传 system.keychain,将证书名字复制到 system.keychain 👇,之后解决了问题

Provisioning Profile

目前还未尝试使用 Jenkins 的 Provisioning Profile 去构建项目,只是添加 Profile Name 在命令行里面构建

Mac 存放的路径在 /用户/${User}/Library/MobileDevice/Provisioning Profiles

由于 Provisioning Profile 均以 ${UUID}.mobileprovision 很难辨别我们需要的 profile 是哪个,建议从 AppDevelop 后台直接下载我们需要的 profile,然后直接上传到 jenkins 后台

本地服务器映射到外网

默认端口号 8080,运行 Jenkins 可指定端口号 jenkins-lts --httpPort=8080

  • 前往 ngrok 下载可执行文件 exec 官网

  • 前往 ngrok 下载所在路径,执行 ./ngrok http localhost:80(也可直接将 exec 文件放在 /usr/local/bin 下然后直接 ngrok http localhost:80

    image.png
  • 执行结果 Forwording 那一行的地址就可以供外部访问

相关文章

网友评论

    本文标题:Jenkins - iOS Build、Archive、Uplo

    本文链接:https://www.haomeiwen.com/subject/itdovctx.html