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/teamcity_export.sh

75 lines
2.2 KiB
Bash

#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2020-12-09 15:23:27 +0000 (Wed, 09 Dec 2020)
#
2 years ago
# https://github.com/HariSekhon/DevOps-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
#
set -euo pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1090,SC1091
. "$srcdir/lib/utils.sh"
# shellcheck disable=SC2034,SC2154
usage_description="
Exports TeamCity configs for projects, buildTypes and VCS roots to local directories of the same name as each project
This mimicks the directory structure of TeamCity's datadir and Versioned Settings VCS export integration
Project IDs can be specified as arguments, otherwise iterates over all discovered projects including the Root project
"
# used by usage() in lib/utils.sh
# shellcheck disable=SC2034
usage_args="[<project_id1> <project_id2> ...]"
help_usage "$@"
#min_args 1 "$@"
basedir="$PWD"
# shellcheck disable=SC2103
if [ $# -gt 0 ]; then
for project_id in "$@"; do
echo "$project_id"
done
else
"$srcdir/teamcity_projects.sh" |
awk '{print $1}'
fi |
# don't use grep -v it can pipefail
sed '/^[[:space:]]*$/d' |
sort -u |
while read -r project_id; do
projectdir="$basedir/$project_id"
mkdir -p -v "$projectdir"
timestamp "Exporting TeamCity project '$project_id' to $projectdir"
cd "$projectdir"
# printed by the script
#timestamp "Exporting project '$project_id' config"
"$srcdir/teamcity_export_project_config.sh" "$project_id"
mkdir -p -v buildTypes
cd buildTypes
#timestamp "Exporting project '$project_id' buildTypes"
# restrict buildType exports to only this project
TEAMCITY_BUILDTYPES_PROJECT="$project_id" "$srcdir/teamcity_export_buildtypes.sh"
mkdir -p -v ../vcsRoots
cd ../vcsRoots
#timestamp "Exporting project '$project_id' VCS roots"
TEAMCITY_VCS_ROOTS_PROJECT="$project_id" "$srcdir/teamcity_export_vcs_roots.sh"
cd ..
echo
done