Powershell 脚本无法使用 Credentials() 从 Jenkins 解密密码
Powershell script unable to decrypt password from Jenkins withCredentials()
我创建了一个 powershell 脚本来 运行 Jenkins 中的 DB2 查询
withCredentials([usernamePassword(credentialsId: 'cred-id', usernameVariable: 'ID', passwordVariable: 'PASSWORD')]) {
$cn = new-object system.data.OleDb.OleDbConnection("Server=Server; Provider=IBMDADB2;DSN=DBName;User Id=$ID;Password=$PASSWORD");
$ds = new-object "System.Data.DataSet" "ds"
$q = "myQuery"
$da = new-object "System.Data.OleDb.OleDbDataAdapter" ($q, $cn)
$da.Fill($ds)
$cn.close()
}
如果我 运行 脚本并对我的凭据进行硬编码,它 运行 没问题。
使用 withCredentials(),我收到以下错误:Security processing failed with reason "15" ("PROCESSING FAILURE")
根据一些研究,错误似乎是因为 DB2 无法处理加密数据。有没有办法克服这个错误?
编辑:
我试着添加
$SecurePassword = ConvertTo-SecureString $PASSWORD -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
在我的 powershell 脚本的开头,但它仍然会抛出相同的错误,即使凭据在纯文本中可以正常工作
如果我正确理解 Credentials Binding Jenkins plugin 的文档,在 withCredentials()
调用中指定的变量将变为 environment 变量,以便能够使用它们跨进程边界。
请注意,这些环境变量的值未加密,因此目标进程不需要额外的(解密)工作。
因此,您需要使用 $env:
[1] 而不是 $
在 PowerShell 中引用这些变量:
$cn = new-object system.data.OleDb.OleDbConnection "Server=Server; Provider=IBMDADB2;DSN=DBName;User Id=$env:ID;Password=$env:PASSWORD"
[1] 请参阅概念性 about_Environment_Variables 帮助主题。
我创建了一个 powershell 脚本来 运行 Jenkins 中的 DB2 查询
withCredentials([usernamePassword(credentialsId: 'cred-id', usernameVariable: 'ID', passwordVariable: 'PASSWORD')]) {
$cn = new-object system.data.OleDb.OleDbConnection("Server=Server; Provider=IBMDADB2;DSN=DBName;User Id=$ID;Password=$PASSWORD");
$ds = new-object "System.Data.DataSet" "ds"
$q = "myQuery"
$da = new-object "System.Data.OleDb.OleDbDataAdapter" ($q, $cn)
$da.Fill($ds)
$cn.close()
}
如果我 运行 脚本并对我的凭据进行硬编码,它 运行 没问题。
使用 withCredentials(),我收到以下错误:Security processing failed with reason "15" ("PROCESSING FAILURE")
根据一些研究,错误似乎是因为 DB2 无法处理加密数据。有没有办法克服这个错误?
编辑: 我试着添加
$SecurePassword = ConvertTo-SecureString $PASSWORD -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
在我的 powershell 脚本的开头,但它仍然会抛出相同的错误,即使凭据在纯文本中可以正常工作
如果我正确理解 Credentials Binding Jenkins plugin 的文档,在 withCredentials()
调用中指定的变量将变为 environment 变量,以便能够使用它们跨进程边界。
请注意,这些环境变量的值未加密,因此目标进程不需要额外的(解密)工作。
因此,您需要使用 $env:
[1] 而不是 $
在 PowerShell 中引用这些变量:
$cn = new-object system.data.OleDb.OleDbConnection "Server=Server; Provider=IBMDADB2;DSN=DBName;User Id=$env:ID;Password=$env:PASSWORD"
[1] 请参阅概念性 about_Environment_Variables 帮助主题。