【问题标题】:Azure Devops - PowerShell task on self-hosted agentAzure Devops - 自托管代理上的 PowerShell 任务
【发布时间】:2019-11-06 08:53:06
【问题描述】:

我有一个正在构建的 Azure Devops 部署管道设置,我可以毫无问题地部署到自托管虚拟机。

我有以下 powershell 脚本可以正确清除我的目标目录,留下 2 个不属于源代码控制的文件夹

Get-ChildItem -Path  'C:\inetpub\wwwroot\testDeploy\' -Recurse -exclude "pod","photos" |
Select -ExpandProperty FullName |
Where {$_ -notlike  '*\pod\*' -and $_ -notlike '*\photos\*'} |
sort length -Descending |
Remove-Item -force 

我尝试添加“PowerShell 脚本”任务,但我不知道如何将 PowerShell 脚本放入任务可以访问的文件夹中,即 $(System.DefaultWorkingDirectory)。任何人都可以建议我应该如何生成文件或将其存储在我的仓库中,然后由自托管的 Windows 代理访问

【问题讨论】:

  • 是否要访问 PowerShell 脚本中的预定义变量?
  • 不,脚本可以单独运行。我应该补充一点,我可以通过添加内联脚本来运行该过程,但我想了解如何在 repo 中维护它
  • 您可以创建一个文件夹“PowerShell scripts”并将脚本放在那里。
  • 您可以将您的脚本存储在 repos 中并由自我代理访问吗?
  • 这个错误信息是你的脚本路径不正确造成的。 .ps1 文件路径应为“xxx_work\3\s\xxx.ps1”,而不是“a”文件下。

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-devops-self-hosted-agent


【解决方案1】:

同意 Shayki,您可以在 repos 中创建一个 powershell(.ps1) 文件并将您的脚本粘贴到其中来实现。然后,使用powershell任务执行ps1文件中的脚本。

但是,正如您所说,您希望它在存储库中轻松维护。需要对您的脚本进行一些更改:

Param(
    [string]$RootPath,
    [string]$File1,
    [string]$File2,
    [string]$NonLike1,
    [string]$NonLike2
)

Get-ChildItem -Path  $RootPath -Recurse -include $File1,$File2 |
Select -ExpandProperty FullName |
Where {$_ -notlike  $NonLike1 -and $_ -notlike $NonLike2} |
sort length -Descending |
Remove-Item -Recurse -force

第一个变化是,你需要用变量替换硬代码。通过任务传递值,这是维护脚本的好方法。

第二个也是重要的变化是在Remove-Item之后添加-Recurse,否则你会得到如下所示的错误,而$RootPath的值是硬代码,例如'C:\Users\'。

Remove-Item:Windows PowerShell 处于非交互模式。阅读和 提示功能不可用。

然后,您可以在构建管道中添加任务。在 .ps1 文件所在的位置添加Script path 并输入参数值:

如果您想访问$(System.DefaultWorkingDirectory),请将其传递给$RootPath。

希望我的示例可以帮助你实现你想要的。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 2019-07-09
    • 1970-01-01
    • 2019-08-31
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2016-06-04
    相关资源
    最近更新 更多