Swift —在Bitbucket上的持续集成
本文是同时介绍TDD和多个CI概念的指南的一部分。 您可以在 此处 查看介绍性文章 。
当使用位桶时,我们将使用CircleCI来满足CI的需求,因为它与TravisCI非常相似且易于配置。 不幸的是,它仅适用于对我们不起作用的Linux机器(因为我们需要一台macOS机器来构建我们的xcode项目)。 但是CircleCI确实提供了为期两周的免费试用,因此您可以签出它,看看它是否值得。
让我们开始工作:
- 首先在CircleCI网站上创建一个帐户,然后对您的Bitbucket帐户进行配对(您也可以使用您的BitBucket凭据直接登录Travis,从而无需进行配对过程)。
- 从项目列表中选择所需的项目,以便CircleCI可以为其生成Webhook。
- 现在,CircleCI已挂接到您的项目上,并且当您的代码更改时,它会收到通知(默认情况下,它被设置为在每次推送以及合并时都运行)。
- 现在是时候告诉CircleCI每次对代码进行推送更改时要做什么。 为此,我们必须将一个文件添加到项目的根目录,并将其
circle.yml
。 CircleCI的配置方案需要更多的指令(与Travis相比),如果被多个文件分割,则更容易做到,这就是我们要做的。 - 首先在项目的根目录下创建一个
Scripts
文件夹。 现在创建以下文件(每个要点底部的文件名):
7.现在配置CircleCI并准备就绪! 提交并推送您的更改(确保包括.yml文件和所有脚本),应该通知CircleCI,它将开始构建您的项目并运行测试! 如果一切顺利,您应该得到一个类似于以下的屏幕:
有些不对劲? 请在下面发表评论,我将尽力帮助!
9.随着CircleCI的启动和运行,我们现在应该利用它的功能并使我们的CI工作流更加强大。
SwiftLint
Swiftlint是一种工具,可以帮助您识别和标记代码的某些部分,这些部分可能不遵循社区或您的团队所遵循的样式规则。
因此,它将帮助您坚持简洁的代码惯例,并在整个团队之间保持共同的风格。
Swiftlint可以在本地或CI服务器上运行。 让我们先在本地运行它:
- 首先在控制台上运行
brew update
和brew install swiftlint
,然后在转到项目的根文件夹后,运行swiftlint
。 而已! 短毛猫会检查您的代码并提出可能发现的任何问题!
2. SwiftLint的另一个优点是,您可以配置XCode来运行它,以便在每次构建后进行编码时都能得到实时警告! 为此,我们必须在Xcode的构建过程中添加一个新的“运行脚本阶段”,并包含以下脚本:
尽管非常有用,但SwifLint有时还是会有些干扰。 在某些情况下,您可能会收到您确实不想更改的代码的警告(例如上面的AppDelegate甚至是测试类,它们本来就很长)。 为避免这种情况,您可以配置.yml
文件以指定文件排除项。 我希望您更明确一些,并像
// swiftline:disable:next line_length
有了SwiftLint的本地部分,现在该让CircleCI处理它了。 首先,将新文件添加到Scripts
文件夹中:
现在是时候创建一个CodeCov帐户了。 使用您的Bitbucket帐户注册,然后从列表中添加您的存储库。 您应该看到类似于此屏幕。 记下令牌ID,因为稍后我们将需要它。
最后,我们现在可以配置CircleCI,以便每次构建项目时也可以检查覆盖范围。 我们必须在yml文件中添加两件事:
- 通过添加标志
-enableCodeCoverage YES
,将xcodebuild
配置为也启用coverage数据 - 使用
after_script
选项将覆盖率数据上传到codecov 。
您的文件应如下所示:
已知的错误
xcodebuild目前发生一个已知的错误,其中没有考虑UI测试,这会影响您的覆盖率。 例如,当我想以正确的百分比(在FizzBuzz示例中为100%)更新CodeCov时,例如在合并合并请求之前,我直接在XCode中运行整个测试套件,然后手动上载coverage使用相同的命令向codecov报告:
bash <(curl -s https://codecov.io/bash) -t YOUR_TOKEN
CodeBeat
完全基于云且独立于CI的CodeBeat将审查每次提交并在代码库中搜索代码重复,安全问题,过于复杂的功能等(它也能够生成覆盖率报告,但我们不会依靠它,因为我们已经有了一个工具)。
它的配置相当简单。 使用您的Bitbucket帐户注册并选择所需的项目,以便它可以生成所需的Webhook。 我们还希望忽略某些文件夹,因此我们将.codebeatignore
文件添加到具有以下内容的根文件夹中: