我正在 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
根据这篇文章,我尝试将$TERM变量设置为gradle调用之前的运行命令。但是构建仍然无法寻找这个变量。
问题:
如何解决未在gradlew上设置的$TERM/在CIrcleCI上的assemblyRelease?
我确实根据这篇SO帖子验证了我使用的docker图像是正确的:
https://stackoverflow.com/a/45744987/1829251
以下是 android
CI Job 的 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
。每个运行
步骤都会启动一个全新的shell。
在同一步骤中运行 gradlew
的解决方案是一种可能的解决方案:
- run: export TERM=xterm && ./gradlew androidDepedencies
另一种方法是正确导出< code>$TERM,以便所有后续步骤都可以看到该变量。应该这样做:
- run: echo 'export TERM=xterm' >> $BASH_ENV
< code>$BASH_ENV包含BASH文件的路径,该文件来源于每个CircleCI 步骤
的开头。这是它的来源:https://circleci.com/docs/2.0/env-vars/#setting-path
我导出ENV VAR不正确,使用以下修复了android构建中缺少的$TERM not set
错误:
- run: export TERM=xterm && ./gradlew androidDepedencies