You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DevOps-Bash-tools/teamcity_buildtypes_downloa...

60 lines
1.8 KiB
Bash

#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2020-11-30 19:06:40 +0000 (Mon, 30 Nov 2020)
#
# https://github.com/HariSekhon/bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/HariSekhon
#
# https://www.jetbrains.com/help/teamcity/rest-api-reference.html#Build+Configuration+And+Template+Settings
set -euo pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1090
. "$srcdir/lib/utils.sh"
# shellcheck disable=SC2034,SC2154
usage_description="
Exports all TeamCity BuildTypes (build pipelines) to local JSON configuration files for backup/restore / migration purposes, or even just to backport changes to Git for revision control tracking
If arguments are specified then only downloads those named BuildTypes, otherwise finds and downloads all BuildTypes
Uses the adjacent teamcity_api.sh and jq (installed by 'make')
See teamcity_api.sh for required connection settings and authentication
"
# used by usage() in lib/utils.sh
# shellcheck disable=SC2034
usage_args="[<buildtype1> <buildtype2> ...]"
help_usage "$@"
#min_args 1 "$@"
if [ $# -gt 0 ]; then
for build_name in "$@"; do
echo "$build_name"
done
else
"$srcdir/teamcity_api.sh" /buildTypes |
jq -r '.buildType[].name'
fi |
grep -v '^[[:space:]]*$' |
while read -r build_name; do
filename="$build_name.json"
timestamp "downloading build '$build_name' to '$filename'"
"$srcdir/teamcity_api.sh" "/buildTypes/$build_name" |
# using jq just for formatting
jq . > "$filename" || : # some builds get 400 errors, ignore these
done