Azure Devops-自托管代理上的PowerShell任务

时间:2019-06-24 14:11:10

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

我正在构建一个正在构建的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代理进行访问

1 个答案:

答案 0 :(得分:1)

同意Shayki,您可以在仓库中创建一个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

第一个更改是,您需要用变量替换硬代码。通过task传递值,这是维护脚本的好方法。

第二个也是重要变化的地方是在-Recurse之后添加Remove-Item,否则当$ RootPath的值是硬代码,例如'C:\ Users \ '。

  

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

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

enter image description here

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

希望我的样本可以帮助您实现所需的目标。