作爲Jenkins管道腳本的一部分,我需要執行一些SQL腳本來初始化數據庫(mariadb)。這項工作在我擁有的詹金斯奴隸上運行。我維護Jenkins主實例,但不是它運行的主機。需要在Jenkins管道腳本中執行SQL腳本的工作策略
我的第一次嘗試是在腳本中調用「Sql.newInstance(...)」和「sql.execute(...)」。由於mariadb jar不在類路徑中,因此失敗。
然後我嘗試設置從屬的CLASSPATH env var,將mariadb客戶端jar添加到它,然後斷開連接並重新連接從屬設備。這似乎沒有效果。
然後我嘗試了@ GrapeConfig/@ Grab方法。我使用@GrapeConfig來設置「systemClassLoader = true」。這會因「無法找到合適的類加載器」而失敗。於是,我嘗試刪除@GrapeConfig,並且失敗,出現「RuntimeException:無法創建類javax.xml.parsers.SAXParserFactory的提供程序」。
接下來,我想我會嘗試從「sh」命令直接運行「mysql」,並在我的sql腳本的內容中管道。這似乎是合理的,但我不確定這是否會起作用。
我已經看過筆記談論各種嘗試這樣做,但我從來沒有聽說過某人成功地做到這一點。
你可以把mariadb jar放在Jenkins JDK/jre/lib/ext中,試試用Sql.newInstance(...) –
你可以把Groovy代碼放到Gradle項目中運行SQL腳本,然後使用Jenkins在管道中使用Gradle構建步驟運行所需的Gradle任務。這是我之前完成的設置數據庫以在項目CI構建上運行測試的事情。然後你可以在Jenkins之外離線工作。 – macg33zr
有趣的想法,特別是在我運行這些sql腳本之前,我已經使用Gradle構建腳本構建了自己的代碼。當然,您應該添加這個答案作爲答案,並加以闡述。 –