生成步骤"Windows PowerShell"将生成标记为失败,为什么? [英] Build step 'Windows PowerShell' marked build as failure, why?

查看:110
本文介绍了生成步骤"Windows PowerShell"将生成标记为失败,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是在Jenkins中运行的三个PowerShell命令以及生成结果.为什么会失败?哪个命令可能失败?我已经阅读了这篇文章:如何/Execute Shell何时在Jenkins中将构建标记为失败?,但无法弄清楚.我对MS的东西不熟悉.

Below are three PowerShell Commands run in Jenkins and the build result. Why it fails? Which command could be failing? I've read this post: How/When does Execute Shell mark a build as failure in Jenkins?, but couldn't figure out. I am not familiar with MS stuffs.

命令1:

& "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.com" "$env:WORKSPACE\ETL\OnePnL.sln" /Build

Command2:

###########################
# 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
}

命令3:

#####################
# 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

推荐答案

答案类似于您所链接的帖子.

The answer is sort of in the post you linked.

Jenkin的Execute Shell生成步骤的最后一个命令的退出代码决定了生成步骤的成功/失败.

the exit code of last command of the Jenkin's Execute Shell build step is what determines the success/failure of the Build Step

我了解到您了解得很多,但是使它发挥作用的是返回robocopy的代码,这是您最后的命令.虽然链接是针对Server 2008的,但如果它们是常见的操作系统,我也不会感到惊讶.

I get that you understand that much, but what makes it come into play is the return code for robocopy which was you last command. While the link is for server 2008 I won't be surprised if they are OS common.

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以外的任何 都报告为失败.

If all the files were copied successfully then the return code is 1. Anything other than 0 is reported as a failure by the build step as we have read in the linked question.

我认为您需要做的是检查robocopy的返回码并进行更改.

I think what you need to do is check the return code of robocopy and change it.

要进行检查,您需要查看 PowerShell自动变量$?

To check it you need to look at a PowerShell automatic variable $?

$?
包含最后一个操作的执行状态.它包含 如果最后一次操作成功,则为TRUE;如果失败,则为FALSE.

$?
Contains the execution status of the last operation. It contains TRUE if the last operation succeeded and FALSE if it failed.

所以最后两行可能是...

So the last couple of lines could be...

ROBOCOPY "$env:WORKSPACE\ETL\Project Type 0\bin\DEFAULT" "$outputdir" /E /v
If($?){exit 0}

这应该做的是从robocopy获取任何非零结果,并强制脚本返回true.同样,请注意,这对于所有返回码都将返回OK.如果不希望这样做,那么您可以轻松地为某些代码构建一些逻辑.

What this should do is take any non zero result from robocopy and force the script to return true. Again, be aware that this would return OK for all return codes. If this is not desirable then you could easily build some logic for certain codes.

由于我没有您的环境,因此我无法真正测试此代码,但从理论上讲,它应该可以工作,或者至少可以让您开始需要的地方.

I cannot really test this code as I do not have your environment but in theory it should work or at least get you started on where you need to be.

这篇关于生成步骤"Windows PowerShell"将生成标记为失败,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆