Skip to content

Instantly share code, notes, and snippets.

@keithchambers
Last active December 22, 2021 23:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keithchambers/4d7148b6a6d81cfe7ade to your computer and use it in GitHub Desktop.
Save keithchambers/4d7148b6a6d81cfe7ade to your computer and use it in GitHub Desktop.
backup-jenkins.sh
#!/bin/bash
set -ex
DATE="$(date +%Y%m%d%H%M%S)"
JENKINS_HOME="/var/lib/jenkins"
BACKUP="/opt/backup/${DATE}"
SOURCES="${BACKUP}/SOURCES"
SPECS="${BACKUP}/SPECS"
RPMS="${BACKUP}/RPMS"
REPO="/opt/repo/rpms"
# Query for Jenkins RPM version
JENKINS_VER="$(rpm -q jenkins --queryformat '%{version}-%{release}')"
if [[ ! -n "${JENKINS_VER}" ]]
then
echo "Jenkins RPM not found."
exit 1
fi
# Create backup directory
[[ -d "${BACKUP}" ]] || mkdir -p "${BACKUP}"
# Create SOURCES directory
[[ -d "${SOURCES}" ]] || mkdir -p "${SOURCES}"
# Create SPECS directory
[[ -d "${SPECS}" ]] || mkdir -p "${SPECS}"
# Backup
cp --parent "${JENKINS_HOME}/*.xml" "${SOURCES}"
cp --parent "${JENKINS_HOME}/jobs/*/config.xml" "${SOURCES}"
tar czf "${BACKUP}/source.tar.gz" -C "${BACKUP}" SOURCES
mv "${BACKUP}/source.tar.gz" "${SOURCES}"
# Create RPM spec
cat > "${SPECS}/jenkins-backup.spec" <<EOF
Name: jenkins-backup
Version: "${DATE}"
Release: 1
Source0: source.tar.gz
Summary: jenkins-backup
License: none
Requires: jenkins = %{_JENKINS_VER}
buildarch: noarch
%description
%prep
%setup -qn SOURCES
%install
mkdir -p %{buildroot}
mv * %{buildroot}
%clean
rm -rf %{buildroot}
%files
%defattr(-, jenkins, jenkins, -)
%{_JENKINS_HOME}/*
EOF
# Build RPM
rpmbuild --define "_topdir ${BACKUP}" \
--define "_JENKINS_VER ${JENKINS_VER}" \
--define "_JENKINS_HOME ${JENKINS_HOME}" \
-bb "${SPECS}/*.spec"
# Archive to repo
cp "${RPMS}"/*/*.rpm "${REPO}"
createrepo "${REPO}"
# EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment