You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins流水线任务为何在临时文件夹中执行命令?

问题解答

1. 为什么Jenkins会在临时文件夹执行命令?

Jenkins的sh步骤会把你编写的命令生成临时脚本文件,放在workspace@tmp/durable-xxx这类临时目录中执行,这是它的持久化任务机制:

  • 避免Jenkins服务重启、Agent节点断开时,任务执行进度丢失
  • 方便记录脚本执行状态,支持断点续跑
  • 隔离不同步骤的执行环境,防止脚本间的文件干扰

2. 为什么终端能运行emulator,Jenkins里却找不到?

终端和Jenkins的运行环境变量存在差异:

  • 你在终端打开的shell(比如zsh/bash)会加载用户目录下的.zshrc/.bash_profile等配置文件,这些文件里包含了Android SDK的路径配置,因此能找到emulator命令
  • Jenkins作为后台服务运行时,默认使用系统级shell,不会加载你的用户级环境变量,导致emulator所在路径不在Jenkins的PATH中,自然找不到命令

解决方法

方法一:直接使用emulator的绝对路径执行

先在终端执行which emulator,得到命令的绝对路径(例如/Users/你的用户名/Library/Android/sdk/emulator/emulator),然后在Jenkins脚本中替换为绝对路径:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh('/Users/你的用户名/Library/Android/sdk/emulator/emulator -list-avds')
            }
        }
    }
}

方法二:在流水线内手动设置PATH环境变量

把emulator所在目录添加到Jenkins的PATH中:

pipeline {
    agent any
    environment {
        PATH = "/Users/你的用户名/Library/Android/sdk/emulator:$PATH"
    }
    stages {
        stage('Build') {
            steps {
                sh('emulator -list-avds')
            }
        }
    }
}

方法三:配置Jenkins全局环境变量

进入Jenkins管理后台 → 系统管理 → 系统配置,找到「全局属性」,勾选「环境变量」,添加一条键为PATH,值为原有PATH内容:/Users/你的用户名/Library/Android/sdk/emulator(注意保留原有PATH,避免影响其他命令)。配置后所有流水线任务都会生效。

内容的提问来源于stack exchange,提问作者silly_goose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:05:27