我在Jenkins中创建了一个powershell脚本来运行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()时,我收到以下错误:一月一日
从一些研究来看,这个错误似乎是因为DB2不能处理加密数据。
编辑:我试图添加
$SecurePassword = ConvertTo-SecureString $PASSWORD -AsPlainText -Force
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)
在我的powershell脚本的开头,但它仍然抛出相同的错误,即使凭据在纯文本中使用时工作正常
1条答案
按热度按时间kt06eoxx1#
如果我正确地理解了Credentials Binding Jenkins plugin的文档,那么在
withCredentials()
调用中指定的变量将成为 * 环境 * 变量,以便能够跨进程边界使用它们。请注意,这些环境变量的值 * 不 * 加密,因此目标进程不需要额外的(解密)工作。
因此,您需要使用
$env:
[1]而非仅使用$
来引用PowerShell中的这些变量:[1]请参阅概念性about_Environment_Variables说明主题。