paulmiller3000
paulmiller3000

Reputation: 461

Liquibase over SSH: Unexpected error running Liquibase: <file> does not exist

We have been using Liquibase successfully for about six months. I'm moving to a new CI/CD pipeline using CircleCI and running into an error when running liquibase update over SSH.

Here's the command (after many iterations and much exploration of Liquibase documentation): ssh $SSH_USER@$TEST_JOB_SSH_HOST "cd /var/www/html/liquibase ; liquibase --url=jdbc:$TEST_DB_URL/$TEST_DB_SCHEMA?user=$TEST_DB_USERNAME --username=$TEST_DB_USERNAME --password="\""$TEST_DB_PASSWORD"\"" --changelog-file=cl-main.xml --search-path=.,./ update --log-level 1"

The result:

enter image description here

However, the file does exist and can be seen here:

enter image description here

It was successfully executed several months ago using our old approach. Now I think Liquibase is just parsing files and somehow failing, likely because it's running from a different directory.

Here's a snippet from the changeset file:

<sqlFile dbms="mysql, mariadb"
    encoding="UTF-8"
    endDelimiter=";"
    path="/../data/regional_integration_details-ingest_day-01.sql"
    relativeToChangelogFile="true"
    splitStatements="true"
    stripComments="true"/>

I think the issue is the leading slash.

The command I pasted above was based on reviewing this help document: https://docs.liquibase.com/concepts/changelogs/how-liquibase-finds-files.html

I'm struggling with the proper syntax to include in the --search-path parameter -- if that's even the correct parameter -- to make this work.

The nuclear option (yet to be tested) is to update all of our changesets, removing the leading slash. I'd prefer not to go that route.

Suggestions?

Edit 1

Updating to mention that the first four changesets are parsed successfully. They have path values like ../dirname/sqlscript_00.sql. Liquibase chokes on the first script with /../dirname/sqlscript_01.sql.

Also, we have no problems running Liquibase in local development, when we cd to /var/www/html/liquibase in our Docker containers and execute the liquibase update command.

Edit 2

Having CircleCI SSH directly into the server doesn't work, as it doesn't carry the variables over with it. enter image description here

Passing the commands via SSH preserves those variables.

enter image description here

Upvotes: 2

Views: 3100

Answers (1)

Daryl Doak
Daryl Doak

Reputation: 244

Liquibase removed support for absolute paths in v4.x.

Upvotes: 1

Related Questions