How to resolve $TERM not set on gradlew ./assembleRelease on CIrcleCI?

跟風遠走 提交于 2019-12-11 03:14:33

问题


I'm building a workflow on circleci 2.0 and so far jobs are running until it gets to android job.

At the build step ./gradlew assembleRelease it fails stating that an ENV VAR is not set:

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

What I did try according to this post is setting the $TERM variable is a run command prior to the gradle invocation. But the build still fails looking for this variable.

Question:

How can you resolve $TERM not set on gradlew ./assembleRelease on CIrcleCI?

I did verify that I'm using the correct docker image according to this SO post:

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

Here is the config.yml gist of the android CI Job:

 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

回答1:


disclaimer: Developer Evangelist at CircleCI

      - run: export TERM=xterm

That line sets the variable $TERM only for that specific shell. Each run step starts a brand new shell.

Your solution of running gradlew in the same step is one possible solution:

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

Another would be to properly export $TERM so that all subsequent steps can see the variable. This would be done like this:

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

$BASH_ENV contains the path to the Bash file that is sourced at the beginning of every CircleCI step. Here's where this came from: https://circleci.com/docs/2.0/env-vars/#setting-path




回答2:


I was exporting the ENV VAR incorrectly, using the following fixed the missing $TERM not set erorr in the android build:

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


来源:https://stackoverflow.com/questions/49163104/how-to-resolve-term-not-set-on-gradlew-assemblerelease-on-circleci

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!