gradle - 如何解决 CIrcleCI 上的 gradlew ./assembleRelease 上未设置 $TERM 的问题?

标签 gradle android-build circleci-2.0

我正在 Circleci 2.0 上构建一个工作流程,到目前为止,作业正在运行,直到它到达 android 作业。

在构建步骤./gradlew assembleRelease它失败,说明未设置ENV VAR:

Unzipping /home/circleci/.gradle/wrapper/dists/gradle-2.14.1-all/8bnwg5hd3w55iofp58khbp6yv/gradle-2.14.1-all.zip to /home/circleci/.gradle/wrapper/dists/gradle-2.14.1-all/8bnwg5hd3w55iofp58khbp6yv
Set executable permissions for: /home/circleci/.gradle/wrapper/dists/gradle-2.14.1-all/8bnwg5hd3w55iofp58khbp6yv/gradle-2.14.1/bin/gradle

FAILURE: Build failed with an exception.

* What went wrong:
Could not open terminal for stdout: $TERM not set

我根据 this post 所做的尝试设置 $TERM 变量是 gradle 调用之前的运行命令。但构建仍然无法查找该变量。

问题:

如何解决 CIrcleCI 上的 gradlew ./assembleRelease 上未设置 $TERM 的问题?

我确实根据这篇文章验证了我使用的是正确的 docker 镜像:

https://stackoverflow.com/a/45744987/1829251

以下是 android CI 作业的 config.yml 要点:

 android:
    working_directory: ~/repo/android
    docker:
      - image: circleci/android:api-25-node8-alpha
    steps:
      - checkout:
          path: ~/repo
      - restore_cache:
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - attach_workspace:
          at: ~/repo
      - run: ./gradlew androidDepedencies    
      - run: export TERM=xterm   
      - run: sudo chmod +x ./gradlew
      - run: ./gradlew assembleRelease
      - save_cache:
          paths:
            - ~/.gradle
          key: jars-{{ checksum "build.gradle" }}-{{ checksum  "app/build.gradle" }}
      - store_test_results:
path: ~/repo/android/reports

最佳答案

免责声明:CircleCI 的开发者传播者

      - run: export TERM=xterm

该行仅为该特定 shell 设置变量 $TERM。每个 run 步骤都会启动一个全新的 shell。

在同一步骤中运行 gradlew 的解决方案是一种可能的解决方案:

 - run: export TERM=xterm && ./gradlew androidDepedencies  

另一种方法是正确导出$TERM,以便所有后续步骤都可以看到该变量。这将像这样完成:

      - run: echo 'export TERM=xterm' >> $BASH_ENV

$BASH_ENV 包含在每个 CircleCI 步骤 开始时获取的 Bash 文件的路径。这是它的来源:https://circleci.com/docs/2.0/env-vars/#setting-path

关于gradle - 如何解决 CIrcleCI 上的 gradlew ./assembleRelease 上未设置 $TERM 的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49163104/

相关文章:

android - 警告 : Deactivation of this APK will result in your app being available for new installs on fewer types of devices

android - Ant 构建在 Eclipse 中失败

构建时未找到 android.os.ServiceManager

automated-tests - 如何修复 CircleCI 中长时间运行的 testcafe 测试

android - Circle CI 2.0 Android assembleDebug始终失败

java - 将 apache netbeans gradle 项目导出到 jar 文件

gradle - 如何使用 Gradle 将 Build-Host 属性添加到 JAR list ?

maven - 通过解析Maven项目中的build.gradle列出gradle项目中使用的远程存储库

gradle - @aar在gradle依赖声明中表示什么?

continuous-integration - CircleCI 版本 2.1 - "Cannot find a definition for command named ' 恢复缓存'"