Azure DevOps iOS 和 Android React Native 构建在 Pod 安装和 Gradle 构建步骤上失败

Jor*_*rge 5 android gradle ios cocoapods azure-devops

我正在尝试在 Azure Devops 中为 React-Native 应用程序创建适用于 iOS 和 Android 的 CI/CD 管道。

使用 android 管道,无论我选择创建 yaml 还是使用经典编辑器并使用预配置的 android 任务,管道在构建任务 (bundleRelease) 上总是失败。我收到的错误是:

FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)
  • 其中:设置文件'/home/vsts/work/1/s/app-rn/android/settings.gradle'行:12

  • 出了什么问题:评估设置“iEquos”时出现问题。

无法读取脚本“/home/vsts/work/1/s/app-rn/node_modules/@react-native-community/cli-platform-android/native_modules.gradle”,因为它不存在。

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • 在https://help.gradle.org获取更多帮助

在 12 秒内构建失败错误:进程“/home/vsts/work/1/s/app-rn/android/gradlew”在 ExecState._setResult 处失败,退出代码为 1 (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94 -4c97-85af-839254cc6da4/2.200.2/node_modules/azure-pipelines-task-lib/toolrunner.js:944:25) 在 ExecState.CheckComplete (/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af -839254cc6da4/2.200.2/node_modules/azure-pipelines-task-lib/toolrunner.js:927:18)在ChildProcess。(/home/vsts/work/_tasks/Gradle_8d8eebd8-2b94-4c97-85af-839254cc6da4/2.200.2/node_modules/azure-pipelines-task-lib/toolrunner.js:840:19)在ChildProcess.emit(events.js) :198:13) 在 MaybeClose (internal/child_process.js:982:16) 在 Process.ChildProcess._handle.onexit (internal/child_process.js:259:5) ##[error]错误:进程 '/home/ vsts/work/1/s/app-rn/android/gradlew' 失败,退出代码 1 整理:Gradle

这是 android/settings.gradle 中引用的行:

从以下位置申请: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(设置,“../”)

节点模块文件夹位于“app-rn”目录中,与“android”文件夹处于同一级别,因此仅使用一个“../”是正确的吗?

我可以通过 termianl 或使用 Android studio 在本地构建 Android 解决方案,所以我完全不知道为什么会在 DevOps 中发生这种情况。

我的 iOS 管道也出现了类似的问题。安装 Cocoa Pods 时出现此问题:

DevOps 安装 Cocoa Pods 错误

这是我的 PodFile 的图像,位于“iOS”文件夹中。“iOS”文件夹与“node-modules”位于同一级别,都位于文件夹“app-rn”内:

Podfile

这是 Android 的 yaml:

# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/android
variables:
  - group: DriverApp

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

name: $(date:yyyy).$(Month)$(rev:.r)

steps:

- script: yarn install

- task: Gradle@2
  inputs:
    gradleWrapperFile: 'app-rn/android/gradlew'
    workingDirectory: 'app-rn/android/'
    options: '-PversionName=$(Build.BuildNumber) -PversionCode=$(Build.BuildId)'
    tasks: 'bundleRelease'
    publishJUnitResults: false
    javaHomeOption: 'JDKVersion'
    gradleOptions: '-Xmx3072m'
    sonarQubeRunAnalysis: false

- task: AndroidSigning@3
  inputs:
    apkFiles: '**/*.aab'
    apksignerKeystoreFile: 'keystore.jks'
    apksignerKeystorePassword: '$(AndroidKeyStorePassword)'
    apksignerKeystoreAlias: '$(AndroidKeyAlias)'
    apksignerKeyPassword: '$(AndroidKeyAliasPassword)'
    zipalign: false

- task: PublishBuildArtifacts@1
  inputs:
    # PathtoPublish: 'android/app/build/outputs/apk/release'
    PathtoPublish: 'android/app/build/outputs/'
    ArtifactName: 'drop'
    publishLocation: 'Container'
Run Code Online (Sandbox Code Playgroud)

iOS 的 yaml:

# trigger:
#   branches:
#     include:
#       - master
variables:
  - group: DriverApp
pool:
  vmImage: 'macos-latest'
steps:
  - checkout: self
    persistCredentials: true
    clean: true
  - task: NodeTool@0
    displayName: 'Install Node'
    inputs:
      versionSpec: '12.19.0' # you can use your desired version here
      # workingDirectory: 'app-rn/'
  - script: yarn install
    displayName: Install Dependencies
  - task: InstallAppleCertificate@2
    displayName: Install Apple Certificate
    inputs:
      certSecureFile: 'AppleDistributionCertificate.p12'
      certPwd: '$(AppleCertificatePassword)'
      keychain: 'temp'
      deleteCert: true
  - task: InstallAppleProvisioningProfile@1
    displayName: 'Install Apple Provisioning Profile'
    inputs:
      provisioningProfileLocation: 'secureFiles'
      provProfileSecureFile: 'iEquos_App_Store.mobileprovision'
      removeProfile: true
  - task: CocoaPods@0
    displayName: 'Install CocoaPods'
    inputs:
      workingDirectory: 'app-rn/ios'
  - task: Xcode@5
    displayName: 'Build IPA'
    inputs:
      actions: 'build'
      configuration: 'Release'
      sdk: 'iphoneos'
      xcWorkspacePath: 'app-rn/ios/iEquos.xcworkspace'
      scheme: 'iEquos'
      packageApp: true
      exportPath: 'output'
      signingOption: 'manual'
      signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
      provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
  - task: CopyFiles@2
    displayName: 'Copy IPA'
    inputs:
      contents: '**/*.ipa'
      targetFolder: '$(build.artifactStagingDirectory)'
      overWrite: true
      flattenFolders: true
  - task: PublishBuildArtifacts@1
    displayName: 'Publish IPA to artifacts'
    inputs:
      PathtoPublish: '$(build.artifactStagingDirectory)'
      ArtifactName: 'ios'
      publishLocation: 'Container'
Run Code Online (Sandbox Code Playgroud)

我在 stackoverflow 上搜索了类似的问题,但似乎只发现人们在本地(而不是 DevOps 内部)遇到这些问题。正如我之前提到的,我可以在本地构建 Android 和 iOS 应用程序。

我对在堆栈溢出上发帖还很陌生,所以请告诉我是否应该提供更多信息。

任何帮助将不胜感激。

M K*_*imi 1

您是否在azure-pipelines.yml文件中尝试过此操作:

- script: /usr/local/bin/pod deintegrate
  workingDirectory: 'app-rn/ios'
  displayName: 'pod deintegrate'

- script: /usr/local/bin/pod install
  workingDirectory: 'app-rn/ios'
  displayName: 'pod install'
Run Code Online (Sandbox Code Playgroud)

插入:

- task: CocoaPods@0
  displayName: 'Install CocoaPods'
  inputs:
    workingDirectory: 'app-rn/ios'
Run Code Online (Sandbox Code Playgroud)