From ae3c527eb1d41771b471a1b3f71838a1e0ef6877 Mon Sep 17 00:00:00 2001 From: Marco Krammer Date: Thu, 17 Oct 2019 09:19:50 +0200 Subject: [PATCH 1/5] Support BACKUP_TMP_DIR to not immediately write to backup dir as this can cause broken backups to be used when being restored --- backup/pvc/bin/backup.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/backup/pvc/bin/backup.sh b/backup/pvc/bin/backup.sh index 80387373..3b8ea206 100644 --- a/backup/pvc/bin/backup.sh +++ b/backup/pvc/bin/backup.sh @@ -4,14 +4,16 @@ set -eo pipefail [[ ! $# -eq 1 ]] && echo "Usage: $0 backup_number" && exit 1; [[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1; +[[ -z "${BACKUP_TMP_DIR}" ]] && echo "Required 'BACKUP_TMP_DIR' env not set" && exit 1; [[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1; backup_number=$1 echo "Running backup" -tar -C ${JENKINS_HOME} -czf "${BACKUP_DIR}/${backup_number}.tar.gz" --exclude jobs/*/config.xml --exclude jobs/*/workspace* -c jobs +tar -C ${JENKINS_HOME} -czf "${BACKUP_TMP_DIR}/${backup_number}.tar.gz" --exclude jobs/*/config.xml --exclude jobs/*/workspace* -c jobs && \ +mv ${BACKUP_TMP_DIR}/${backup_number}.tar.gz ${BACKUP_DIR}/${backup_number}.tar.gz [[ ! -s ${BACKUP_DIR}/${backup_number}.tar.gz ]] && echo "backup file '${BACKUP_DIR}/${backup_number}.tar.gz' is empty" && exit 1; echo Done -exit 0 +exit 0 \ No newline at end of file From d8fe19ce8d5ed168ff4f80c529e54732d4db75d1 Mon Sep 17 00:00:00 2001 From: Marco Krammer Date: Thu, 17 Oct 2019 09:20:31 +0200 Subject: [PATCH 2/5] Added BACKUP_TMP_DIR variable to backup pvc e2e test --- backup/pvc/e2e/backup_and_restore/test.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backup/pvc/e2e/backup_and_restore/test.sh b/backup/pvc/e2e/backup_and_restore/test.sh index b392d63b..6735a6af 100755 --- a/backup/pvc/e2e/backup_and_restore/test.sh +++ b/backup/pvc/e2e/backup_and_restore/test.sh @@ -15,12 +15,13 @@ fi JENKINS_HOME="$(pwd)/jenkins_home" BACKUP_DIR="$(pwd)/backup" +BACKUP_TMP_DIR="$(pwd)/tmp" RESTORE_FOLDER="$(pwd)/restore" mkdir -p ${BACKUP_DIR} mkdir -p ${RESTORE_FOLDER} # Create an instance of the container under testing -cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -e RESTORE_FOLDER=${RESTORE_FOLDER} -v ${RESTORE_FOLDER}:${RESTORE_FOLDER}:rw -d ${docker_image})" +cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -e BACKUP_TMP_DIR=${BACKUP_TMP_DIR} -v ${BACKUP_TMP_DIR}:${BACKUP_TMP_DIR}:rw -e RESTORE_FOLDER=${RESTORE_FOLDER} -v ${RESTORE_FOLDER}:${RESTORE_FOLDER}:rw -d ${docker_image})" echo "Docker container ID '${cid}'" # Remove test directory and container afterwards From d58acb3039d5707c53ebb6bf0d5d74f7efb963e0 Mon Sep 17 00:00:00 2001 From: Marco Krammer Date: Thu, 17 Oct 2019 09:22:10 +0200 Subject: [PATCH 3/5] Bumped backup pvc version and added documentation on how to use changes to getting started docs --- backup/pvc/VERSION.txt | 2 +- documentation/v0.1.1/getting-started.md | 6 +++++- documentation/v0.2.0/getting-started.md | 6 +++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/backup/pvc/VERSION.txt b/backup/pvc/VERSION.txt index 77cada2e..41a28195 100644 --- a/backup/pvc/VERSION.txt +++ b/backup/pvc/VERSION.txt @@ -1 +1 @@ -v0.0.6 +v0.0.7 diff --git a/documentation/v0.1.1/getting-started.md b/documentation/v0.1.1/getting-started.md index 56ae587d..6141931b 100644 --- a/documentation/v0.1.1/getting-started.md +++ b/documentation/v0.1.1/getting-started.md @@ -452,17 +452,21 @@ spec: env: - name: BACKUP_DIR value: /backup + - name: BACKUP_TMP_DIR + value: /tmp - name: JENKINS_HOME value: /jenkins-home - name: BACKUP_COUNT value: "3" # keep only the 2 most recent backups - image: virtuslab/jenkins-operator-backup-pvc:v0.0.6 # look at backup/pvc directory + image: virtuslab/jenkins-operator-backup-pvc:v0.0.7 # look at backup/pvc directory imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /jenkins-home # Jenkins home volume name: jenkins-home - mountPath: /backup # backup volume name: backup + - mountPath: /tmp # backup tmp volume + name: tmp volumes: - name: backup # PVC volume where backups will be stored persistentVolumeClaim: diff --git a/documentation/v0.2.0/getting-started.md b/documentation/v0.2.0/getting-started.md index 17ac49e9..cb03dccd 100644 --- a/documentation/v0.2.0/getting-started.md +++ b/documentation/v0.2.0/getting-started.md @@ -597,17 +597,21 @@ spec: env: - name: BACKUP_DIR value: /backup + - name: BACKUP_TMP_DIR + value: /tmp - name: JENKINS_HOME value: /jenkins-home - name: BACKUP_COUNT value: "3" # keep only the 2 most recent backups - image: virtuslab/jenkins-operator-backup-pvc:v0.0.6 # look at backup/pvc directory + image: virtuslab/jenkins-operator-backup-pvc:v0.0.7 # look at backup/pvc directory imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /jenkins-home # Jenkins home volume name: jenkins-home - mountPath: /backup # backup volume name: backup + - mountPath: /tmp # backup tmp volume + name: tmp volumes: - name: backup # PVC volume where backups will be stored persistentVolumeClaim: From 06c319ef69e16bd110419812bb369028ead656b4 Mon Sep 17 00:00:00 2001 From: Marco K <27492648+marco-krammer@users.noreply.github.com> Date: Thu, 17 Oct 2019 10:10:50 +0200 Subject: [PATCH 4/5] Set BACKUP_TMP_DIR default value instead of making it required --- backup/pvc/bin/backup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backup/pvc/bin/backup.sh b/backup/pvc/bin/backup.sh index 3b8ea206..ece33b53 100644 --- a/backup/pvc/bin/backup.sh +++ b/backup/pvc/bin/backup.sh @@ -4,8 +4,8 @@ set -eo pipefail [[ ! $# -eq 1 ]] && echo "Usage: $0 backup_number" && exit 1; [[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1; -[[ -z "${BACKUP_TMP_DIR}" ]] && echo "Required 'BACKUP_TMP_DIR' env not set" && exit 1; [[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1; +BACKUP_TMP_DIR=${BACKUP_TMP_DIR:-/tmp} backup_number=$1 echo "Running backup" @@ -16,4 +16,4 @@ mv ${BACKUP_TMP_DIR}/${backup_number}.tar.gz ${BACKUP_DIR}/${backup_number}.tar. [[ ! -s ${BACKUP_DIR}/${backup_number}.tar.gz ]] && echo "backup file '${BACKUP_DIR}/${backup_number}.tar.gz' is empty" && exit 1; echo Done -exit 0 \ No newline at end of file +exit 0 From d32c21f967a003ed89ac4f7015ad4d337018351a Mon Sep 17 00:00:00 2001 From: Marco Krammer <27492648+marco-krammer@users.noreply.github.com> Date: Thu, 17 Oct 2019 10:41:15 +0200 Subject: [PATCH 5/5] Removed BACKUP_TMP_DIR env variable and switched to mktemp -d instead of letting the user decide the temp dir path --- backup/pvc/bin/backup.sh | 2 +- backup/pvc/e2e/backup_and_restore/test.sh | 3 +-- documentation/v0.1.1/getting-started.md | 4 ---- documentation/v0.2.0/getting-started.md | 4 ---- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/backup/pvc/bin/backup.sh b/backup/pvc/bin/backup.sh index ece33b53..71a8f8e7 100644 --- a/backup/pvc/bin/backup.sh +++ b/backup/pvc/bin/backup.sh @@ -5,7 +5,7 @@ set -eo pipefail [[ ! $# -eq 1 ]] && echo "Usage: $0 backup_number" && exit 1; [[ -z "${BACKUP_DIR}" ]] && echo "Required 'BACKUP_DIR' env not set" && exit 1; [[ -z "${JENKINS_HOME}" ]] && echo "Required 'JENKINS_HOME' env not set" && exit 1; -BACKUP_TMP_DIR=${BACKUP_TMP_DIR:-/tmp} +BACKUP_TMP_DIR=$(mktemp -d) backup_number=$1 echo "Running backup" diff --git a/backup/pvc/e2e/backup_and_restore/test.sh b/backup/pvc/e2e/backup_and_restore/test.sh index 6735a6af..b392d63b 100755 --- a/backup/pvc/e2e/backup_and_restore/test.sh +++ b/backup/pvc/e2e/backup_and_restore/test.sh @@ -15,13 +15,12 @@ fi JENKINS_HOME="$(pwd)/jenkins_home" BACKUP_DIR="$(pwd)/backup" -BACKUP_TMP_DIR="$(pwd)/tmp" RESTORE_FOLDER="$(pwd)/restore" mkdir -p ${BACKUP_DIR} mkdir -p ${RESTORE_FOLDER} # Create an instance of the container under testing -cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -e BACKUP_TMP_DIR=${BACKUP_TMP_DIR} -v ${BACKUP_TMP_DIR}:${BACKUP_TMP_DIR}:rw -e RESTORE_FOLDER=${RESTORE_FOLDER} -v ${RESTORE_FOLDER}:${RESTORE_FOLDER}:rw -d ${docker_image})" +cid="$(docker run -e JENKINS_HOME=${JENKINS_HOME} -v ${JENKINS_HOME}:${JENKINS_HOME}:ro -e BACKUP_DIR=${BACKUP_DIR} -v ${BACKUP_DIR}:${BACKUP_DIR}:rw -e RESTORE_FOLDER=${RESTORE_FOLDER} -v ${RESTORE_FOLDER}:${RESTORE_FOLDER}:rw -d ${docker_image})" echo "Docker container ID '${cid}'" # Remove test directory and container afterwards diff --git a/documentation/v0.1.1/getting-started.md b/documentation/v0.1.1/getting-started.md index 6141931b..d64bc5fa 100644 --- a/documentation/v0.1.1/getting-started.md +++ b/documentation/v0.1.1/getting-started.md @@ -452,8 +452,6 @@ spec: env: - name: BACKUP_DIR value: /backup - - name: BACKUP_TMP_DIR - value: /tmp - name: JENKINS_HOME value: /jenkins-home - name: BACKUP_COUNT @@ -465,8 +463,6 @@ spec: name: jenkins-home - mountPath: /backup # backup volume name: backup - - mountPath: /tmp # backup tmp volume - name: tmp volumes: - name: backup # PVC volume where backups will be stored persistentVolumeClaim: diff --git a/documentation/v0.2.0/getting-started.md b/documentation/v0.2.0/getting-started.md index cb03dccd..7ab8e959 100644 --- a/documentation/v0.2.0/getting-started.md +++ b/documentation/v0.2.0/getting-started.md @@ -597,8 +597,6 @@ spec: env: - name: BACKUP_DIR value: /backup - - name: BACKUP_TMP_DIR - value: /tmp - name: JENKINS_HOME value: /jenkins-home - name: BACKUP_COUNT @@ -610,8 +608,6 @@ spec: name: jenkins-home - mountPath: /backup # backup volume name: backup - - mountPath: /tmp # backup tmp volume - name: tmp volumes: - name: backup # PVC volume where backups will be stored persistentVolumeClaim: