lif*_*foo 5 xcode continuous-integration hudson ios jenkins
我想自动化目前在台式计算机 (Mac) 上完全手动的 iOS 应用程序构建过程。在 Gnu/Linux 机器上运行的中央构建服务器 Hudson/Jenkins 已经在组织基础架构中可用。
是否可以使用 Jenkins 构建这个 iOS 应用程序,使用像Jenkins 分布式构建这样的工具(因此将 Mac 机器配置为从属机器)?
你有任何例子,知道任何技术或替代方法吗?
在使用我能找到的唯一教程(不幸的是,所有教程都恰好是 2015 年或更早的教程)辛苦工作了比我想要的时间更长的时间之后,我终于启动并运行了我的 Jenkins 作业。因此,我发布了一份快速清单,其中列出了我为在公司本地 Mac mini 上成功设置 Mac 从属设备所做的工作。与你类似@lifeisfoo,我的组织目前有一个在外部服务器上运行的 Jenkins 实例。此处可查看 2018 年设置 Mac 从属设备的链接。 在 Mac OS 上设置 jenkins 从站
在成功创建节点并且启动代理从 Jenkins 实例正确连接到 Mac 从属设备后设置 Jenkins 作业方面,请参见下文:
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奴隶,这都是肉汁宝贝
我想写这篇文章来指出我最终做了什么来构建作业,以及构建作业时遇到的问题很容易解决,直到代码签名中的最后一个找不到我的配置文件我在 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 帖子和下面链接的一两个其他博客帖子中看到了同样的建议,但这不是我当时的问题,所以我完全忘记了它,现在讨厌自己没有阅读在这些帖子上速度较慢。那好吧。至少我现在得到了一个绿色圆圈。