命令在詹金斯上失败,但在终端上有效

Posted

技术标签:

【中文标题】命令在詹金斯上失败,但在终端上有效【英文标题】:command fails on jenkins, but works on terminal 【发布时间】:2018-03-07 23:16:30 【问题描述】:

我正在使用 fastlane screengrab/snapshot 来截取我的 androidios 应用程序的屏幕截图。当我在终端本地运行它们时,它们运行良好,但是当我从 jenkins 运行它们时,它们失败了。我正在使用 macOS。 Android:

/Users/shared/Library/Android/sdk/tools/emulator -avd Pixel_API_22 &
fastlane screengrab

(这 2 个在 .sh 中)

第一行失败:PANIC: 找不到 AVD 系统路径。请 定义 ANDROID_SDK_ROOT

iOS:

fastlane snapshot

由于配置文件错误,它在尝试构建测试时失败:

xcodebuild -showBuildSettings -scheme UITests -project ./abc.xcodeproj

(这是fastlane快照自动执行的命令)

再次,它们都在终端上顺利运行(我在与 junkins 相同的工作区中运行它们)

【问题讨论】:

【参考方案1】:

在 Jenkins 中执行您的作业后仔细检查环境设置:您可能会看到与在命令行中使用您的用户帐户看到的相同环境设置的差异(它在哪里工作)

用户名可能不同(如果您的 Jenkins 服务器/代理使用另一个帐户运行)。

OP Son Nguyen 确认 PATH 问题:

设置jenkins的开发者放错了android sdk的路径,所以我可以通过修复路径来运行android部分。

OP 补充道:

fastlane 安装在 /usr/local/bin 中,而 jenkins 安装在 /User/myUser 中:所以,不知何故,它们不能很好地协同工作。 我在/User/myUser 中重新安装了fastlane,它成功了。

【讨论】:

我对 jenkins 和终端使用相同的用户。我尝试用sdk路径导出ANDROID_SDK_ROOT,还是不行 那么是另一个不同,可能在PATH中 我检查了 jenkins 配置,设置 jenkins 的开发人员将错误的路径放置到 android sdk,因此我能够通过修复路径来运行 android 部分。对 ios 有什么建议,为什么它无法从 jenkins 构建测试? @SonNguyen 没有建议,除非在环境/路径或文件内容方面必须再次有所不同。 我终于想通了。 fastlane 安装在 /usr/local/bin 中,而 jenkins 安装在 /User/myUser 中,因此不知何故它们不能很好地协同工作。我在 /User/myUser 中重新安装了 fastlane,它工作了【参考方案2】:

这让它对我有用。

我必须在我的脚本顶部包含这个:

     #!/bin/zsh
     source ~/.zshrc

我的 .zshrc 有这个:

    export PATH="$PATH:"/usr/local/bin/
    export SSL_CERT_FILE=/etc/ssl/cert.pem # for openssl error
    export ANDROID_HOME=/Users/jenkins/Library/Android/sdk

【讨论】:

以上是关于命令在詹金斯上失败,但在终端上有效的主要内容,如果未能解决你的问题,请参考以下文章

从 Jenkins 运行时 xcodebuild 失败(在终端中工作)

测试命令在终端中有效,但在 php 中无效

SQL 代码在在线编译器上运行良好,但在 Linux 终端中由 MariaDB 编译时失败(错误号:150)

Bash命令在终端中有效,但在python脚本中的“子进程”中无效[重复]

在终端上使用 xcodebuild 命令导出失败

詹金斯选择与终端不同的配置文件说明符