Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Dump specific tables from source TeamCity database

    Code Block
    languagebash
    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 


  2. Copy /<source-teamcity-data-dir>/config/roles-config.xml
  3. Pack dump and configuration fail into archive

    Code Block
    languagebash
    zip -r users-groups-roles.zip teamcity.sql roles-config.xml


  4. Copy archive to target TeamCity instance <source-teamcity-host>
  5. Unpack archive

    Code Block
    languagebash
    unzip users-groups-roles.zip


  6. Place roles-config.xml to /<target-teamcity-data-dir>/config/roles-config.xml
  7. Restore specific tables (TeamCity and/or DB service stop is not required)

    Code Block
    languagebash
    mysql -u teamcity -p teamcity < teamcity.sql


  8. Restart TC (restart is required to re-read some DB data which is not updated on-the-fly).
    1. Stop queue

      Code Block
      languagebash
      curl -s \
           -u "<tc_username>:<tc_password>" \
           -X POST \
           "https://<tc_url>/queueStartStop.html?stateChangeReason=TeamCity+daily+maintenance&newQueueState=false"


    2. Wait for non-composite running builds to finish

      Code Block
      languagebash
      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


    3. Restart server

      Code Block
      languagebash
      curl -s \
           -u "<tc_username>:<tc_password>" \
           -X POST \
           "https://<tc_url>/admin/serverRestart.html?start=1" 1>/dev/null 2>&1
      sleep 10


    4. Wait for TeamCity to boot

      Code Block
      languagebash
      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: ${runningBuildsCountreturnCode}"
              sleep 60
          else
      	break
          fi
      done


    5. Resume TeamCity queue

      Code Block
      languagebash
      curl -s \
           -u "<tc_username>:<tc_password>" \
           -X POST \
           "https://<tc_url>/queueStartStop.html?stateChangeReason=&newQueueState=true"


...

  1. TC: Introduce automated instructions for preparing Linux and Windows agents.
  2. TC: Remove obsolete secret tokens.
  3. TC: Introduce Kotlin DSL based settings (instead of XML).