kar*_*yan 1 changeset liquibase jenkins jenkins-pipeline liquibase-sql
我从 Linux(Centos) 终端运行以下命令,
mvn --settings /home/centos/.m2/jenkins/liquibase-settings.xml -e resources:resources -Pdev -Dliquibase.promptOnNonLocalDatabase=false -Dliquibase.defaultSchemaName=MYDEV_SCHEMA liquibase:updateSQL liquibase:update -Dsettings.security=/home/centos/.m2/jenkins/liquibase-security-settings.xml -Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
一切都很顺利。
当我通过詹金斯运行时,同样的事情,进入下面,
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:4.2.0:updateSQL (default-cli) on project project-db:
[ERROR] Error setting up or running Liquibase:
[ERROR] Validation Failed:
[ERROR] 16 change sets check sum
[ERROR] db/changelog/ABCD.xml::1234-23::User1 was: 8:67913d9505606eeaaa4998fd594a8ccf but is now: 8:9d985650b579319df50f30732d66909c
[ERROR] db/changelog/ABCD.xml::1234-78::User1 was: 8:3b3babd5d0712f846402af13ede528f7 but is now: 8:0214bf10acfd160fc6f7d709edab2f2e
[ERROR] db/changelog/ABCD.xml::1234-142::User1 was: 8:5e3c8fc77fc87f0e9740c0bff717f579 but is now: 8:53094dd8c32ec71b8d76fdd71009c548
[ERROR] db/changelog/ABCD.xml::1234-200::User1 was: 8:c40ec5c77f7b10961ee550edd756f51f but is now: 8:9bef09eb0681f7ea7bf827b6ac136433
[ERROR] db/changelog/ABCD.xml::1234-923::User1 was: 8:747cbcbda155679dd2fc1bfcc40991c4 but is now: 8:68c8046c220b8d2eb46ed3ac07ebc2a2
[ERROR] db/changelog/ABCD.xml::1234-952::User1 was: 8:ecaad2afacf6c61f18e08cb3e235292a but is now: 8:0f7f9087de5cc2e62a96a86988d07a9d
[ERROR] db/changelog/ABCD.xml::1234-955::User1 was: 8:3ddd6fd25fb4a68accf50190b3ab6738 but is now: 8:8ebed2810bad45ace402f99a957a2c5a
[ERROR] db/changelog/ABCD.xml::1234-957::User1 was: 8:cc6144775a784d10bc4523dccae02c2e but is now: 8:f0fb84fb3a677e760b5bbad3149e8a17
[ERROR] db/changelog/ABCD.xml::1234-958::User1 was: 8:b0c71a212949df4863ce622e61315cee but is now: 8:9c6ea7b8f8cb3f6e65871085527fa4c5
[ERROR] db/changelog/ABCD.xml::1234-960::User1 was: 8:b0966c55100b0a2daae7dd34b7d1849f but is now: 8:5db8b313d34612e1a0035caa73bfae2d
[ERROR] db/changelog/ABCD.xml::1234-961::User1 was: 8:3e3b96c656362b5bed959428772efbdf but is now: 8:622c3530660fa51cfb806cc454736a8e
[ERROR] db/changelog/ABCD.xml::1234-964::User1 was: 8:50e079098e7d2be9e1299d68717af265 but is now: 8:13ab1763f5f21e80dc5f7aa714916f01
[ERROR] db/changelog/ABCD.xml::1234-971::User1 was: 8:fe000258281e834309f9454077e4935d but is now: 8:b238dad4489c9683a3e362820a0ba715
[ERROR] db/changelog/ABCD.xml::1234-974::User1 was: 8:578a1f3510ac700373b40d83ffbfcdde but is now: 8:3eeb6e61dec24eac4148a6c66033e125
[ERROR] db/changelog/ABCD.xml::100000011::User1 was: 8:5d0882f8413b6d1063ab023e7c4ec917 but is now: 8:e019e12a40add4536a128ba7b9b06f69
[ERROR] db/changerequest/ABCD/ABCD.1_Base.xml::ABCD1-100000211::User1 was: 8:9ea4f4f4b5a2db0d1c7e439887e9129c but is now: 8:ebe390648144994233ecd6101e04380c
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.liquibase:liquibase-maven-plugin:4.2.0:updateSQL (default-cli) on project project-db:
Run Code Online (Sandbox Code Playgroud)
我的詹金斯代码,
dir("${liquibase_working_dir}"){
configFileProvider([
configFile(fileId: 'liquibase-settings.xml', variable: 'LIQUIBASE_SETTINGS'),
configFile(fileId: 'liquibase-security-settings.xml', variable: 'LIQUIBASE_SECURITY_SETTINGS'),
]) {
withMaven(maven:'maven', mavenSettingsFilePath: "${LIQUIBASE_SETTINGS}") {
sh "mvn -e resources:resources liquibase:updateSQL liquibase:update -P${env_lowercase} \"-Dsettings.security=${LIQUIBASE_SECURITY_SETTINGS}\" -Dliquibase.promptOnNonLocalDatabase=false -Dliquibase.defaultSchemaName=${schema} -Dfile.encoding=UTF-8"
}
}
sh "cp target/liquibase/migrate.sql target/liquibase/${env_lowercase}-${currentBuild.number}-${schema}-updates.sql"
}
Run Code Online (Sandbox Code Playgroud)
我错过了重要的一点,没有对 liquibase 存储库的提交。
小智 5
当 Liquibase 到达变更集时,它会计算它的校验和并将其存储在 DATABASECHANGELOG 表中。为 Liquibase 存储校验和的价值是了解变更集自运行以来是否已被修改。
如果变更集自运行以来已发生更改,Liquibase 将退出迁移并显示类似 的错误消息Validation failed: change set check sums <changeset identifer> was: <old checksum> but is now: <newchecksum>
。这是因为 Liquibase 无法识别更改的内容,并且数据库的状态可能与更改日志预期的状态不同。
要忽略变更集中所做的有效更改的此错误,有以下选项:
1.clearCheckSums : clearCheckSums 清除所有校验和并使 DATABASECHANGELOG 表的 MD5SUM 列无效,以便在下一次数据库更新时重新计算它们。已部署的变更集将重新计算其校验和,并且将部署挂起的变更集。有关此方法的更多详细信息,请访问此链接
2. runOnChange 属性: runOnChange 属性在第一次看到更改以及每次修改更改集时执行更改。有关此方法的更多详细信息,请访问此链接
3. runAlways 属性:每次运行时执行变更集,即使之前已经运行过。要使用此功能,请runAlways = true
在变更集中设置属性。示例如下:
<changeSet id="liquibase-0" author="liquibase" runAlways="true">
<sqlFile relativeToChangelogFile="true" path="db/file.sql"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)
4.<validCheckSum>
属性:将元素添加到变更集中。元素的文本内容应包含错误消息中的旧校验和。
5. 手动更新 DATABASECHANGELOG 表:第一个选项是手动更新 DATABASECHANGELOG 表,以便具有相应 id/author/filepath 的行的校验和为空值。您需要对已部署变更集的所有环境执行此操作。下次运行 Liquibase update 命令时,它会将校验和值更新为新的正确值。
干杯!!
归档时间: |
|
查看次数: |
9060 次 |
最近记录: |