-
-
Save abayer/527063a4519f205efc74 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# | |
# Copies certain kinds of known files and directories from a given Jenkins master directory | |
# into a git repo, removing any old ones, adds 'em, commits 'em, pushes 'em. | |
# | |
set -ex | |
if [ $# -ne 2 ]; then | |
echo usage: $0 root_dir jenkins_master | |
exit 1 | |
fi | |
ROOT_DIR=$1 | |
JENKINS_MASTER=$2 | |
ORIG_DIR=$PWD | |
mkdir -p $ROOT_DIR | |
cd $ROOT_DIR | |
rm -rf *-jenkins-git | |
git clone git@GIT_SERVER:${JENKINS_MASTER}-jenkins-git.git | |
cd $ROOT_DIR/${JENKINS_MASTER}-jenkins-git | |
# rsync-no-vanished is just a wrapper making sure rsync doesn't fail on vanished files during the process. | |
# Jenkins master is in a subdirectory of /var/lib/jenkins. | |
$ORIG_DIR/rsync-no-vanished -av --delete --exclude="jobConfigHistory" \ | |
--exclude="war" \ | |
--exclude="config-history" \ | |
--exclude=".hudson" \ | |
--exclude=".ivy2" \ | |
--exclude=".m2" \ | |
--exclude="lost+found" \ | |
--include="*/" \ | |
--include="*config.xml" \ | |
--include="users/*" \ | |
--include="*.hpi" \ | |
--include="*.jpi" \ | |
--include="*pinned" \ | |
--include="*disabled" \ | |
--exclude="*" \ | |
--prune-empty-dirs /var/lib/jenkins/${JENKINS_MASTER}/ . | |
[ -d /var/lib/jenkins/${JENKINS_MASTER}/scriptler ] && $ORIG_DIR/rsync-no-vanished -av --delete /var/lib/jenkins/${JENKINS_MASTER}/scriptler . | |
[ -d /var/lib/jenkins/${JENKINS_MASTER}/secrets ] && $ORIG_DIR/rsync-no-vanished -av --delete /var/lib/jenkins/${JENKINS_MASTER}/secrets . | |
cp /var/lib/jenkins/${JENKINS_MASTER}/*.xml . | |
cp /var/lib/jenkins/${JENKINS_MASTER}/*.key . | |
git add -A | |
git commit -m "Jenkins ${JENKINS_MASTER} config backup for $(date)" | |
git push origin master |
First (and foremost) Thanks for this.
I realize it is an old post, so I'll completely understand if you don't reply. Nevertheless, I would appreciate:
-
confirmation that root_dir is just any (empty) directory where I choose to store the backup repository that this script creates for my server's jenkins config
-
for a non-standard jenkins install (i.e. there's no /var/lib/jenkins on my jenkins server), how could I determine the equivalent of jerkins_master? Is there a particular top-level directory entry I can look for? (i.e. is it most-likely the directory containing my jenkins.war?)
and, last, but not least:
3) what steps do you follow to restore jenkins (i.e. if/when your ec2 instance dies)?
eh, I don't think it is good enough, so I fork it to my repos, and improve it plus my mind.
https://gist.github.com/choldrim/b0862264bda0f6a2e4ae
Thanks for all your sharing. Wonder if there is a way to backup a specific plan/project and how to retrieve it?
eh, I don't think it is good enough, so I fork it to my repos, and improve it plus my mind. 😉
just kidding, this is perfect, I have just modified to work on my Jenkins on Mac. and all credit to this repo owner
https://gist.github.com/jayantnd/d7acc0b1536fd70bb838e9612b75dbb0
Thanks for sharing. You just saved me a lot of time.