Help us learn about your current experience with the documentation. Take the survey.

DevSecOps 工作流 - 移动应用

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

本文档提供了 GitLab DevSecOps 工作流解决方案的说明和功能细节,用于构建和交付混合(React Native)移动应用。

对于使用 fastlane 的原生移动应用,请参考产品文档。

说明包括一个使用 react-native-community/cli 引导的 React Native 示例应用程序,并在 iOS 和 Android 设备上提供跨平台解决方案。该示例项目提供了使用 GitLab CI/CD 管道构建、测试和部署移动应用的端到端解决方案。

入门指南

按照以下步骤,了解如何使用此 React Native 移动应用示例项目,通过 GitLab 快速启动您的移动应用交付。

下载解决方案组件

  1. 从您的账户团队获取邀请码。
  2. 使用邀请码从 解决方案组件商店 下载解决方案组件。

设置解决方案组件项目

  • 已从产品加速器市场下载了移动应用解决方案组件。在解决方案包中,它包含带有 CI/CD 文件的移动应用示例项目。

  • 创建一个新的 GitLab CI/CD 目录项目,用于在您的环境中托管 Snyk 组件。在移动应用解决方案包中,它包含 Snyk CI/CD 组件项目文件,允许您设置 Snyk CI/CD 目录项目。

    1. 创建一个新的 GitLab 项目来托管此 Snyk CI/CD 目录项目
    2. 将提供的文件复制到您的项目中
    3. 在项目设置中配置所需的 CI/CD 变量
    4. 确保项目被标记为 CI/CD 目录项目。有关更多信息,请参阅 发布组件项目

    如果您使用的是 SaaS,并且能够访问 GitLab.com 上的公共 GitLab Snyk 组件,则不需要设置自己的 Snyk CI/CD 目录项目,您可以遵循 GitLab.com 上公共 GitLab Snyk 组件中的文档来直接使用该组件。

  • 使用与 ServiceNow 的变更控制工作流解决方案包,配置 DevOps 变更速度与 GitLab 的集成,以自动在 ServiceNow 中创建需要变更控制的部署的变更请求。这里 是与 ServiceNow 的变更控制工作流解决方案组件的文档链接,请与您的账户团队合作获取访问代码以下载与 ServiceNow 的变更控制工作流解决方案包。

  • 将 CI YAML 文件复制到您的项目中:

    • .gitlab-ci.yml
    • pipelines 目录中的 build-android.yml。如果 build-android.yml 文件放在 /pipeline 以外的其他位置,您需要更新 .gitlab-ci.yml 中的文件路径,因为主要的 .gitlab-ci.yml 文件引用了 build-android.yml 文件作为构建作业。
    • pipelines 目录中的 build-ios.yml。如果 build-ios.yml 文件放在 /pipeline 以外的其他位置,您需要更新 .gitlab-ci.yml 中的文件路径,因为主要的 .gitlab-ci.yml 文件引用了 build-ios.yml 文件作为构建作业。
    include:
    - local: "pipelines/build-ios.yml"
     inputs:
       image: macos-15-xcode-16
       tag: saas-macos-medium-m1
    - local: "pipelines/build-android.yml"
     inputs:
       image: reactnativecommunity/react-native-android
  • 在项目设置中配置所需的 CI/CD 变量。请参阅下一节了解管道的工作原理。

管道工作原理

此管道专为 React Native 项目设计,处理 iOS 和 Android 的构建、测试和移动应用部署。

此项目包含一个简单的 reactCounter 演示应用程序,用于 React Native 在 iOS 和 Android 上的构建。此版本尚未对工件进行签名,因此我们无法上传到 TestFlight 或 Play Store。

每次更改都使用一个组件来进行语义版本号递增,该版本存储为临时变量,用于将通用包提交到包注册表。

管道结构

管道包含以下阶段和作业:

  1. prebuild
    • 单元测试
    • Snyk 扫描
  2. build
    • 构建 iOS 包
    • 构建 Android 包
  3. test
    • 依赖项扫描
    • SAST 扫描
  4. functional-test
    • 上传 iOS/Android 应用到 Sauce Labs
    • 自动化测试 Appium Sauce Labs
  5. app-distribution
    • 应用分发 Sauce Android
    • 应用分发 Sauce iOS
  6. beta-release
    • Beta 版本发布开发
    • Beta 版本发布审批

先决条件

移动管道工作流程中集成了多个第三方工具。为了成功运行管道,请确保满足以下先决条件。

使用组件进行 Snyk 集成

为了使用 GitLab Snyk CI/CD 组件进行安全扫描,请确保您的 GitLab 组或项目已与 Snyk 连接,如果没有,请按照本教程进行配置。

在移动应用项目中,添加 Snyk 集成所需的变量。

所需的 CI/CD 变量

变量 描述 示例值
SNYK_TOKEN 访问 Snyk 的 API 令牌 d7da134c-xxxxxxxxxx

此移动应用演示项目使用私有 Snyk 组件,这就是为什么我们为移动应用项目添加了以下额外变量来访问私有 Snyk 组件项目,但如果您的 Snyk 组件是公共的或在您的组内可访问,则不需要这样做。

SNYK_PROJECT_ACCESS_USERNAME: "MOBILE_APP_SNYK_COMPONENT_ACCESS"
DOCKER_AUTH_CONFIG: '{"auths":{"registry.gitlab.com":{"username":"$SNYK_PROJECT_ACCESS_USERNAME","password":"$SNYK_PROJECT_ACCESS_TOKEN"}}}'

更新组件路径

更新 .gitlab-ci.yml 文件中的组件路径,以便管道可以成功引用 Snyk 组件。

 - component: $CI_SERVER_FQDN/gitlab-com/product-accelerator/work-streams/packaging/snyk/snyk@1.0.0 #snky sast scan, this examples uses the component in GitLab the product accelerator group. Please update the path and stage accordingly.
    inputs:
      stage: prebuild
      token: $SNYK_TOKEN

Sauce Labs 集成

此移动应用演示项目的 CI/CD 与 Sauce Labs 集成,用于自动化功能测试。为了在 Sauce Labs 中运行自动化测试,应用程序需要上传到 Sauce Labs 应用存储。您需要在 GitLab 中为项目设置所需的变量,以访问 Sauce Labs 并上传工件。

所需的 CI/CD 变量

变量 描述 示例值
SAUCE_USERNAME Sauce Labs 用户名 rz
SAUCE_ACCESS_KEY 访问 Sauce Labs 的 API 密钥 9f5wewwc-xxxxxxx
APP_FILE_PATH_IOS 查找构建工件的文件路径 ios/build/reactCounter.ipa
APP_FILE_PATH_ANDROID 查找构建工件的文件路径 android/app/build/outputs/apk/release/app-release.apk

使用 Appium 进行自动化测试

为了使用 SauceLabs 进行自动化测试,应用程序必须上传到 SauceLab 应用管理。管道使用 API 端点将应用程序上传到 SauceLabs,并使其可用于测试。

tests/appium 中添加了一个 Appium 测试脚本文件,用于使用 WebdriverIO 和 Sauce Labs 测试 React Native 移动应用程序。测试脚本将使用以下环境变量访问 SauceLabs

# 使用项目中定义的变量

const SAUCE_USERNAME = process.env.SAUCE_USERNAME;
const SAUCE_ACCESS_KEY = process.env.SAUCE_ACCESS_KEY;

应用分发(Android 和 iOS)

GitLab 管道将应用构建分发给 SauceLabs TestFairy 用于演示目的。SauceLabs TestFairy 允许用户将应用的新版本分发给测试人员进行审查和测试。

ServiceNow 集成

此移动应用演示项目的 CI/CD 与 ServiceNow 集成,用于变更控制。当管道到达在 ServiceNow 中启用了变更控制的部署作业时,它将自动创建变更请求。一旦变更请求获得批准,部署作业将恢复。在此演示项目中,Beta 版本发布审批作业在 ServiceNow 中被阻止,需要手动批准才能继续。

CI/CD 变量

为了使管道能够与 ServiceNow 通信,需要创建 Webhook 集成。如果您使用 API 端点与 ServiceNow 通信,则需要包含以下变量。但是,使用 ServiceNow DevOps 变更速度集成时不需要这样做。作为 ServiceNow DevOps 变更速度入职的一部分,将创建 Webhook。

变量 描述 示例值
SNOW_URL 您的 ServiceNow 实例 URL https://<SNOW_INSTANCE>.com/
SNOW_TOOLID ServiceNow 实例 ID 3b5w345629212105c5ddaccwonworw2
SNOW_TOKEN 访问 ServiceNow 的 API 令牌 Oxxxxxxxxxx

包含的文件和组件

移动应用项目管道包含几个外部配置和组件:

  • iOS 和 Android 的本地构建配置
  • SAST(静态应用程序安全测试)组件
  • 自动语义版本控制组件
  • 依赖项扫描
  • Snyk SAST 扫描组件

注意事项

请联系您的账户团队获取访问解决方案组件的邀请码,以及任何其他问题。