使用 Jenkins 构建 iOS 应用程序

lif*_*foo 5 xcode continuous-integration hudson ios jenkins

我想自动化目前在台式计算机 (Mac) 上完全手动的 iOS 应用程序构建过程。在 Gnu/Linux 机器上运行的中央构建服务器 Hudson/Jenkins 已经在组织基础架构中可用。

是否可以使用 Jenkins 构建这个 iOS 应用程序,使用像Jenkins 分布式构建这样的工具(因此将 Mac 机器配置为从属机器)?

你有任何例子,知道任何技术或替代方法吗?

Spi*_*010 6

在使用我能找到的唯一教程(不幸的是,所有教程都恰好是 2015 年或更早的教程)辛苦工作了比我想要的时间更长的时间之后,我终于启动并运行了我的 Jenkins 作业。因此,我发布了一份快速清单,其中列出了我为在公司本地 Mac mini 上成功设置 Mac 从属设备所做的工作。与你类似@lifeisfoo,我的组织目前有一个在外部服务器上运行的 Jenkins 实例。此处可查看 2018 年设置 Mac 从属设备的链接。 在 Mac OS 上设置 jenkins 从站

在成功创建节点并且启动代理从 Jenkins 实例正确连接到 Mac 从属设备后设置 Jenkins 作业方面,请参见下文:

  1. 在大多数情况下,从管理 Jenkins 部分设置新项目(又名新作业)是不言自明的
    • 大多数较旧的教程都是准确的,因为您需要一些插件 Github、钥匙串和配置文件管理(虽然仍然不是 100% 您需要这个插件,但拥有和设置它仍然很好)以及我下载并安装但从未使用过的其他插件包括我没有在作业设置的“构建”部分中使用 Xcode 插件。
    • 填写项目名称,检查Github项目并添加以.git/结尾的url,将此项目限制为您为Mac从机创建的节点,在源代码管理中我们使用Git,我再次添加了url(以.git结尾)这次没有“/”,使用我的用户名和密码创建了新凭据,*/main 在分支构建部分中,将用于 GITScm 轮询的 Github 挂钩触发 URL 添加到我组织的 Github 帐户 Web 挂钩部分
  2. 在构建中我只使用了 Execute Shell 并 cd 到 /Users/jenkins/path/to/file
    • 目前它不是工作区,因此执行 Shell 中的命令如下

xcrun xcodebuild -project ProjectName.xcodeproj \ -configuration Release \ -destination 'platform=iOS Simulator,name=iPhone 6s' \ -allowProvisioningUpdates \ CODE_SIGN_STYLE='Automatic' PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING_PROFILE} CODE_SIGN_IDENTITY=${CODE_SIGNING_IDENTITY}

截至 2018 年 2 月,由于需要包含一些 cocoa pod SDK,我已将其更改为工作区,因此我现在使用以下“执行 Shell”组合。

下面的脚本是每次运行 pod install (因为我将 Pods/ 添加到 gitignore 文件中,仅将 Podfile 和 Podfile.lock 推送到 Jenkins 从中提取的存储库)

cd /Users/jenkins/Desktop/projectFileWhere.xcworkspaceExists /usr/local/bin/pod install

下面是在另一个“执行Shell”中运行项目构建

xcrun xcodebuild -workspace ProjectName.xcworkspace \ -scheme NameOfScheme \ -configuration Release \ -destination 'platform=iOS Simulator,name=iPhone 6s' \ -allowProvisioningUpdates \ CODE_SIGN_STYLE='Automatic' PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING_PROFILE} CODE_SIGN_IDENTITY=${CODE_SIGNING_IDENTITY}

注意:- 我不确定这是否绝对必要,但我确保将最新的 GitHub 存储库克隆到我的 Mac 从机中,并复制到 .xcodeproj 之前存在的同一项目目录中。- 我一开始也愚蠢地没有意识到 .xcworkspace 没有被推送到我的 GitHub 存储库,因为 build/*.xcworkspace 仍然在我的 gitignore 文件中。删除它,重新推送到仓库并克隆到Mac奴隶,这都是肉汁宝贝

  • 我看到了 CODE_SIGN_IDENTITY 的许多变体,其中一些特别告诉我添加 DEVELOPMENT_TEAM= 和 DISTRIBUTION_TEAM= 等参数,但这些不是必需的。坦率地说,我不知道 -allowProvisioningUpdates 或 CODE_SIGN_STYLE='Automatic' 是否必要,但它对我有用。
  • 我最终选择了执行 Shell 构建步骤,而不是构建参数的 Xcode 插件,因为我能够更轻松地操作构建参数,并根据 Jenkins 实例中每个构建的控制台输出中出现的错误对其进行测试。最后,还有更多更好的文档和帮助尝试使用命令行理解 Xcodebuild,这本质上就是 Execute shell 所做的事情,因此我更喜欢它。

我想写这篇文章来指出我最终做了什么来构建作业,以及构建作业时遇到的问题很容易解决,直到代码签名中的最后一个找不到我的配置文件我在 Xcode 的项目文件目标和项目中使用的证书/团队:

1)在此 Wiki 中,我执行了标题“Xcode 项目设置”下的段落中所述的操作。 https://github.com/cyupa/JenkinsCI-iOS

2) 您需要拥有 Mac Slave 上的开发和分发证书的私钥和公钥,才能通过 Jenkins 构建 Mac Slave。还需要在 Mac 从属设备上为每个帐户配置配置文件以及正确的捆绑包 ID。

https://blog.noser.com/streamlined-ios-development-with-jenkins-and-wireless-app-distribution-2/

3) 将开发和分发的钥匙串和证书移至登录或您创建的任何其他唯一钥匙串,但对于每个私钥,右键单击(两根手指点击)私钥并获取信息 -> 访问控制 -> 允许 /usr/ bin/codesign 或所有访问此项目的应用程序

4)在Mac从机上的Xcode项目的构建设置中(确保您已从存储库下载到Mac从机并在Mac从机的Xcode应用程序上打开它一次),将构建设置更改为自动和/或仅更改如果需要的话,它是目标应用程序的一般内容并进行测试。

5) 解决这个问题花了我 2 天时间的最后一个难题是简单地将我的钥匙串添加到安全列表中,以便 Xcode 可以使用其所需证书的配置文件。

如果您将钥匙串添加到安全列表中,不确定我上面关于访问控制的建议是否是必要的,但我保留了它并且它对我有用。也许我稍后会进行实验,看看实际需要什么和不需要什么,但现在,这是关键。您可能会收到“代码设计失败,退出代码 1”,这都是同一件事。解锁的终端命令是:

security list-keychains -s ~/Library/Keychains/{login, "any other keychains you want added to security list"}.keychain

如果您在 Jenkins 中看到任何构建错误,例如......

未找到“com.organization.Target”的配置文件:Xcode 找不到任何与“com.organization.Target”匹配的 iOS 应用程序开发配置文件 代码签名错误:SDK“iOS”中的产品类型“应用程序”需要代码签名11.2'

……那么你就知道它很可能是钥匙串访问的东西,仅此而已。

事后看来,我现在意识到我在其他一些 Stack 帖子和下面链接的一两个其他博客帖子中看到了同样的建议,但这不是我当时的问题,所以我完全忘记了它,现在讨厌自己没有阅读在这些帖子上速度较慢。那好吧。至少我现在得到了一个绿色圆圈。


Phi*_*lip 5

是的,它可能。我们正在这样做,而且效果很好。您可以通过选择Xcode-plugin在 Jenkins 中配置 Xcode-slave 。网上有很多不错的教程。

看看这一个对于初学者。