【问题标题】:How to resolve $TERM not set on gradlew ./assembleRelease on CIrcleCI?如何解决 $TERM 未设置在 gradlew ./assembleRelease 上 CIrcleCI?
【发布时间】:2018-03-07 23:43:34
【问题描述】:

我正在 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 调用之前的运行命令。但是构建仍然无法查找此变量。

问题:

如何解决 $TERM not set on gradlew ./assembleRelease on CIrcleCI?

我确实根据这篇 SO 帖子验证了我使用的是正确的 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

【问题讨论】:

    标签: gradle android-build circleci-2.0


    【解决方案1】:

    免责声明:CircleCI 的开发者宣传员

          - run: export TERM=xterm
    

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

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

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

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

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

    $BASH_ENV 包含指向每个 CircleCI step 开头的 Bash 文件的路径。这是来自:https://circleci.com/docs/2.0/env-vars/#setting-path

    【讨论】:

    • 谢谢,这是在配置中使 var 全局化的一个好技巧!
    • 如果 gradle 需要,为什么 CircleCI 示例代码不包含这个?
    • 我正要添加它,但看起来 $TERM 现在已经在这些图像中设置了。
    【解决方案2】:

    我错误地导出了 ENV VAR,使用以下方法修复了 android 构建中缺少的 $TERM not set errr:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2018-02-22
      • 2020-05-11
      相关资源
      最近更新 更多