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:
- Wie beende ich den SSH-Tunnel nach der Verwendung?
- Gibt es eine bessere Möglichkeit, den Tunnel in einem Jenkins-Pipeline-Skript einzurichten?