我正在 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/