【问题标题】:Why getting "Build step 'Execute shell' marked build as failure" error while creating a backup tar for files为什么在为文件创建备份 tar 时出现“构建步骤‘执行外壳’将构建标记为失败”错误
【发布时间】:2022-05-05 19:01:36
【问题描述】:

我们正在尝试在 jenkins 服务器中运行作业。在部署之前,我正在尝试创建一个包含所有文件和文件夹的 tar 文件。每当我尝试构建作业时,tar 文件已成功创建,但出现“构建步骤‘执行 shell’标记构建为失败”错误并且构建失败。

以下是我在作业的“执行 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**

我找不到哪里出错了?

【问题讨论】:

    标签: php jenkins


    【解决方案1】:

    您的脚本以某种方式返回非零值,因为 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 命令(或脚本中的最后一个命令)的文档以了解它返回非零值的原因

    【讨论】:

    • 很高兴尝试这个,它会显示某些命令是否失败,但我怀疑它会在退出 0 之前退出。要解决它,你需要像这个问题一样:stackoverflow.com/questions/14392349/…I '将尝试在另一个答案中解释。
    【解决方案2】:

    从显示的日志中我们看不出是 git 命令还是 tar 命令有问题。

    登录 jenkins 服务器,成为 jenkins 用户,cd 进入工作区。然后在每个命令后运行脚本中的命令和echo $?

    如果您看到一个不返回“0”的命令,那么 jenkins 将在此时退出,并出现“构建步骤 '执行 shell' 将构建标记为失败”错误。 在此问题的答案中解释了 jenkins 执行 shell 的详细信息: How/When does Execute Shell mark a build as failure in Jenkins? 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 的目录中,例如将 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 或 find 什么都没有找到并且返回非零但它是正确的。

    其他解决方案:在命令失败时继续执行:

    tar -zcvf bblc.tar.gz * || true
    

    以下问题有这个答案: don't fail jenkins build if execute shell fails

    【讨论】:

      猜你喜欢
      • 2017-06-19
      • 1970-01-01
      • 2016-02-21
      • 2016-01-26
      • 2019-12-01
      • 2019-11-25
      • 2017-10-09
      • 2020-05-12
      • 1970-01-01
      相关资源
      最近更新 更多