Skip to content

Instantly share code, notes, and snippets.

@alimli
Created October 25, 2018 14:45
Show Gist options
  • Select an option

  • Save alimli/1a5c7e6167c67878ef8bf63236cb44be to your computer and use it in GitHub Desktop.

Select an option

Save alimli/1a5c7e6167c67878ef8bf63236cb44be to your computer and use it in GitHub Desktop.
Backup Jira Attachments and PostgreSQL database, keep n latest and delete older
#!/bin/bash
CONFIG_FILE='/etc/jira-backup.conf'
TIMESTAMP=$(date +'%Y-%m-%d-%H-%M')
if [ -e ${CONFIG_FILE} ]; then
source ${CONFIG_FILE}
else
echo "Error: ${CONFIG_FILE} missing"
exit 1
fi
ATTACHMENT_BACKUP_OUTPUT="${BACKUP_DIR}/jira-attachments-${TIMESTAMP}.tar"
ATTACHMENT_BACKUP_REMOVE="${BACKUP_DIR}/jira-attachments-*.tar"
DATABASE_DUMP_OUTPUT="${BACKUP_DIR}/jira-database-dump-${TIMESTAMP}.dump"
DATABASE_DUMP_REMOVE="${BACKUP_DIR}/jira-database-dump-*.dump"
function setup() {
if [ ! -d "${BACKUP_DIR}" ]; then
echo "Creating ${BACKUP_DIR}"
mkdir -p "${BACKUP_DIR}"
fi
}
function remove_old_files() {
if [ -n "${KEEP_DAYS}" ]; then
find $1 -mtime +${KEEP_DAYS} -delete -print
fi
}
function remove_old_attachment_backups() {
if [ -n "${ATTACHMENTS_PATH}" ]; then
echo "Removing old Jira attachment backups"
remove_old_files "$ATTACHMENT_BACKUP_REMOVE"
fi
}
function remove_old_database_dumps() {
if [ -n "$DB_NAME" ]; then
echo "Removing old Jira database dumps"
remove_old_files "$DATABASE_DUMP_REMOVE"
fi
}
function backup_attachments() {
if [ -z "${ATTACHMENTS_PATH}" ]; then
echo "Skipping Jira attachments backup"
else
echo "Backing up Jira attachments"
# In order suppress "/bin/tar: Removing leading `/' from member names" warning
# -C / parameter added and leading / removed from ATTACHMENTS_PATH
# See details : https://unix.stackexchange.com/a/61760
/bin/tar -cpf ${ATTACHMENT_BACKUP_OUTPUT} -C / ${ATTACHMENTS_PATH}
echo "Created ${ATTACHMENT_BACKUP_OUTPUT}"
fi
}
function dump_database() {
if [ -z "$DB_NAME" ]; then
echo "Skiping Jira database dump."
else
echo "Dumping Jira database"
# Don't pass hostname and username since we'll run this postgres user in local machine
# /usr/bin/pg_dump -U "${DB_USER}" "${DB_NAME}" -h "${DB_HOST}" > "${DATABASE_DUMP_OUTPUT}"
/usr/bin/pg_dump -Fc "${DB_NAME}" > "${DATABASE_DUMP_OUTPUT}"
echo "Created ${DATABASE_DUMP_OUTPUT}"
fi
}
function main() {
echo "Backing up Jira"
setup
remove_old_attachment_backups
remove_old_database_dumps
backup_attachments
dump_database
}
main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment