Last active
March 2, 2022 09:38
-
-
Save mattvonrocketstein/dbda17d5e0733d9b366cac995fbacf80 to your computer and use it in GitHub Desktop.
Jenkins backup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// This is a Jenkinsfile that backs up (parts of) Jenkins. | |
// | |
// So why not use the SCM-sync plugin? I've found it's just not configurable | |
// enough, and if something goes wrong it's a lot more opaque than this technique | |
// which uses standard shell and git commands. | |
// | |
// By default this approach covers users, credentials, and job and plugin configs, | |
// but not full builds/workspaces. Obviously you want to send this stuff only to | |
// a private repository! If you want to change the files that are included to | |
// add or remove files from consideration with the backup, edit the shell script | |
// section below. Make sure this job is pinned to your Jenkins master using your | |
// preferred technique for that. | |
// | |
// The job that executes this Jenkinsfile should describe three parameters: | |
// | |
// * BACKUP_REPO: | |
// a string representing the repo you want your backup's pushed to | |
// | |
// * BACKUP_BRANCH: | |
// a string representing where you want backup's pushed to | |
// | |
// * GIT_CREDENTIAL_ID: | |
// a string representing the Jenkins credential id for | |
// i.e. your github deploy key SSH. See the /credentials | |
// URL on your Jenkins server to add a new SSH key, and make | |
// sure that the username is `git`. Add github deployment keys | |
// at i.e. https://github.com/$user/$project/settings/keys. Make | |
// sure your key allows push and isn't read-only. | |
// | |
pipeline { agent any; stages { | |
stage("INIT"){ steps{ | |
checkout([ | |
$class: 'GitSCM', | |
branches: [[name: '*/${BACKUP_BRANCH}']], | |
doGenerateSubmoduleConfigurations: false, | |
extensions: [[ | |
$class: 'RelativeTargetDirectory', | |
relativeTargetDir: 'jenkins-backup']], | |
submoduleCfg: [], | |
userRemoteConfigs: [ | |
[ credentialsId: "$GIT_CREDENTIAL_ID", | |
url: "$BACKUP_REPO"] | |
], | |
]); | |
}} //steps // stage | |
stage("BACKUP"){ steps{ | |
sh """#!/bin/bash | |
pushd jenkins-backup | |
git config --local user.email "[email protected]" | |
git config --global user.name "Jenkins" | |
find .|xargs git rm | |
popd | |
cp -v $JENKINS_HOME/*xml $WORKSPACE/jenkins-backup | |
pushd $JENKINS_HOME/ | |
for i in \$( find jobs|grep config.xml ); do | |
mkdir -p $WORKSPACE/jenkins-backup/`dirname \$i` | |
cp \$i $WORKSPACE/jenkins-backup/`dirname \$i` | |
done | |
popd | |
cp -rfv $JENKINS_HOME/secret* $WORKSPACE/jenkins-backup/ | |
cp -rfv $JENKINS_HOME/user* $WORKSPACE/jenkins-backup/ | |
pushd jenkins-backup | |
find .|xargs git add | |
git commit -a -m"Jenkins Backup Job" | |
""" | |
}} //steps // stage | |
stage("PUSH"){ steps{ | |
sshagent(["$GIT_CREDENTIAL_ID"]) { | |
sh "cd jenkins-backup && git push origin HEAD:$BACKUP_BRANCH" | |
} // sshagent | |
}} //steps // stage | |
}} //stages // pipeline |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment