Jenkinsパイプラインスクリプトの一部として、データベース(mariadb)を初期化するためにSQLスクリプトを実行する必要があります。この仕事は、私が所有するジェンキンスの奴隷の上で動く。私は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スクリプトの内容をパイプしてみようと思います。これは妥当と思われますが、これがうまくいくかどうかはわかりません。
私はこれを行う様々な試みについて話してきましたが、これを成功裏に実行した人は誰も聞いたことがありません。
Sql.newInstance(...)を使用してJenkins JDK/jre/lib/extとtryにmariadb jarを配置できますか? –
Groovyコードを使用してGradleプロジェクトでSQLスクリプトを実行し、Jenkinsを使用してパイプラインのグラデルビルドステップを使用して、必要なa Gradleタスクを実行します。これは、プロジェクトCIビルドでテストを実行するためにDBをセットアップする前に行ったことです。その後、Jenkins外でオフラインで作業することができます。 – macg33zr
興味深いアイデアは、特にこれらのSQLスクリプトを実行する直前に、私はGradleビルドスクリプトで自分のコードを構築しました。もちろん、これを答えとして追加する必要があります。 –