Запуск AutoIt скрипта взаимодействующего с GUI из Jenkins под Windows
Есть у меня очень старое Windows ПО задачу по сборке файлов в котором надо было автоматизировать.
С этим я справился написав AutoIt скрипт, который нажимает куда надо и вводит в окна данные. В итоге мне достаточно передать скрипту AutoIt имя файла и путь к утилите - он сам ее откроет и сделает экспорт проекта в компилированный файл.
Учим AutoIt павильно нажимать конпки при запуске скрипта в Jenkins.
Для этого вместо функции Send нужно использовать функцию ControlSend/ControlClick. Вохможны залипания конопок, для этого перед вызовом ControlSend используем трюк ControlSend("", "", "", "", 0). Теперь действия работают.
Далее настроим Jenkins.
Нельзя взаимодействовать с GUI из службы, даже если вы разрешите ей выводить окна. Тут одно решение - сделать подчиненный узел Jenkins-slave. При 'njv скрипт сможет взаимодействовать с GUI только при активном сеансе пользователя, т.е. должен быть произведен вход в систему.
Для этого создаю нового пользователя в системе, включаю для него автоматический вход, в планировщике создаю два задания:
1) При входе: Запуск bat-скрипт для запуска Jenkins в консоли, так он сможет взаимодействовать с GUI. Скрипт "C:\Program Files\Java\jre7\bin\java.exe" -jar "C:\Program Files\Jenkins\war\WEB-INF\slave.jar" -jnlpUrl http://10.0.6.10:8080/computer/jenkins-gui-win-slave/slave-agent.jnlp -secret fb8d87c5e4625bf350716608ddd58a83fc10b8d1f7699ee39245e99dcbfb8f35
2) При входе: Блокировка пользователя после включения. Выполнить rundll32.exe user32.dll, LockWorkStation
В итоге фоточки моргают кнопоски жмуться и файлы создаются - красота!
С этим я справился написав AutoIt скрипт, который нажимает куда надо и вводит в окна данные. В итоге мне достаточно передать скрипту AutoIt имя файла и путь к утилите - он сам ее откроет и сделает экспорт проекта в компилированный файл.
Учим AutoIt павильно нажимать конпки при запуске скрипта в Jenkins.
Для этого вместо функции Send нужно использовать функцию ControlSend/ControlClick. Вохможны залипания конопок, для этого перед вызовом ControlSend используем трюк ControlSend("", "", "", "", 0). Теперь действия работают.
Далее настроим Jenkins.
Нельзя взаимодействовать с GUI из службы, даже если вы разрешите ей выводить окна. Тут одно решение - сделать подчиненный узел Jenkins-slave. При 'njv скрипт сможет взаимодействовать с GUI только при активном сеансе пользователя, т.е. должен быть произведен вход в систему.
Для этого создаю нового пользователя в системе, включаю для него автоматический вход, в планировщике создаю два задания:
1) При входе: Запуск bat-скрипт для запуска Jenkins в консоли, так он сможет взаимодействовать с GUI. Скрипт "C:\Program Files\Java\jre7\bin\java.exe" -jar "C:\Program Files\Jenkins\war\WEB-INF\slave.jar" -jnlpUrl http://10.0.6.10:8080/computer/jenkins-gui-win-slave/slave-agent.jnlp -secret fb8d87c5e4625bf350716608ddd58a83fc10b8d1f7699ee39245e99dcbfb8f35
2) При входе: Блокировка пользователя после включения. Выполнить rundll32.exe user32.dll, LockWorkStation
В итоге фоточки моргают кнопоски жмуться и файлы создаются - красота!