A tanszéken van egy régi source control szerverünk, ami Team Foundation Server 2005-t futtat, azt a bizonyos 1.0 verziót. Tekintve, hogy alatta már az operációs rendszer, az SQL Server és a SharePoint is kiöregedett, nem beszélve a hardverről, elhatároztam, hogy megfrissítem, méghozzá a 2013 verzióra. A dolog szépségét az adja, hogy nem lehet egyetlen lépésben 2005-ről 2013-ra frissíteni (ami nem is meglepő, hiszen volt köztük 3 verzió), hanem először 2010-re érdemes, ahonnan lehet 2013-ra:
A 2005-ről 2010-re frissítés trükkös, mert SQL-t és SharePointot is kell frissíteni, amihez nagy segítség a TFS Setup Support Team blogján található leírás és best practice gyűjtemény. A WSS 2.0-3.0 frissítéshez szintén van egy hasznos blog bejegyzés a TFS csapat blogjában.
A TFS frissítése elméletileg egy viszonylag egyszerű folyamat: el kell távolítani az előző verziót, de meg kell hagyni az adatbázisokat az SQL Serverben, majd fel kell telepíteni az új verziót, és a telepítő varázsló Upgrade opciójával csatlakozni kell a régi adatbázishoz, amit a telepítő meg fog frissíteni. Elméletben tényleg nem tűnik bonyolultnak, ráadásul Tim Elhajj Upgrade Team Foundation Server 2012: The Ultimate Upgrade Guide című 61 oldalas step-by-step képeskönyve is sokat segít.
A gyakorlat azonban kicsit más.
Kezdjük ott, hogy sajnos egyik leírásban sincs benne, hogy a TFS 2010 upgrade folyamatban van egy hiba, ami inkonzisztenciát okozhat az adatbázisban, ezért némileg trükközni kell a frissítés során. Erről Brian Harry TFS 2010 Upgrade Issue című cikkében olvashatunk, ahol a hotfix is megtalálható.
Ami azonban még zavaróbb, hogy a simán lefutó frissítés után nem sikerült csatlakoznom a szerverhez, amiről a különböző kliensek nagyon változatos hibaüzenetekkel tájékoztattak, például:
TF400324: Team Foundation services are not available from server MyServer\MyCollection. Technical information (for administrator): Unable to connect to the remote server.
Vagy:
TF205020: A connection could not be made to the following server: MyServer\MyCollection. This server was used during your most recent session, but it might be offline, or network problems might be preventing the connection. Contact the administrator for Team Foundation Server to confirm that the server is available on the network.
Vagy egyszerűen csak:
TF31002: Unable to connect to this Team Foundation Server
A csúcs az volt, amikor a szerveren futó Team System Web Access elérte az adatokat, de a távoli Visual Studio kliens nem tudott csatlakozni, pedig a Network Monitor szerint ment a forgalom szépen, csak épp HTTP 4xx és 5xx hibák jöttek a szerverről (ez egyébként az IIS logban is látszik). Volt olyan is, hogy sikerült csatlakozni a collectionhöz, a work itemeket sikerült is elérni, de a source controlban lévő fájlokat és azok történetét nem.
A különösen érdekes az volt a dologban, hogy a cél szerveren létrehozott új collectiont tökéletesen elérték a kliensek, tehát nem a rendszer szintű beállításokkal (pl. port, tűzfal, tanúsítvány) volt gond, hanem a frissített adatbázisban nem stimmelt valami. Lefuttattam a TFS 2013 Power Toys-ban lévő Best Practices Analyzert, de nem talált semmit sem szerver, sem collection szinten.
Mivel kifogytam az ötletekből, elővettem az SQL adatbázist közvetlenül. Néztem a forgalmat Profilerrel, illetve belenéztem a táblákba Management Studioval, és összehasonlítottam a frissen létrehozott, működő collection adatbázisát a nem működő, frissített adatbázis tartalmával. Így leltem rá a tbl_ServiceDefinition táblára, amiről ugyan dokumentációt nem találtam, de ránézésre a TFS webszolgáltatásaihoz tartozó .ASMX URL végpontokat tartalmazza. Érdekes módon míg az új adatbázisban többnyire minden cella ki volt töltve, addig a frissített adatbázisban a sorok jelentős részében a RelativePath mező értéke NULL volt. Vettem egy nagy levegőt, készítettem egy snapshotot a virtuális gépről, és megfrissítettem a tbl_ServiceDefinition tábla RelativeToSetting, RelativePath és IsSingleton oszlopait azokban a sorokban, ahol a RelativePath NULL volt, és az Identifier oszlopban lévő GUID alapján találtam egyező sort a működő adatbázisban. Íme a végeredmény:
A klienseken kitöröltem a Visual Studio Team Explorer cache mappát (C:\Users\felhasználónév\AppData\Local\Microsoft\Team Foundation), újra felvettem a szervert, ééééééééééés működött!
Hozzá kell tennem, hogy ez semmilyen szempontból nem jó módszer, nem támogatott és nem is javasolt. Aki hasonlóval küzd, valószínűleg sokkal jobban jár, ha a Microsoft hivatalos terméktámogatásához fordul!
Ezzel együtt ezek után már nem is volt annyira vészes a Configure Features varázsló és a process template-ek manuális frissítése.