为什么在为文件创建备份 tar 时出现"Build step 'Execute shell' marked build as failure"错误



我们正在尝试在 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 构建

最新更新