Как Script имеет другой результат при выполнении в командной строке по сравнению с выполнением на этапе сборки - PullRequest
0 голосов
/ 23 января 2019

У меня есть сценарий powershell, который используется для подключения к базе данных Oracle, из которого я буду запрашивать определенные поля.Сценарии начинаются следующим образом:

        [System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")

Который при выполнении через командную строку

        PS C:\Users\MyuserID\Documents\DBtest> .\DBtest.ps1

дает следующий вывод:

        GAC    Version        Location                                                                                         
        ---    -------        --------                                                                                         
        True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_64\System.Data.OracleClient\v4.0_4.0.0.0__b77a5c561934e0...

За этим следует определенный оператор выборакоторые работают, как ожидалось, и возвращаются со строками, которые мы запросили

Однако, когда я пытаюсь выполнить то же самое в шаге сборки Jenkins Build либо путем вставки команды внутри шага сборки или вызова ее по абсолютному пути, я получаюэто как результат:

        Started by user MyuserID
        Building in workspace E:\Datapower\Jenkins\workspace\powershell_remote_execute
        [powershell_remote_execute] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'D:\TEMP\jenkins5910047931722903259.ps1'"

        GAC    Version        Location                                                 
        ---    -------        --------                                                 
        True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data.O...
        Exception calling "Open" with "0" argument(s): "Attempt to load Oracle client 
        libraries threw BadImageFormatException.  This problem will occur when running 
        in 64 bit mode with the 32 bit Oracle client components installed."
        At C:\Users\MyuserID\Documents\DBtest\DBtest.ps1:13 char:3
        +         $connection.Open()
        +         ~~~~~~~~~~~~~~~~~~
            + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
            + FullyQualifiedErrorId : InvalidOperationException



        Finished: SUCCESS

Не требуется много времени, чтобы понять, что Jenkins выбирает 32-битные бинарные файлы для подключения, когда предполагается выбрать 64-битный:

        GAC    Version        Location                                                 
        ---    -------        --------                                                 
        True   v4.0.30319     C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data.O... 

Редактировать: я не вызываю явно исполняемый файл x86, я просто передаю. command или filepath к команде

Может кто-нибудь подсказать мне, как решить эту проблему.

1 Ответ

0 голосов
/ 23 января 2019

Можете ли вы назвать исполняемый файл x86?

Вместо:

[powershell_remote_execute] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'D:\TEMP\jenkins5910047931722903259.ps1'"

Попробуйте

[powershell_remote_execute] $ "C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -NonInteractive -ExecutionPolicy ByPass" "& 'D:\TEMP\jenkins5910047931722903259.ps1'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...