Skip to content

Instantly share code, notes, and snippets.

@nieldw
Last active June 1, 2018 13:08
Show Gist options
  • Save nieldw/0a696d83449f30932d7e13efea9715da to your computer and use it in GitHub Desktop.
Save nieldw/0a696d83449f30932d7e13efea9715da to your computer and use it in GitHub Desktop.
Kubernetes CronJob that runs a Team City backup
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: teamcity-server-backup
labels:
app: teamcity
type: cron
spec:
schedule: "30 10,20 * * 1-5" # Every weekday at 10:30, and 20:30 UTC
jobTemplate:
metadata:
labels:
app: teamcity
type: cron
spec:
template:
spec:
restartPolicy: Never
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- teamcity
- key: type
operator: In
values:
- server
topologyKey: kubernetes.io/hostname
containers:
- name: backup-worker
image: byrnedo/alpine-curl:0.1.3
imagePullPolicy: IfNotPresent
env:
- name: ADMIN_USERNAME
value: "backupper"
- name: ADMIN_PASSWORD
value: "password"
volumeMounts:
- name: teamcity-datadir
mountPath: /datadir
- name: teamcity-backup
mountPath: /backups
command:
- "/bin/sh"
- "-ec"
- |
set -o nounset
set -o errexit
echo "Starting backup"
curl -s -X POST --basic --user ${ADMIN_USERNAME}:${ADMIN_PASSWORD} "https://build.example.com/app/rest/server/backup?includeConfigs=true&includeDatabase=true&includeBuildLogs=false&fileName=CronJobTeamCityBackup"
echo
# Wait for backup to complete
while : ;
do
STATUS=$(curl -s --basic --user ${ADMIN_USERNAME}:${ADMIN_PASSWORD} https://build.example.com/app/rest/server/backup)
echo "$(date) Backup is ${STATUS}"
[[ "${STATUS}" = "Running" ]] && sleep 60s || break
done
cd /datadir/backup
BACKUP=$(ls -t | head -1)
cp ${BACKUP} /backups
cd /backups
ls -ltd * | head -1
echo "BACKUP COMPLETE"
echo
volumes:
- name: teamcity-datadir
persistentVolumeClaim:
claimName: teamcity-server-pv-claim
- name: teamcity-backup
persistentVolumeClaim:
claimName: teamcity-backup-pv-claim
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment