Liquibase über SSH zur Remote-MySQL-Instanz

Liquibase über SSH zur Remote-MySQL-Instanz

Ich bin gerade dabei, die Bereitstellung meiner „LAMP“-Anwendung zu automatisieren. Im Moment habe ich ein Jenkins-Setup mit einer Pipeline zur Bereitstellung in der lokalen Umgebung, über die ich die volle Kontrolle habe. Beim Versuch, sicherzustellen, dass die Datenbankschemata synchron sind, fiel mein Blick auf Liquibase. Mein Problem ist, wie ich die Pipeline so skripte, dass sie eine Verbindung zum Remote-Server herstellt.

Ich würde so etwas verwenden wie

scp db.changelog-1.1.xml remotehost:/path/to/
ssh remotehost liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=/path/to/db.changelog-1.1.xml --url="jdbc:mysql://127.0.0.1:3306/dbname?autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" --username=user --password=secretpass update

Auf dem Zielserver gibt es jedoch keine JVM und ich habe keine Möglichkeit, diese zu installieren.

Mein zweiter Gedanke ist, einen SSH-Tunnel einzurichten

ssh -L 3307:127.0.0.1:3306 remoteHost &
liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=/path/to/db.changelog-1.1.xml --url="jdbc:mysql://127.0.0.1:3307/dbname?autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" --username=user --password=secretpass update

Meine Frage ist zweigeteilt:

  1. Wie beende ich den SSH-Tunnel nach der Verwendung?
  2. Gibt es eine bessere Möglichkeit, den Tunnel in einem Jenkins-Pipeline-Skript einzurichten?

verwandte Informationen