从 Azure DevOps Release Pipeline 调用控制台应用程序

Mik*_*ike 9 console powershell azure-devops azure-pipelines azure-pipelines-release-pipeline

尝试拥有在本地安装了部署代理的 Azure DevOps 发布管道,以有权访问本地数据库的特定用户身份运行控制台应用程序。

这是工作流程

Azure 发布管道调用-> 本地代理运行-> PS 脚本运行-> 控制台 exe

我正在通过以下内联脚本在管道中使用 PowerShell 任务:

$CMD = '$CMD = 'C:\ScheduledScripts\Adm\SpecToHobImport\SpecToHobImport.exe''
$user = $Env:userid
$password = $Env:pass
$dates = '$(startDate) $(endDate)'

$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $user, $securePassword

Start-Process -FilePath $CMD -Credential $credential -ArgumentList "$(startDate) $(endDate)" 
Run Code Online (Sandbox Code Playgroud)

我知道用户 ID 和密码以及命令行参数正在正确传递,但无论控制台应用程序多么简单,当代理运行 powershell 脚本时它都会崩溃。我尝试在各种服务帐户(系统、管理员等)下运行 DevOps 代理服务,我可以在安装了代理的服务器上手动运行脚本,并且脚本和控制台应用程序手动运行良好。

当我运行 Release 管道时,它会在 DevOps 中报告它运行成功,我只能从代理服务器上的 Windows 事件日志中检测到控制台应用程序已运行并立即崩溃。

我在 EventLog 中得到以下两个条目:

Faulting application name: conhost.exe, version: 6.3.9600.17415, time stamp: 0x5450410b
Faulting module name: USER32.dll, version: 6.3.9600.19478, time stamp: 0x5d6aa558
Exception code: 0xc0000142
Fault offset: 0x00000000000ecf30
Faulting process id: 0x770
Faulting application start time: 0x01d5bcdf64d0ac17
Faulting application path: C:\Windows\system32\conhost.exe
Faulting module path: USER32.dll
Report Id: a292ad24-28d2-11ea-8103-0050569f788f
Faulting package full name: 
Faulting package-relative application ID: 
Run Code Online (Sandbox Code Playgroud)

和这个条目:

Faulting application name: SpecToHobImport.exe, version: 1.0.0.0, time stamp: 0x5e06463f
Faulting module name: KERNELBASE.dll, version: 6.3.9600.18895, time stamp: 0x5a4b127e
Exception code: 0xc0000142
Fault offset: 0x0009d4e2
Faulting process id: 0x40c
Faulting application start time: 0x01d5bcdf64d0ac17
Faulting application path: C:\ScheduledScripts\Adm\SpecToHobImport\SpecToHobImport.exe
Faulting module path: KERNELBASE.dll
Report Id: a2a5c015-28d2-11ea-8103-0050569f788f
Faulting package full name: 
Faulting package-relative application ID: 
Run Code Online (Sandbox Code Playgroud)

即使是主应用程序为空的控制台应用程序也会导致应用程序崩溃。

Lan*_*SFT 0

当我运行发布管道时,它会在 DevOps 中报告它运行成功,并且我只能从代理服务器上的 Windows 事件日志中检测到控制台应用程序已运行并立即崩溃。

看起来该发布管道已经完成并返回了success当时的状态。

所以我认为你的崩溃可能是由于 VSTS 的默认行为造成的,它将在完成后关闭构建/发布期间启动的所有进程。就像jessehouwing在这里描述的那样。