Liquibase via SSH para instância remota do MySQL

Liquibase via SSH para instância remota do MySQL

Estou automatizando a implantação do meu aplicativo "LAMP". No momento tenho uma configuração do Jenkins com um pipeline para implantar no ambiente local do qual tenho controle total. Na tentativa de garantir que os esquemas do banco de dados estejam sincronizados, meu olhar recaiu sobre o liquibase. Meu problema é como criar um script do pipeline para conectar-se ao servidor remoto.

Eu usaria algo como

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

Mas não há JVM no servidor de destino e não tenho possibilidade de instalá-lo.

Meu segundo pensamento é estabelecer um túnel SSH

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

Minha pergunta é dupla:

  1. Como faço para encerrar o túnel SSH após o uso?
  2. Existe uma maneira melhor de estabelecer o túnel em um script de pipeline Jenkins?

informação relacionada