Jenkinsfile 用户输入 while 运行 sh 命令

Jenkinsfile user input while running sh command

我尝试编写一个 Jenkinsfile 来安装 android 模拟器和 运行 一些测试。

但是当运行宁sh 'avdmanager create avd -n Google_apis_30 -k "system-images;android-30;google_apis;x86_64"'时系统要求我输入“否”。

如果我 运行 在本地 android 工作室 windows 上使用此脚本一切正常: image1

然后我尝试为 Jenkins 编写脚本。

环境:

OS - Linux
Jenkinsfile - use Groovy
Docker

这是我的 Jenkins 文件:

#!/usr/bin/env groovy

node('android') {
    ansiColor('xterm') {

        checkout scm

        stage('Build and upload') {

            docker.image('androidsdk/android-30:latest').inside('-u root')
                    {
                       
                        sh 'sdkmanager --list'
                        sh 'avdmanager create avd -n Google_apis_30 -k "system-images;android-30;google_apis;x86_64"'
                        echo 'no'

                        sh 'emulator -list-avds'
                        sh 'start /min emulator -avd Google_apis_30'
                        sh './gradlew clean connectedCheck --no-daemon --stacktrace'
                    }

            archiveArtifacts 'app/build/outputs/apk/debug/*.apk'
        }

我还尝试了 echo 命令的几种变体:

echo no | android create avd -n Google_apis_30

sh 'echo no | avdmanager create avd -n Google_apis_30 -k "system-images;android-30;google_apis;x86_64"'

sh 'echo "no"'

echo 'no'

但 Jenkins 仍然没有通过脚本: Jenkins_log

怎么了?

很有趣。

我只是忘了用 echo 命令替换创建模拟器命令。 工作答案:sh 'echo no | avdmanager create avd -n Google_apis_30 -k "system-images;android-30;google_apis;x86_64"'

没有“echo”的初始命令将被删除。

stage('Build and upload') {

        docker.image('androidsdk/android-30:latest').inside('-u root')
                {
                    sh 'sdkmanager --list'
                    sh 'echo no | avdmanager create avd -n Google_apis_30 -k "system-images;android-30;google_apis;x86_64"'

                    sh 'emulator -list-avds'
}}