作为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脚本的内容中管道。这似乎是合理的,但我不确定这是否会起作用。
我已经看过笔记谈论各种尝试这样做,但我从来没有听说过某人成功地做到这一点。
+0
你可以把mariadb jar放在Jenkins JDK/jre/lib/ext中,试试用Sql.newInstance(...) –
+0
你可以把Groovy代码放到Gradle项目中运行SQL脚本,然后使用Jenkins在管道中使用Gradle构建步骤运行所需的Gradle任务。这是我之前完成的设置数据库以在项目CI构建上运行测试的事情。然后你可以在Jenkins之外离线工作。 –
+0
有趣的想法,特别是在我运行这些sql脚本之前,我已经使用Gradle构建脚本构建了自己的代码。当然,您应该添加这个答案作为答案,并加以阐述。 –