Liquibase Plugin#
Proje içerisinde liquibase yeteneklerinin kullanılmasını sağlamaktadır.
diffChangelog
, generateChangelog
, updateSql
, changelogSyncSql
taskları geliştirilerek hvl-liquibase task grubu altına taşınmıştır. Ancak liquibase task grubu altındaki diğer taskların kullanımında konfigürasyonları yapıldığı takdirde herhangi bir kısıtlama bulunmamaktadır.
Kullanım#
Projelere iki farklı yöntem ile eklenebilmektedir. Yöntemler şunlardır:
Buildscript kullanımı
Pluginin birçok konfigurasyon parametresi bulunmaktadır. Proje içerisinde kullanımı ve parametreler aşağıdaki gibidir.
Konfigurasyon Yapısı#
hvlLiquibase {
gitEnabled = true
url = "ssh://git@10.150.0.134:7999/javalt/hvl-infra.git"
branch = "master"
username = ""
password = ""
databaseliquibaseYamlFile = "configuration/framework/spring/application-database-liquibase.yml"
databaseDatasourceYamlFile = "configuration/framework/spring/application-database-datasource.yml"
changelogFile = "src/main/resources/db/changelog/${moduleVersion}/generated-changelog.xml"
logLevel = '${hvl.liquibase.logLevel}'
arguments = [schemas: 'oauth']
diffChangelog {
// https://docs.liquibase.com/commands/inspection/diff-changelog.html
url = '${hvl.liquibase.url}'
username = '${hvl.liquibase.username}'
password = '${hvl.liquibase.password}'
referenceUrl = '${hvl.liquibase.referenceUrl}'
referenceUsername = '${hvl.liquibase.referenceUsername}'
referencePassword = '${hvl.liquibase.referencePassword}'
}
generateChangelog {
// https://docs.liquibase.com/commands/inspection/generate-changelog.html
url = '${hvl.liquibase.referenceUrl}'
username = '${hvl.liquibase.referenceUsername}'
password = '${hvl.liquibase.referencePassword}'
diffTypes = 'data'
}
updateSql {
url = '${hvl.liquibase.url}'
username = '${hvl.liquibase.username}'
password = '${hvl.liquibase.password}'
//from root dir example
changelogRootYamlPath = project.rootDir.getPath() + '/resources/liquibase/notification/changelog-root.yaml'
//from module dir example
changelogRootYamlPath = 'src/main/resources/db/changelog-root.yaml'
outputFilePath = 'output.sql'
arguments = [defaultSchemaName: 'notification', 'contexts': 'dev']
}
changelogSyncSql {
url = '${hvl.liquibase.url}'
username = '${hvl.liquibase.username}'
password = '${hvl.liquibase.password}'
changelogRootYamlPath = 'src/main/resources/db/changelog-root.yaml'
outputFilePath = 'changelog-sync.sql'
arguments = [defaultSchemaName: 'oauth', 'contexts': 'dev']
}
}
Liquibase pluginin yaml dosyası parse etme özelliği bulunmaktadır ve parse edilecek yaml dosyası databaseliquibaseYamlFile
parametresi olarak verilmelidir. Bu yaml file içerisinden ${hvl.liquibase.url}
gibi ifadeler ayrıştırılarak değerlerin okunması sağlanmakdır. Böylece tek bir dosya üzerinden ortak kullanılacak alanların alınabilmesine imkan sağlar.
gitEnabled
: Yaml dosyasının bir git projesi üzerinden alınması istendiği durumlarda true yapılması gerekmektedir.url
: Git üzerinden çekilecek repository'nin url bilgisidir.branch
: Git üzerinden çekilecek repository'nin branch bilgisidir.username
: Git üzerinden çekilecek repository'nin güvenlik için kullanılması gereken kullanıcı adı bilgisidir.password
: Git üzerinden çekilecek repository'nin güvenlik için kullanılması gereken şifre bilgisidir.databaseliquibaseYamlFile
: Ayrıştırılacak liquibase yaml dosyasının dosya yolu bilgisidir. Eğer gitEnabled true ise proje içindeki dosya yolu yazılmalıdır. gitEnabled false olduğu durumlarda fiziksel dosya yolunun tamamı yazılmalıdır. Örnek:/home/acuhadaroglu/dev/projects/framework/hvl-infra/configuration/framework/spring/application-database-liquibase.yml
databaseDatasourceYamlFile
: Ayrıştırılacak datasource yaml dosyasının dosya yolu bilgisidir.databaseliquibaseYamlFile
dosyasında${spring.datasource.username}
gibi ifadeler varsa ve bu değerlerin bulunduğu yaml dosyası path'i yazılmalıdır. Örnekte bu değerapplication-database-datasource.yml
içerisinde olduğu için bu dosyanın path'i verilmiştir. Eğer gitEnabled true ise proje içindeki dosya yolu yazılmalıdır. gitEnabled false olduğu durumlarda fiziksel dosya yolunun tamamı yazılmalıdır. Örnek:/home/acuhadaroglu/dev/projects/framework/hvl-infra/configuration/framework/spring/application-database-datasource.yml
changelogFile
: Liquibase tarafından oluşturulan script dosyasının hangi dosya yoluna oluşturulacağı bilgisidir. json, sql, yaml, xml gibi dosya uzantılarına destek vermektedir.logLevel
: Liquibase çalışırken console'a basılacak log seviyesi bilgisidir.arguments
: Ön tanımlı ayarlar dışında Liquibase içerisine verilmek istenen ekstra parametrelerin verilebileceği alan bilgisidir. Değerler map şeklinde verilmelidir.
diffChangelog
2 veritabanı arasında DDL olarak fark çıkaran task'dır. diffChangeLog plugin'i çalışma mantığı olarak çıktı alınan dosyayı ezeceği için bu dosyaya elle müdahale edildiyse dikkatli olunmalıdır.
url
: Fark çıkarılacak veritabanı bilgisidir. Buraya önceki versiyonun kurulu olduğu bir veritabanı bilgisi verilmelidir.username
: Fark çıkarılacak veritabanı kullanıcı adı bilgisidir.password
: Fark çıkarılacak veritabanı şifre bilgisidir.referenceUrl
: Fark çıkarılacak referans veritabanı bilgidisir. Buraya güncel veritabanının bilgisi verilmelidir.referenceUsername
: Fark çıkarılacak referans veritabanı kullanıcı adı bilgisidir.referencePassword
: Fark çıkarılacak referans veritabanı şifre bilgisidir.
generateChangelog
Verilen url bilgisine göre mevcut veritabanı scriptlerini oluşturan task'dır. Bu task fark almaz, sadece mevcut veritabının çıktısını verir. generateChangelog plugin'i çalışma mantığı olarak çıktı alınan dosyayı ezeceği için bu dosyaya elle müdahale edildiyse dikkatli olunmalıdır.
url
: Çıktısı alınacak veritabanı bilgisidir.username
: Çıktısı alınacak veritabanı kullanıcı adı bilgisidir.password
: Çıktısı alınacak veritabanı şifre bilgisidir.diffTypes
: Çıktısı alınacak veritabanında hangi türlerin çıktısının alınacağı bilgisidir. Varsayılan olarak sadece data çıktısı alabilecek şekilde ayarlama yapılmıştır. Alabileceği değerler:catalogs, tables, functions, views, columns, indexes, foreignkeys, primarykeys, uniqueconstraints, data, storedprocedures, triggers, sequences, databasepackage, databasepackagebody
updateSql
Verilen url
bilgisindeki veritabanına göre changelogRootYamlPath
bilgisindeki liquibase dosyasını okuyarak çalışması gereken fark scriptlerini çıkartır. Kısacası liquibase dosyasında olup veritabanında çalışmayan changeset'leri tespit eder ve outputFilePath
değerindeki path'e çıktısını yazar.
url
: Kullanılacak veritabanı bilgisidir.username
: Kullanılacak veritabanı kullanıcı adı bilgisidir.password
: Kullanılacak veritabanı şifre bilgisidir.changelogRootYamlPath
: Liquibase root dosyanın bilgisidir.outputFilePath
: Çıktının yazılacağı dosya bilgisidir.arguments
: Ön tanımlı ayarlar dışında Liquibase içerisine verilmek istenen ekstra parametrelerin verilebileceği alan bilgisidir. Değerler map şeklinde verilmelidir.changeLogParameters
: Liquibase dosyalarında kullanılan${schema_name}
gibi değerler varsa, çıktı üretilirken bu değerlerin doldurulması için kullanılır. Değerler map şeklinde verilmelidir. Eğer boş bırakılırsaapplication-database-liquibase.yml
içerisindekispring.liquibase.parameters
değerleri kullanılır.
changelogSyncSql
Verilen url
bilgisindeki veritabanına göre changelogRootYamlPath
bilgisindeki liquibase dosyasını okuyarak databasechangelog
tablosunun sync edecek sql'leri çıkartır. Kısacası liquibase dosyasında olup veritabanında çalışmayan changeset'leri tespit eder ve outputFilePath
değerindeki path'e databasechangelog
tablosu özelinde sql çıktısını yazar.
url
: Kullanılacak veritabanı bilgisidir.username
: Kullanılacak veritabanı kullanıcı adı bilgisidir.password
: Kullanılacak veritabanı şifre bilgisidir.changelogRootYamlPath
: Liquibase root dosyanın bilgisidir.outputFilePath
: Çıktının yazılacağı dosya bilgisidir.arguments
: Ön tanımlı ayarlar dışında Liquibase içerisine verilmek istenen ekstra parametrelerin verilebileceği alan bilgisidir. Değerler map şeklinde verilmelidir.changeLogParameters
: Liquibase dosyalarında kullanılan${schema_name}
gibi değerler varsa, çıktı üretilirken bu değerlerin doldurulması için kullanılır. Değerler map şeklinde verilmelidir. Eğer boş bırakılırsaapplication-database-liquibase.yml
içerisindekispring.liquibase.parameters
değerleri kullanılır.
Örnek application-database-datasource.yaml
hvl:
liquibase:
url: jdbc:postgresql://10.151.233.98:5432/hvl
username: HVL
password: hvl12345
referenceUrl: ${spring.datasource.url}
referenceUsername: ${spring.datasource.username}
referencePassword: hvl12345
logLevel: info
Plugin proje içinde ide üzerinden veya konsol ile kullanılabilir.
Konsol Kullanımı
Kullanım şekli:
gradle cleanAll build diffChangeLog
gradle cleanAll build generateChangelog
gradle cleanAll build updateSql
gradle cleanAll build changelogSyncSql
Ide üzerinden kullanım