我在VS Team Services的powershell脚本末尾收到以下错误:
任务PowerShell失败。这导致作业失败。查看任务的日志以获取更多详细信息。
但是,脚本没有失败,它完成了我想要它做的一切。有什么办法可以向VS Team Services解释一下吗?
该脚本从VS Team Services获取已编译和测试的代码,并将其推送到bitbucket上的git存储库。这样,我可以自动创建一个docker容器并更新我的应用程序。这是脚本:
git clone BITBUCKET_URL/example-repo.git
cd example-repo
echo "Clean app-folder and remove Dockerfile"
remove-item app -recurse -force
remove-item Dockerfile -force
new-item -name app -itemtype directory
echo "Copy new files into repository"
cp ../deploy/Dockerfile .
cp ../ExampleApp/bin/Debug/* ./app
echo "Set email, name and include all files"
git config user.email "EMAIL"
git config user.name "NAME"
git add -A
echo "What has changed:"
git status
echo "Commit and Push..."
git commit -m "VS Online Commit"
git push origin master
此脚本可以正常运行并完成所有操作。但是,这是我的Visual Studio Team Services日志的结尾:
******************************************************************************
Starting task: Powershell: deploy/deploy.ps1
******************************************************************************
Cloning into 'example-repo'...
Clean app-folder and remove Dockerfile
Directory: C:\PROJECT\example-repo
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 7/17/2015 7:59 AM app
Copy new files into repository
Set email, name and include all files
What has changed:
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: app/App.exe
modified: app/App.pdb
Commit and Push...
VS Online Commit
2 files changed, 0 insertions(+), 0 deletions(-)
To BITBUCKET_URL/example-repo.git
b861c96..afd33e6 master -> master
******************************************************************************
Finishing task: PowerShell
******************************************************************************
Task PowerShell failed. This caused the job to fail. Look at the logs for the task for more details.
******************************************************************************
Finishing Build
******************************************************************************
从这个输出中,以下行是红色的,类似于错误行:
Cloning into 'example-repo'...
和
To BITBUCKET_URL/example-repo.git
b861c96..afd33e6 master -> master
这可能是这里的东西返回0但这就是VS Team Services“检测到”失败的原因吗?
我该如何防止这种情况?
更新
仅运行git clone
已经显示存在错误,因此似乎git clone
和git push
会导致某些因VS Team Services错误而被视为错误的内容。
答案 0 :(得分:1)
显然,Visual Studio会对错误通道做出反应,就像脚本发生错误一样。由于您的git
会将某些输出发送到错误频道,因此您可以将脚本与2>&1
输出重定向器一起使用,或者将$ErrorActionPreference
设置为脚本中的silentlyContinue
,或者重定向所有git
1}}命令输出方式2>&1
。
关于退出代码 - 如果您的脚本不包含exit <code>
命令,则其退出代码为零,因为所有git
命令的退出代码在解释脚本时被Powershell吸收,可用在每个命令之后的脚本中$lastExitCode
,但如果不使用则删除。
答案 1 :(得分:1)
正如Vesper在他的回答中所写,git正在向stderr发送输出,VS Team Services认为它因此而失败。
但是,只是重定向或忽略stderr对我来说似乎不是正确的解决方案。相反,您可以指定:
git clone --quiet ...
git push --porcelain ...
停止git报告stderr的状态,并根本停止报告(--quiet
)或将其发送到stdout(--porcelain
)。
<强>更新强>
如果git add
显示有关行结尾的警告,您可以使用以下配置禁用它:
git config core.safecrlf false
当然,您可能还想在配置中设置core.autocrlf
。