Get latest da codice di un progetto su TFS
Sto scrivendo uno scriptino per, nell’ordine, ottenere l’ultima versione di un progetto da TFS, buildarla e farne un publish su IIS.
Al momento sono riuscito solo a fare il get latest e quasi il build…
Comunque ho potuto riscontrare della classicissima mancanza di documentazione recente (e/o proprio di documentazione), quindi ecco qui il mio piccolo contributo.
Questa funzione:
- si connette a un server tfs
- effettua l’autenticazione con username/password/dominio
- crea, se necessario, un workspace fittizio
- crea, se necessario, una cartella (o svuota quella indicata) nel filesystem
- mappa il workspace sulla cartella in questione
- scarica il codice da tfs
- cancella il workspace temporaneo
Per funzionare ha bisogno di aver referenziate le librerie Microsoft.TeamFoundation.Client e Microsoft.TeamFoundation.VersionControl.Client
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public void GetLatest()
{
TeamFoundationServer tfs;
bool createdWorkspace = false;
VersionControlServer versionControl;
Workspace workspace = null;
try
{
//Configurazione delle credenziali
System.Net.NetworkCredential credential = new System.Net.NetworkCredential("username", "password", "dominio");
//Configurazione del server
string TFSServerPath = "https://server_di_tfs:8080";
//Autenticazione nel tfs
tfs = new TeamFoundationServer(TFSServerPath, credential);
tfs.Authenticate();
//Configurazione del workspace
versionControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
string workspaceName = "workspace_fittizio";
//se il workspace è già mappato nel filesystem usa quello, altrimenti ne crea uno nuovo (che alla fine verrà cancellato)
try
{
workspace = versionControl.GetWorkspace(workspaceName,
versionControl.AuthorizedUser);
}
catch (WorkspaceNotFoundException)
{
//Creazione workspace temporaneo");
workspace = versionControl.CreateWorkspace(workspaceName,
versionControl.AuthorizedUser);
createdWorkspace = true;
}
//Configurazione delle folder
var serverFolder = "$/path/del/progetto/su/tfs";
var localFolder = @"C:\cartella\dove\scaricare\il\progetto";
//se la cartella non esiste la crea
if (!Directory.Exists(localFolder))
Directory.CreateDirectory(localFolder);
//svuota la cartella di destinazione
DirectoryInfo directory = new DirectoryInfo(localFolder);
foreach (FileInfo file in directory.GetFiles("*", SearchOption.AllDirectories))
{
File.SetAttributes(file.FullName, FileAttributes.Normal);
file.Delete();
}
foreach (DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);
//Mapping del workspace
var workingFolder = new WorkingFolder(serverFolder, localFolder);
workspace.CreateMapping(workingFolder);
if (!workspace.HasReadPermission)
{
throw new SecurityException(
String.Format("{0} does not have read permission for {1}",
versionControl.AuthorizedUser, serverFolder));
}
//Esecuzione get latest
workspace.Get(VersionSpec.Latest, GetOptions.Overwrite); //ci sono tipo 10 overload, fa anche il caffè
}
finally
{
//se è stato creato un workspace temporaneo viene cancellato
if ((workspace != null) && createdWorkspace)
{
//Cancellazione workspace temporaneo
workspace.Delete();
}
}
}
This post is licensed under CC BY 4.0 by the author.