在 Jenkins 变量中保存 powershell return 值
Save powershell return value in a Jenkins Variable
我在 Jenkins 中有一个脚本化管道,我正在调用一个 powershell 脚本来生成指向 onedrive 中文件的链接,这样我就可以在下一步中使用插件发送它们。我尝试使用以下方法来完成此操作
def return_val = powershell script: "Path\to\script\someScript.ps1", returnStatus: true
基于这个答案
然而,我得到
Caught: groovy.lang.MissingMethodException: No signature of method:
hudson7145251072251175654.node() is applicable for argument types:
(hudson7145251072251175654$_run_closure1) values:
[hudson7145251072251175654$_run_closure1@46271dd6] Possible solutions:
use([Ljava.lang.Object;), notify(), wait(), run(), run(), any()
这是我正在使用的 powershell 脚本。
#Config Variables
$SiteURL = "https://company-my.sharepoint.com/personal/name"
$FolderURL= "/Documents/Desktop" #Folder's Site Relative Path
Connect-PnPOnline -Url $SiteURL -Interactive
$Context.Credentials = $Credentials
$linklist =[System.Collections.ArrayList]@()
linkfunction {
$FolderItems = @(Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType File)
foreach($item in $folderItems)
{
$linklist.Add($item.Name)
Write-Host $linklist
}
return $linklist
powershell returnStatus: true
仅 return 来自 PowerShell 脚本的数字 退出代码 (成功时为 0,但可以通过以下方式设置为不同的值例如从 PowerShell 调用 exit 42
。
要return字符串或其他复杂数据从PowerShell到Groovy,需要使用powershell returnStdout: true
。这为您提供了 PowerShell 的整个输出,这些输出作为单个(可能是多行)字符串写入 成功输出流 。
简化的 PowerShell 脚本:
$list = [System.Collections.ArrayList]@()
$null = $list.Add('foo\bar')
$null = $list.Add('baz')
$list # Implicit output, a "return" statement is not required in PowerShell
分配给 $null
确保 ArrayList.Add()
的 return 值不会作为 PowerShell 脚本的(不需要的)输出结束。
这会在自己的行上输出每个数组元素:
foo\bar
baz
要将 PowerShell 输出返回到 Groovy 端的数组,我们可以这样做:
def return_val = powershell script: "Path\to\script\someScript.ps1", returnStdout: true
def return_array = return_val.split(/\r?\n/)
这里return_val
是一个多行字符串。使用 String.split()
方法,我们将其转回数组并将其存储在变量 return_array
.
中
String.split()
需要一个正则表达式,用于定义拆分字符串的位置。正则表达式 \r?\n
在 Windows \r\n
和 Unix-style \n
行结束处拆分。我正在使用 slashy string 文字来避免必须转义反斜杠,这对于 RegEx 模式非常方便。
我在 Jenkins 中有一个脚本化管道,我正在调用一个 powershell 脚本来生成指向 onedrive 中文件的链接,这样我就可以在下一步中使用插件发送它们。我尝试使用以下方法来完成此操作
def return_val = powershell script: "Path\to\script\someScript.ps1", returnStatus: true
基于这个答案
然而,我得到
Caught: groovy.lang.MissingMethodException: No signature of method: hudson7145251072251175654.node() is applicable for argument types: (hudson7145251072251175654$_run_closure1) values: [hudson7145251072251175654$_run_closure1@46271dd6] Possible solutions: use([Ljava.lang.Object;), notify(), wait(), run(), run(), any()
这是我正在使用的 powershell 脚本。
#Config Variables
$SiteURL = "https://company-my.sharepoint.com/personal/name"
$FolderURL= "/Documents/Desktop" #Folder's Site Relative Path
Connect-PnPOnline -Url $SiteURL -Interactive
$Context.Credentials = $Credentials
$linklist =[System.Collections.ArrayList]@()
linkfunction {
$FolderItems = @(Get-PnPFolderItem -FolderSiteRelativeUrl $FolderURL -ItemType File)
foreach($item in $folderItems)
{
$linklist.Add($item.Name)
Write-Host $linklist
}
return $linklist
powershell returnStatus: true
仅 return 来自 PowerShell 脚本的数字 退出代码 (成功时为 0,但可以通过以下方式设置为不同的值例如从 PowerShell 调用 exit 42
。
要return字符串或其他复杂数据从PowerShell到Groovy,需要使用powershell returnStdout: true
。这为您提供了 PowerShell 的整个输出,这些输出作为单个(可能是多行)字符串写入 成功输出流 。
简化的 PowerShell 脚本:
$list = [System.Collections.ArrayList]@()
$null = $list.Add('foo\bar')
$null = $list.Add('baz')
$list # Implicit output, a "return" statement is not required in PowerShell
分配给 $null
确保 ArrayList.Add()
的 return 值不会作为 PowerShell 脚本的(不需要的)输出结束。
这会在自己的行上输出每个数组元素:
foo\bar
baz
要将 PowerShell 输出返回到 Groovy 端的数组,我们可以这样做:
def return_val = powershell script: "Path\to\script\someScript.ps1", returnStdout: true
def return_array = return_val.split(/\r?\n/)
这里return_val
是一个多行字符串。使用 String.split()
方法,我们将其转回数组并将其存储在变量 return_array
.
String.split()
需要一个正则表达式,用于定义拆分字符串的位置。正则表达式 \r?\n
在 Windows \r\n
和 Unix-style \n
行结束处拆分。我正在使用 slashy string 文字来避免必须转义反斜杠,这对于 RegEx 模式非常方便。