Мне нужно выполнить некоторые операции SQL в конвейере jenkins. В конвейере jenkins я запускаю следующую команду
sh 'mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306'
он успешно подключен. Но после этого, когда я выполняю следующую команду, например sh «DROP DATABASE IF EXISTS dbname», она показывает
"DROP: not found Error is hudson.AbortException: script returned exit code 127"
. Как выполнять запросы mysql в конвейере jenkins, когда я успешно подключился к mysql. Я использую операционную систему Ubuntu.
Спасибо
Спасибо. Хочу ли я включить sh 'mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306' в этот файл сценария оболочки.
Да, либо создайте сценарий оболочки со всеми командами mysql, либо, если это всего лишь один лайнер, сделайте то, что предложил @hariK.
Просто подумал, что эта ссылка будет полезна: github.com/jciskey/jenkins-pipeline-mysql-database-management/…
Потому что команды 1 и 2 выполняются в разных оболочках. Пытаться,
sh "mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306 -e \'DROP <cmd>\' <database>"
Спасибо за ваш ответ. Если я хочу выполнить несколько запросов в одном sh, можем ли мы сделать это. sh "mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306 -e \'УДАЛИТЬ БАЗУ ДАННЫХ, ЕСЛИ СУЩЕСТВУЕТ dbname -e \' \'use dbanme -e \' "
Я не думаю, что -e будет поддерживать несколько запросов. Это для одного запроса. Если вы собираетесь выполнять несколько запросов, используйте сценарий оболочки или mysql < query.sql.
Спасибо. Если я хочу написать файл сценария оболочки, как я могу загрузить в него файл sql и запустить в файле сценария оболочки?
Или как выполнить несколько запросов sql в одной строке sh?
Пример сценария оболочки
#!/bin/bash
mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306 <<EOF
DROP DATABASE IF EXISTS dbname
...
...
EOF
Я завершил файл сценария оболочки, но Дженкинс показывает отказ в разрешении. Он показывает «./shell.sh: Отказано в доступе»
Сделайте «chmod 755» в сценарии, что даст Дженкинсу разрешение на выполнение. Убедитесь, что пользователь ОС, под которым работает Jenkins, имеет доступ к каталогу, в котором находится скрипт, и полностью определите вызов скрипта, например «/some/directory/path/shell.sh».
В моем файле сценария оболочки я написал так: \n mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306 <<EOF DROP DATABASE IF EXISTS dbname
CREATE DATABASE dbname
USE dbname
EOF \n Но jenkins показывает версию сервера MySQL для правильного синтаксиса для использования рядом с ' CREATE DATABASE USE» в строке 2
Сначала убедитесь, что ваш сценарий оболочки работает за пределами Jenkins, работая от имени того же пользователя, от имени которого работает Jenkins.
Это потому, что он отключается, когда завершается первая "sh". Создайте один сценарий оболочки со всеми командами mysql, которые вы хотите выполнить, а затем вызовите его из «sh».