如何解决没有在CIrcleCI上的gradlew ./assembleRelease上设置$ TERM?

时间:2018-03-07 23:43:34

标签: 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调用之前的run命令。但构建仍然无法查找此变量。

问题:

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

我确实根据这个SO帖子确认我正在使用正确的泊坞窗图像:

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

2 个答案:

答案 0 :(得分:2)

免责声明: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包含Bash文件的路径,该文件源自每个CircleCI step的开头。以下是https://circleci.com/docs/2.0/env-vars/#setting-path

的来源

答案 1 :(得分:0)

我正在错误地导出ENV VAR,使用以下修复了android build中缺少的 for (int i = 0; i < count; ++i) erorr:

$TERM not set