THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Dump specific tables from source TeamCity database
Code Block | ||
---|---|---|
| ||
mysqldump --no-tablespaces -u teamcity -p teamcity ids_group \ ids_group_entity_id \ project \ project_mapping \ user_blocks \ user_build_parameters \ user_build_types_order \ usergroup_notification_data \ usergroup_notification_events \ usergroup_roles \ usergroups \ usergroup_subgroups \ usergroup_users \ usergroup_watch_type \ user_notification_data \ user_notification_events \ user_projects_visibility \ user_property \ user_roles \ users \ user_watch_type \ vcs_username > teamcity.sql |
/<source-teamcity-data-dir>/config/roles-config.xml
Pack dump and configuration fail into archive
Code Block | ||
---|---|---|
| ||
zip -r users-groups-roles.zip teamcity.sql roles-config.xml |
<source-teamcity-host>
Unpack archive
Code Block | ||
---|---|---|
| ||
unzip users-groups-roles.zip |
roles-config.xml
to /<target-teamcity-data-dir>/config/roles-config.xml
Restore specific tables (TeamCity and/or DB service stop is not required)
Code Block | ||
---|---|---|
| ||
mysql -u teamcity -p teamcity < teamcity.sql |
Stop queue
Code Block | ||
---|---|---|
| ||
curl -s \ -u "<tc_username>:<tc_password>" \ -X POST \ "https://<tc_url>/queueStartStop.html?stateChangeReason=TeamCity+daily+maintenance&newQueueState=false" |
Wait for non-composite running builds to finish
Code Block | ||
---|---|---|
| ||
while true; do
runningBuildsCount="$(curl -s \
-u "<tc_username>:<tc_password>" \
-X GET \
"https://<tc_url>/app/rest/builds/?locator=state:running,composite:false" | \
xmllint --format \
--xpath "string(/*[local-name()='builds']/@count)" -)"
if [ "$runningBuildsCount" -gt 0 ]; then
echo " $(timestamp) Running builds left: ${runningBuildsCount}"
sleep 60
else
break
fi
done |
Restart server
Code Block | ||
---|---|---|
| ||
curl -s \ -u "<tc_username>:<tc_password>" \ -X POST \ "https://<tc_url>/admin/serverRestart.html?start=1" 1>/dev/null 2>&1 sleep 10 |
Wait for TeamCity to boot
Code Block | ||
---|---|---|
| ||
while true; do
returnCode="$(curl -s \
-I \
-u "<tc_username>:<tc_password>" \
-o /dev/null \
-w "%{http_code}" \
-X GET \
"https://<tc_url>/app/rest/server")"
if [ "${returnCode}" != "200" ]; then
echo " $(timestamp) Current TeamCity HTTP status: ${runningBuildsCount}"
sleep 60
else
break
fi
done |
Resume TeamCity queue
Code Block | ||
---|---|---|
| ||
curl -s \ -u "<tc_username>:<tc_password>" \ -X POST \ "https://<tc_url>/queueStartStop.html?stateChangeReason=&newQueueState=true" |
...