我们正在尝试在 jenkins 服务器中运行一个作业。在部署之前,我正在尝试创建所有文件和文件夹的tar文件。每当我尝试构建作业tar文件时,都会成功创建,但是我收到"构建步骤'执行shell'标记为失败"错误并且构建失败。
以下是我在作业的"执行外壳"部分添加的命令
echo "START"
echo "-----GIT LOG-------"
git log --pretty=format:"%H - %an, %ar, %ad : %s " -5
git log --stat -1
echo "------ARCHIVE------"
tar -zcvf bblc.tar.gz *
以下是我在构建工作后得到的结果
**Build step 'Execute shell' marked build as failure
Archiving artifacts
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
Finished: FAILURE**
我找不到哪里出了问题?
不知何故,您的脚本返回了非零值,因此 Jenkins 将构建设置为失败。
如果您确定脚本工作正常,则可以在脚本末尾添加exit 0
,这将执行所有步骤,最后返回 0 表示成功。
请参阅以下示例:
echo "START"
echo "-----GIT LOG-------"
git log --pretty=format:"%H - %an, %ar, %ad : %s " -5
git log --stat -1
echo "------ARCHIVE------"
tar -zcvf bblc.tar.gz *
exit 0
否则,您需要检查tar命令(或脚本中的任何最后一个命令)的文档以了解为什么它返回非零值
从显示的日志中,我们看不到它是 git 命令之一还是 tar 命令有问题。
登录到 jenkins 服务器,成为 jenkins 用户,cd 进入作业工作区。然后在脚本中运行命令,并在每个命令后运行echo $?
。
如果您看到一个不返回"0"的命令,那么 jenkins 将在此时退出,并显示"构建步骤'执行 shell'标记为构建失败"错误。 很好地详细解释了 jenkins 执行 shell 关于这个问题的答案: 在 Jenkins 中,Execute Shell 如何/何时将构建标记为失败? https://stackoverflow.com/a/22816074/623159
那里显示的 tar 命令在我看来很可疑。
第一次运行时很好,但它在下次运行时会自行捕获,您可以看到echo $?
显示"1" - 任何非零返回代码都是错误,会导致 jenkins 在该命令处退出脚本并将脚本标记为失败。
-bash-4.2$ mkdir tmp
$ cd tmp
$ touch foo
$ tar -zcvf bblc.tar.gz *
foo
$ echo $?
0
$ tar -zcvf bblc.tar.gz *
bblc.tar.gz
tar: bblc.tar.gz: File shrank by 115 bytes; padding with zeros
foo
$ echo $?
1
正确的解决方案:使用 tar 命令更具体。最好运行它并将 tarfile 放在不被压缩的目录中,例如将 tar 文件放入/tmp 中,然后将其移动到工作区。不要只指定"*",给它明确的文件和目录名称。
tar -zcvf /tmp/bblc.tar.gz * && mv /tmp/bblc.tar.gz ./
或更好
tar -zcvf /tmp/bblc.tar.gz dir1 dir2 dir3 file1 file2
在某些情况下,您合法地拥有 grep 或查找,它什么也找不到并返回非零,但它是正确的。
其他解决方案:要在命令失败时继续执行:
tar -zcvf bblc.tar.gz * || true
以下问题有这样的答案: 如果执行 shell 失败,不要失败 Jenkins 构建