Liquibase Version Control For Your Schema. Nathan Voxland April 3,

Similar documents
What is version control? (discuss) Who has used version control? Favorite VCS? Uses of version control (read)

Copyright 2014 Oracle and/or its affiliates. All rights reserved.

How to set up SQL Source Control The short guide for evaluators

TDDC88 Lab 4 Software Configuration Management

Large Scale Webapps Devteam Infrastructure

WHITEPAPER. Database DevOps with the Redgate Deployment Suite for Oracle

CSCI 1100L: Topics in Computing Lab Lab 11: Programming with Scratch

Version Control. CSC207 Fall 2014

A quick (and maybe practical) guide to Git and version control. By Jay Johnson

Working in Teams CS 520 Theory and Practice of Software Engineering Fall 2018

CPSC 491. Lecture 19 & 20: Source Code Version Control. VCS = Version Control Software SCM = Source Code Management

What is database continuous integration?

Linux System Management with Puppet, Gitlab, and R10k. Scott Nolin, SSEC Technical Computing 22 June 2017

Using Git to Manage Source RTL

Microservice Splitting the Monolith. Software Engineering II Sharif University of Technology MohammadAmin Fazli

Automatic MySQL Schema Management with Skeema. Evan Elias Percona Live, April 2017

The Salesforce Migration Playbook

Git Source Control: For the Rest of Us. Nolan Erck

1Copyright 2012, Oracle and/or its affiliates. All rights reserved.

SECTION 2: HW3 Setup.

Taskbar: Working with Several Windows at Once

Q&A Session for Connect with Remedy - CMDB Best Practices Coffee Break

SECTION 2: Loop Reasoning & HW3 Setup

Revision Control II. - svn

Automatically deploy Schema Changes with Ansible and Liquibase

Without further ado, let s go over and have a look at what I ve come up with.

UCT Application Development Lifecycle. UCT Business Applications

Git, the magical version control

You Can t Move Forward Unless You Can Roll Back. By: Michael Black

Section 2: Developer tools and you. Alex Mariakakis (staff-wide)

Automatically deploy Schema Changes with Ansible and Liquibase

Using GitHub to Share with SparkFun a

Version control CSE 403

3 Continuous Integration 3. Automated system finding bugs is better than people

How do I use BatchProcess

Implement an ADT while using Subversion

Programming with Haiku

SECTION 2: Loop Reasoning & HW3 Setup

Biocomputing II Coursework guidance

Laboratorio di Programmazione. Prof. Marco Bertini

LeakDAS Version 4 The Complete Guide

git commit --amend git rebase <base> git reflog git checkout -b Create and check out a new branch named <branch>. Drop the -b

The Old World. Have you ever had to collaborate on a project by

Version Control Systems

Git. A Distributed Version Control System. Carlos García Campos

Revision control. INF5750/ Lecture 2 (Part I)

Technology Background Development environment, Skeleton and Libraries

Let Robots Manage Your Schema Without Killing All Humans. Jenni

Text Input and Conditionals

EPHEMERAL DEVOPS: ADVENTURES IN MANAGING SHORT-LIVED SYSTEMS

Version control CSE 403


CS 520: VCS and Git. Intermediate Topics Ben Kushigian

Evaluation Guide for ASP.NET Web CMS and Experience Platforms

Continuous Delivery the hard way with Kubernetes. Luke Marsden, Developer

Your . A setup guide. Last updated March 7, Kingsford Avenue, Glasgow G44 3EU

Agreement in Distributed Systems CS 188 Distributed Systems February 19, 2015

CVS. Computer Science and Engineering College of Engineering The Ohio State University. Lecture 21

TM DevOps Use Case. 2017TechMinfy All Rights Reserved

Revision Control. An Introduction Using Git 1/15

CSE 332: Data Structures and Parallelism Winter 2019 Setting Up Your CSE 332 Environment

Version Control. Second level Third level Fourth level Fifth level. - Software Development Project. January 11, 2017

A Guide to Finding the Best WordPress Backup Plugin: 10 Must-Have Features

AEM Code Promotion and Content Synchronization Best Practices

Chapter 20 Troubleshooter

Pragmatic Guide to Git

Version Control for Fun and Profit

Scaling with Continuous Deployment

What happens during bootstrapping

Source control with Subversion A user perspective

User's Guide c-treeace SQL Explorer

ATMS ACTION TRACKING MANAGEMENT SYSTEM. Quick Start Guide. The ATMS dev team

How to version control like a pro: a roadmap to your reproducible & collaborative research

Handel-CodePipeline Documentation

Development Practice and Quality Assurance. Version Control. The first thing you should be told when you start a new job - Steve Freeman

Intro. Scheme Basics. scm> 5 5. scm>

Control Structures. Code can be purely arithmetic assignments. At some point we will need some kind of control or decision making process to occur

Jenkins: A complete solution. From Continuous Integration to Continuous Delivery For HSBC


DATABASE SYSTEMS. Database programming in a web environment. Database System Course, 2016

platform Development Process Optimization For Drupal centric projects

It s possible to get your inbox to zero and keep it there, even if you get hundreds of s a day.

Software Testing Prof. Meenakshi D Souza Department of Computer Science and Engineering International Institute of Information Technology, Bangalore

Rapid Software Testing Guide to Making Good Bug Reports

Introduction, Instructions and Conventions

CASE STUDY IT. Albumprinter Adopting Redgate DLM

CVS for Moodle Developers

Chapter 3. Revision Control

Home Page. Title Page. Contents. Page 1 of 17. Version Control. Go Back. Ken Bloom. Full Screen. Linux User Group of Davis March 1, Close.

Background. $VENDOR wasn t sure either, but they were pretty sure it wasn t their code.

The Big Python Guide

A Guide to Condor. Joe Antognini. October 25, Condor is on Our Network What is an Our Network?

Version control CSE 403

Valuable points from Lesson 6 Adobe Flash CS5 Professional Classroom in a Book

GETTING STARTED WITH. Michael Lessard Senior Solutions Architect June 2017

Workshop. Import Workshop

SOFTWARE CONFIGURATION MANAGEMENT

Software Tools Subversion

Instructions 1 Elevation of Privilege Instructions

2012 Microsoft Corporation. All rights reserved. Microsoft, Active Directory, Excel, Lync, Outlook, SharePoint, Silverlight, SQL Server, Windows,

Transcription:

Liquibase Version Control For Your Schema Nathan Voxland April 3, 2014 nathan@liquibase.org @nvoxland

Agenda 2 Why Liquibase Standard Usage Tips and Tricks Q&A

Why Liquibase? 3 You would never develop code without version control Why do you treat your database differently??

Why Liquibase? 4 Show of hands: Who uses Git, Subversion, CVS, whatever to manage their code? EVERYONE Nobody emails word docs with Java/Python/C#/whatever to the a guy who applies them to the real codebase But, manages SQL to deploy via word docs in email? Maybe fancy and manages them in your bug database?

Why Liquibase? 5 Why???

Why Liquibase? 6 The Database is as important as your code Maybe more important: algorithms come and go but data is forever But you treat it in ways that you would never treat your source code You have separate and unrelated processes for code and schema deployments that you hope work correctly in the end You have no visibility into how your data model has changed over time or why

Why Liquibase? 7 Fear leads to Anger Anger leads to Hate Hate leads to Suffering

Why Liquibase? 8 Just think of all the things you take for granted with Git or even CVS commit, update, revert, branches, history log Without these tools you would fear making changes to your code When you fear making changes, you don t make changes and instead angrily develop work arounds Those ever more elaborate work-arounds slow you down and anger you. They introduce bugs. They confuse new developers and DBAs. The database becomes something everyone hates to deal with In the end everyone suffers because the database is core of your application

Why Liquibase? 9 Store database changes with your source code Changes are consistently applied to every database

Why Liquibase? 10 Liquibase breaks this cycle with a simple structure: #1: Liquibase allows you to track changes in a simple text format Automatically works with all your existing source control tooling Branch, merge, log all work Human readable so you can always look at your change log and know what is going on #2: Liquibase allows you to apply changes consistently to every database from development through production Every database knows what has already been run so Liquibase will only run new changes Many ways to run Liquibase: manually, chef/puppet, build server, scripted, embedded in your application however your run liquibase, it ensures every database is updated the same way

Why Liquibase? 11

Why Liquibase? 12 That is what a Liquibase databasechangelog file looks like Showing XML but it can also be YAML, JSON or SQL for all you XML-haters out there. Designed to be easy to read and work with Things to notice: ChangeSet is what liquibase tracks ID can be integer, bug number, whatever makes sense ChangeSet contains the change you want to make Low level changes like createtable High level refactoring like introduce lookup table Raw SQL if you need it

Why Liquibase? 13 ~$ liquibase update

Why Liquibase? 14 Once you have a changelog file run Liquibase update pass in your connection url, username, password, changelog path and other flags as needed Can run as many times as you want, Liquibase tracks what needs to run

Why Liquibase? 15

Why Liquibase? 16 When you have another schema change to make: just append to the existing changelog Don t modify the existing changeset When you run liquibase update the next time, only changeset 2 will run.

Why Liquibase? 17 Not Diff Based Liquibase will run only what you tell it to run

Why Liquibase? 18 Notice Liquibase does not look at the existing structure of the database It just asks the database what has already ran and runs whatever is new. A common approach when trying to manage schemas is to store what you want your database to look like, then automatically fix your target database to match the model Good in theory but quickly falls apart when there are multiple paths to the same end schema that can do bad things to your data Example: rename Diff based tools also can t easily handle things like data transformations or contextual expected differences Diff tools force you to hope the tool is doing what you expect on every database Liquibase has some diff-related features, but it is not core to the standard workflow or what you should be relying in in your processes

Why Liquibase? 19 Change Sets are tracked independently

Why Liquibase? 20 Another common approach to managing schemas is having a single database version. Falls apart with multiple developers, multiple branches, hotfixes Liquibase tracks and applies each change separately

Standard Usage 21 Normal Use Every time you update code: ~$ liqubase update

Standard Usage 22 Standard Usage: Whenever you update or deploy your code, run liquibase update to update your database Do this consistantly across dev, QA, production Can be different methods of running Liquibase, but always run through liquibase

Standard Usage 23 Normal Use 1. Append to the change log 2. ~$ liquibase update 3. Test 4. Commit changelog with rest of code 5. GOTO 1

Standard Usage 24 When you need to make an update to your database, follow those 5 steps

Standard Usage 25 Best Practices Only append to your change log

Standard Usage 26 Liquibase runs changesets in the order defined from top to bottom, even if nesting change logs Adding change sets in the middle can introduce dependency issues If you have changesets A,B,C and that have ran against a database then insert to have A, D, B, C the original database will have ran as A,B,C,D but new databases will run as A,D,B,C Can be OK, can be a problem Do not modify change sets If an old version already ran, who knows how it is different and will exit because what is being requested is different than what already ran

Standard Usage 27 Best Practices Pay attention to your change log path

Standard Usage 28 Change log path is part of the change set identifier Allows you to not have to worry about id uniqueness across changelog files What path gets stored can depend on how you run liquibase Be careful to not have system dependent absolute paths Use relative paths Select from databasechangelog to see what is being stored

Standard Usage 29 Best Practices One change per change set!

Standard Usage 30 Liquibase tries to run changesets as transactions but Mysql and other databases autocommit DDL statements If a changeset has a second create table that fails but the first passed, you are stuck because Liquibase will keep trying to run the first create table that will fail with table exists

Standard Usage 31 Best Practices All changes managed through Liquibase

Standard Usage 32 Always use Liquibase In development: avoids works on my machine syndrome caused by a who forgot to mention a change they made In production: all changes in production should be reflected in QA and dev environments to avoid release-time surprises

Standard Usage 33 Best Practices Individual development databases

Standard Usage 34 Shared database goes against many of the advantages Liquibase is trying to give you Concurrent branch development Changes other made may not be compatible with your code Can use different database type for local dev as production if licensing issues

Tips and Tricks: Bootstrapping 35 Greenfield Project: Easy! Create an empty changelog file to match your empty database

Tips and Tricks: Bootstrapping 36 Starting Liquibase with a new project is easy Just create an empty changelog file and it matches the current state of your database. Done! You start building your application and when you need your first database object you create your first changeset. Nothing to it!

Tips and Tricks: Bootstrapping 37 Existing Project: You Have Options Option 1: Make it look like you ve always been using Liquibase

Tips and Tricks: Bootstrapping 38 If you have an existing project with an existing database, things are more complicated. Often times a good idea is to find a brand new project as a trial run to get used to Liquibase and better understand it and then apply it to existing projects. Unfortunately there is no single this is how you do it for existing projects because there are so much variation in projects, processes, and requirements Liquibase provides many tools to help but it is up to you to decide how to string them together

Tips and Tricks: Bootstrapping 39 I usually suggest making it look like you ve been using Liquibase since the beginning. This can be more work up front, but makes things simpler once it is all set up You need to have a changelog file that recreates the database as it is now You may have different databases in different states, need to determine what now is Liquibase generatechangelog command is your friend Also need to make sure the already ran changesets are marked as ran Multiple options depending on your project size, environments, etc changelogsync, changelogsyncsql Preconditions Separate changelog that is exectuted conditionally If you have multiple databases in different states, you may need a mixture If you have multiple databases in different states, you may also need to do cleanup to standardize them across the board.

Tips and Tricks: Bootstrapping 40 Existing Project: You Have Options Option 2: We are going to use Liquibase starting NOW!

Tips and Tricks: Bootstrapping 41 Alternatively, you can just say From now on we are using Liquibase Advantage to this is that it is much easier to set up--you just mandate it. No generating changelogs, no changelogsync Still need to determine what now is Disadvantage: you cannot bootstrap your database with only Liquibase for new developers, new customers, etc. Easy workaround is to use standard backup tool to create your starting seed database Still want to standardize database variations with preconditions etc. going forward

Tips and Tricks: Bootstrapping 42 People and Processes

Tips and Tricks: Bootstrapping 43 Starting to use Liquibase isn t just about you your bootstrap your change log file Also a question of how you introduce it into your existing process and culture For many companies, not a problem Know they need to fix process Everyone is on board with advantages For others, there can be entrenched interests and strong resistance Similar to any other processes changes Introduce slowly

Tips and Tricks: Bootstrapping 44 Your company has existing processes and workflows that are there for a reason and you want to make sure introducing Liquibase doesn t jeopradise them. Liquibase has features to fit into many workflows updatesql Allow DBAs and others to review and document changes Can even update if needed Works when you don t have direct access to production diff & diffchangelog If developers want to update database directly, can use to watch for changes and pull change sets out Start with someone s job. Then push to developers to use. Then have them just create them in the first place Remember: Diff logic is not primary and so doesn t catch everything Don t slide into a one-step process Formatted SQL For those who prefer SQL Miss out on some features many people prefer Lose cross-database support, dbdoc functions, auto-rollback generation

Tips and Tricks 45 Rollback

Tips and Tricks 46 Liquibase provides a way to manage rollback logic with update logic Use during development spelled something wrong or shouldn t have created a table Production OMG!!!!!1111!!!11!!!! Can roll back a set number of steps, to a given date, or to a tag How does Liquibase roll back changes? The transaction is already done. XML/YAML/JSON know how to rollback create* and rename* changes Others and raw SQL need <rollback> tag Additional modes that can be helpful: rollbacksql futurerollbacksql

Tips and Tricks 47 Manage Test Data

Tips and Tricks 48 How to best support your test data is a perennial problem. You have test data for unit tests and integration tests that you keep in backups or SQL load scripts or CSV or excel Take a long time to build up but and is very brittle Liquibase can reduce brittleness by loading test data within your changelog file Loaded in at the point it matches the schema, then migrated just like production data would be Liquibase supports a <loaddata> tag that takes a CSV file OR you can create a standard database dump snapshot and load it in Contexts can be used to control which data goes into what test environments Test data will also be managed in version control and work with branches and merging as long as you don t use a binary format

Tips and Tricks 49 Manage Stored Procedures

Tips and Tricks 50 Stored procedures, functions and triggers are more like code artifacts than database objects because they don t have state to preserve They also tend to be very large and changes are made to just a small portion of the code at a time Therefore, it often makes sense to break the normal don t touch already ran changesets rule in favor of defining them as create or replace and use runonchange Allows you to modify the SQL in place and Liquibase will reexecute it if and only if it has changed Keeps changelog files smaller but most importantly it works nicer with version control for history tracking

Tips and Tricks 51 Organize Your Change Logs

Tips and Tricks 52 A huge monolithic change log gets difficult to work with Break up by having a root changelog that <import>s other change logs Can break up by version or feature or anything else Liquibase flattens the nested changelogs at run time, so make sure you are only appending to change log OR changes in change logs are independent Otherwise run into ordering problem listed before

Tips and Tricks 53 Enterprise Liquibase Graphical UI with Change set wizard Deployment plan wizard Forecasting Diff additional types Detailed reporting Build automation integration

Tips and Tricks 54 If you are looking for functionality beyond what comes with Liquibase, check out Datical at datical.com If liquibase is version control for your database, Datical is devops for your database Graphical UI Designed to be easy to use. Gives you the right-click refactor menu instead of dealing with raw XML Deployment Plan Wizard models and manages your logical deployment workflow Forecasting Pre-deployment Analysis Simulate unexecuted change sets before deploying to make sure you won t encounter errors or inadvertently truncate, modify or delete data Support for Additional Types Adds support for Stored Procedures, Packages, Functions, Triggers, Check Constraints and more. Detailed Reporting Historical reporting for all Forecast & Deployments keeps your entire organization informed about what is happening Easy status on whether or not your individual environments are up to date. Build automation integration Integrations with build automation tools: UrbanCode Deploy, Bladelogic, Jenkins, Puppet

Q & A 55 nathan@liquibase.org @nvoxland liquibase.org datical.com