使用Jenkins构建iOS应用程序

时间:2015-09-02 08:09:27

标签: ios xcode jenkins continuous-integration hudson

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

是否可以使用Jenkins构建这个iOS应用程序,使用像Jenkins distributed builds这样的工具(以及将Mac机配置为奴隶)?

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

2 个答案:

答案 0 :(得分:2)

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

首先查看此one

答案 1 :(得分:2)

我终于让我的詹金斯工作完成并运行了更长时间,而不是我想要使用我能找到的唯一的教程,这些教程都发生在2015年或更早。所以我发布了一个真实的快速清单,列出了我在公司内部本地Mac mini上成功设置Mac奴隶的所做的事情。与您@lifeisfoo类似,我的组织目前在外部服务器上运行Jenkins实例。 此处显示了根据2018设置Mac从站的链接。 Setting up jenkins slave on Mac OS

在成功创建节点并且Launch Agent从Jenkins实例正确连接到Mac从属设备后设置Jenkins作业方面,请参阅以下内容:

  1. 在大多数情况下,设置一个新项目a.k.a.来自Manage Jenkins部分的新工作是不言自明的
    • 大多数较旧的教程都是准确的,因为你需要一些插件Github,Keychains和Provisioning Profiles Management(仍然不是100%,你需要这个插件,但仍然很好拥有并设置它)以及我下载和安装的其他插件但从未使用,包括我没有在作业设置的构建部分使用Xcode插件。
    • 组成项目名称,检查Github项目并添加以.git /结尾的URL,将此项目限制为您为Mac从站创建的节点,在源代码管理中我们使用Git并且我再次添加了url(结束在.git中没有" /"这一次,用我的用户名和密码创建了新的凭证,* / main在分支构建部分,为我的组织添加了GITScm勾选触发网址给GITScm轮询' s Github帐户网络钩子部分
  2. 在Build中我只使用了Execute Shell并将cd放入/ Users / jenkins / path / to / file
    • 目前它不是工作区,因此命令在Execute Shell
    • 中如下所示
  3. 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月,我已将其更改为工作区,因为需要包含一些可可pod SDK,因此我现在使用以下组合"执行Shell" s。

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

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

    以下是在另一个" Execute 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 repo克隆到我的Mac slave机器中,然后放入.xcodeproj之前存在的同一个项目目录中。 - 我也愚蠢地没有意识到.xcworkspace没有被推送到我的GitHub仓库,因为build / * .xcworkspace仍然在我的gitignore文件中。删除它,重新推送回购并克隆到​​Mac奴隶,这是所有肉汁宝宝

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

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

    1)在这个Wiki中,我直接在标题" Xcode项目设置"中完成了段落中所述的内容。 https://github.com/cyupa/JenkinsCI-iOS

    2)你需要在Mac Slave上拥有开发和分发证书的私钥和公钥,以便通过Jenkins构建到Mac Slave。需要在Mac Slave上为每个帐户配置配置文件,并使用正确的Bundle ID。

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

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

    4)在Mac slave上的Xcode项目的Build设置中(确保你已经从你的repo下载到Mac slave并在Mac Slave的Xcode应用程序上打开它一次),更改构建设置是自动的和/或只是在目标应用程序的常规中进行更改,并根据需要进行测试。

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

    如果您将密钥链添加到安全列表中,但是我保留了它以及它对我有用,那么不确定我上面提到的有关访问控制的内容是否必要。也许我稍后会进行实验,看看实际需要什么,不需要什么但是现在,这才是关键。退出代码1和#34可能会导致代码失败。这都是一回事。要解锁的终端命令是:

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

    Sooooo如果你在Jenkins中看到任何构建错误,比如.......

    没有关于' com.organization.Target'的个人资料被发现:Xcode无法找到任何与App.organization.Target'匹配的iOS应用开发配置文件。 代码签名错误:产品类型需要代码签名'应用程序'在SDK' iOS 11.2'

    .......然后你知道它很可能是一个钥匙串访问的东西,没有别的。

    事后我意识到,我在其他一些Stack帖子和下面链接的一两篇其他博客文章中看到了同样的建议,但当时我的问题不是我所以我完全忘记了它现在我不喜欢自己因为这些帖子不慢读。那好吧。至少我现在正在获得一个绿色圆圈。