构建步骤“Windows PowerShell”标记构建为失败,原因是什么?

5
以下是在Jenkins中运行的三个PowerShell命令以及构建结果。为什么会失败?哪个命令可能会失败?我已经阅读了这篇文章:How/When does Execute Shell mark a build as failure in Jenkins?,但是无法弄清楚。我不熟悉微软的东西。
命令1:
& "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.com" "$env:WORKSPACE\ETL\OnePnL.sln" /Build

指令2:

###########################
# Deploy SSIS package           #
###########################  
$csource ="$env:WORKSPACE\ETL\Project Type 0\bin\DEFAULT\OnePnL.ispac"
$cserver = "SSASDBDEV01"
$cdest = "/SSISDB/OnePnL/OnePnL"    
echo $env:GIT_BRANCH    
if ($env:GIT_BRANCH  -like '*master*')
{
   # Call IS Deployment Wizard
   echo "Deploying SSIS package to $cdest on $cserver"    
   # "C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe" "/Silent /SourcePath:""$csource""    #/DestinationPath:""$cdest"" /DestinationServer:""$cserver""" -Wait
   Start-Process "C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\ISDeploymentWizard.exe" "/Silent /SourcePath:""$csource""    /DestinationPath:""$cdest"" /DestinationServer:""$cserver""" -Wait
}

第三个命令:

#####################
# Copy Files to O: drive #
#####################

#Make build directory

#$outputparentdir = "\\orion\Shared\AppUpload\ApplicationPackage\OnePnL Cube\SSIS Jenkins Builds"
$outputparentdir = "\\inv\Shared\Transfer - Deleted Weekly\Jenkins\BI\OnePnL\SSIS Jenkins builds"
$outputdir = "$outputparentdir\${env:GIT_BRANCH}\Build ${env:BUILD_NUMBER}"
echo "Branch"
echo ${env:GIT_BRANCH}

echo "Output directory"
echo $outputdir 

if (!(Test-Path "$outputparentdir"))
{
  mkdir $outputparentdir
}

mkdir $outputdir

ROBOCOPY "$env:WORKSPACE\ETL\Project Type 0\bin\DEFAULT" "$outputdir" /E /v

echo "Done Copy"

构建结果:

[OnePnL SSIS] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\SVC_TE~1\AppData\Local\Temp\hudson3790190217372968147.ps1'"

Microsoft (R) Microsoft Visual Studio 2012 Version 11.0.50727.1.
Copyright (C) Microsoft Corp. All rights reserved.
------ Build started: Project: OnePnL, Configuration: DEFAULT ------
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
[OnePnL SSIS] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\SVC_TE~1\AppData\Local\Temp\hudson2769520726749517170.ps1'"
origin/release
[OnePnL SSIS] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\SVC_TE~1\AppData\Local\Temp\hudson7860003244522954499.ps1'"
Branch
origin/release
Output directory
\\inv\Shared\Transfer - Deleted Weekly\Jenkins\BI\OnePnL\SSIS Jenkins builds\origin/release\Build 74


    Directory: \\inv\Shared\Transfer - Deleted Weekly\Jenkins\BI\OnePnL\SSIS 
    Jenkins builds\origin\release


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
d----        10/26/2015   4:29 PM            Build 74                          

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows                              
-------------------------------------------------------------------------------

  Started : Monday, October 26, 2015 4:29:01 PM
   Source : D:\te_jenprodslave_1\workspace\Trade_Efficiencies\BI\OnePnL SSIS\ETL\Project Type 0\bin\DEFAULT\
     Dest : \\inv\Shared\Transfer - Deleted Weekly\Jenkins\BI\OnePnL\SSIS Jenkins builds\origin\release\Build 74\

    Files : *.*

  Options : *.* /V /S /E /DCOPY:DA /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

                       1    D:\te_jenprodslave_1\workspace\Trade_Efficiencies\BI\OnePnL SSIS\ETL\Project Type 0\bin\DEFAULT\
        New File          516475    OnePnL.ispac
  0%  
 25%  
 50%  
 76%  
100%  

------------------------------------------------------------------------------

               Total    Copied   Skipped  Mismatch    FAILED    Extras
    Dirs :         1         0         0         0         0         0
   Files :         1         1         0         0         0         0
   Bytes :   504.3 k   504.3 k         0         0         0         0
   Times :   0:00:00   0:00:00                       0:00:00   0:00:00


   Speed :            43039583 Bytes/sec.
   Speed :            2462.744 MegaBytes/min.
   Ended : Monday, October 26, 2015 4:29:01 PM

Done Copy


Build step 'Windows PowerShell' marked build as failure

向社区请求调试您的代码,但不给出任何关于问题的提示通常会遭到负评。我理解您对“微软东西”不熟悉,但这意味着您至少需要尝试自己找出问题所在。 - Matt
让回答者知道操作是否成功总是很好的做法。 - OK999
1个回答

9

你链接的帖子中已经有了答案。

Jenkins的执行Shell构建步骤的最后一个命令的退出代码决定了构建步骤的成功或失败。

我知道你已经理解了这一点,但是决定其是否发挥作用的是robocopy的返回代码,这是你的最后一个命令。虽然该链接适用于Server 2008,但如果它们是操作系统公共部分,我也不会感到惊讶。

Value   Description
0       No files were copied. No failure was encountered. No files were mismatched. The files already exist in the destination directory; therefore, the copy operation was skipped.
1       All files were copied successfully.

如果所有文件都成功复制,则返回代码为1。除0以外的任何内容都会被构建步骤报告为失败,正如我们在链接的问题中所读到的那样。
我认为你需要检查robocopy的返回代码并进行更改。
要检查它,你需要查看PowerShell自动变量$?。 $?包含上一次操作的执行状态。如果上一次操作成功,则它包含TRUE,否则包含FALSE。
因此,最后几行可能是...
ROBOCOPY "$env:WORKSPACE\ETL\Project Type 0\bin\DEFAULT" "$outputdir" /E /v
If($?){exit 0}

这段代码的作用是,如果robocopy返回任何非零结果,它会强制脚本返回true。需要注意的是,这将对所有返回代码返回OK。如果不希望如此,可以轻松地为某些代码构建逻辑。
我无法真正测试此代码,因为我没有您的环境,但理论上它应该工作,或者至少让您开始到达目标。

PSDeploy 的文件共享提供程序使用 Robocopy,这解决了我在 Jenkins 中的构建问题。尽管 PsDeploy 包装了 robocopy 的退出代码并且函数成功,但 Jenkins 仍会因内部 robocopy 的非零成功退出代码而导致构建失败。 - BenH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接