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:
- Como faço para encerrar o túnel SSH após o uso?
- Existe uma maneira melhor de estabelecer o túnel em um script de pipeline Jenkins?