您的 Swift 项目值得拥有自动化天空:从零开始构建 CI/CD
\n\n您编写了一个很棒的 Swift 包或应用程序。代码运行流畅,本地测试通过,您感觉自己像个摇滚明星。但一旦 push 代码,噩梦就开始了:“在 Linux 上能编译吗?”,“在 macOS 上测试能通过吗?”,“万一我忘了运行 SwiftLint 怎么办?”。
\n\n熟悉吗?如果是这样,您需要一个 Swift 的 CI/CD 管道。它就像您代码的自动驾驶仪:自动构建、测试、检查代码风格,甚至部署。在本文中,我们将以 GitHub Actions 为例,从零开始配置 Swift CI/CD 管道。您将获得可以直接复制并立即使用的现成工作代码。
\n\n剧透:配置完成后,您将在每次提交时看到绿色勾号,而不是对着控制台焦虑不安。\n\n
为什么 Swift 的 CI/CD 不是奢侈品,而是必需品
\n\nSwift 存在于两个世界中:macOS(Xcode、CocoaPods、Carthage)和 Linux(Vapor、SwiftNIO、服务器端项目)。没有 CI/CD,您将面临风险:
\n\n- \n
- 遗漏另一个平台上的编译错误 \n
- 忘记运行代码检查器(然后代码看起来像被轰炸过一样) \n
- 花费数小时进行手动部署 \n
- 浪费时间寻找回归错误 \n
正确配置的 Swift CI/CD 管道 可以解决所有这些问题。它 24/7 全天候运行,不喝咖啡,也不会说“在我这都能跑”。开始吧!
\n\n步骤 1:选择工具 — GitHub Actions
\n\n我们将使用 GitHub Actions — 这是 GitHub 内置的 CI/CD,对于 Swift 来说非常理想。原因如下:
\n\n- \n
- 免费 用于公共仓库(每月 2000 分钟) \n
- macOS 运行器 — 可以在 Xcode 下构建 \n
- Linux 运行器 — 用于服务器端 Swift 项目 \n
- 现成的 actions 用于 SwiftLint、测试、部署 \n
如果您使用 GitLab、Bitbucket 或 Jenkins — 原理相同,但 YAML 语法会有所不同。
\n\n步骤 2:Swift CI/CD 管道的基本结构
\n\n任何管道都由三个阶段组成:
\n\n- \n
- 构建 — 构建项目(SPM 或 Xcode) \n
- 测试 — 运行单元测试 \n
- 代码检查 — 检查代码风格(可选,但强烈建议) \n
此外,还可以添加部署(例如,部署到服务器或 TestFlight)。
\n\n创建文件 .github/workflows/swift-ci.yml
\n\n在仓库的根目录下,创建文件夹 .github/workflows/,并在其中创建文件 swift-ci.yml。以下是最小可用的管道:
name: Swift CI/CD Pipeline\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout code\n uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n with:\n swift-version: "5.9"\n\n - name: Build\n run: swift build\n\n - name: Run tests\n run: swift test\n\n这个 Swift 的 CI/CD 管道 在每次 push 或 pull request 到 main/develop 分支时触发。它在 Ubuntu 上构建项目并运行测试。简单吗?是的。但让我们添加一些魔法。
\n\n步骤 3:将 macOS 和 Xcode 添加到构建矩阵
\n\nSwift 开发者通常在 macOS 上工作,而服务器端则在 Linux 上。为了确保项目在所有平台上都能构建,我们使用 矩阵策略:
\n\njobs:\n build-and-test:\n strategy:\n matrix:\n os: [ubuntu-latest, macos-latest]\n swift-version: ["5.8", "5.9"]\n\n runs-on: ${{ matrix.os }}\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n