db2 Powershell脚本无法使用Credentials()解密来自Jenkins的密码

0h4hbjxa  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(171)

我在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脚本的开头,但它仍然抛出相同的错误,即使凭据在纯文本中使用时工作正常

kt06eoxx

kt06eoxx1#

如果我正确地理解了Credentials Binding Jenkins plugin的文档,那么在withCredentials()调用中指定的变量将成为 * 环境 * 变量,以便能够跨进程边界使用它们。
请注意,这些环境变量的值 * 不 * 加密,因此目标进程不需要额外的(解密)工作。
因此,您需要使用$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说明主题。

相关问题