BitBucket - Come scaricare un repository in locale

Requisito necessario per scaricare un repository bitbucket aziendale via script prevede di essere in possesso di un token, una sorta di user e password per effettuare la chiamata.

 

CREAZIONE DEL TOKEN PER CHIAMATE A BITBUCKET

I passi per ottenere il token sono i seguenti

 

Una volta collegati a bitbucket, accedere al menù contestuale dell'utente e scegliere la voce "Manage account"

 

 

comparirà una sezione in cui saranno presenti ulteriori opzioni tra cui "Personal Access Token"

 

sarà quindi possibile selezionare il pulsante per creare un nuovo token

 

 

Si accederà quindi ad un form in cui sarà necessario indicare un nome per il token e il tipo di permessi

 

Selezionare l'opzione "Automatic expire" a No e confermare la creazione

 

Comparirà l'informazione del nuovo token creato. Il dato va copiato e salvato in quanto non sarà più possibile recuperarlo come indicato nella figura che segue

 

 

Una volta ottenuto il token, siamo in grado di effettuare la chiamata per il download.

 

L'organizzazione delle informazioni si basa sulla seguente struttura: PROGETTO - REPOSITORY - BRANCH.

 

 

 

Lo script che andremo ad utilizzare dovrà quindi ricevere in input le coordinate per bitbucket e un ulteriore parametro che sarà la folder in cui verrà scaricato il pacchetto (in formato zip).

 

Codice Script

 

'Parametri Input: PROGETTO - REPO - BRANCH

'La chiamata sarà:

'https://bitbucket.....com/rest/api/latest/projects/PROGETTO/repos/REPO/archive?at=refs%2Fheads%2FBRANCH&format=zip

Const GIT_ROOT = "https://bitbucket.....com/rest/api/latest/projects/"

Const GIT_REPO_TAG        = "/repos/"

Const GIT_ARCH_REF = "/archive?at=refs%2Fheads%2F"

Const GIT_FORMAT          = "&format=zip"

Const GITTKN                  = "MyU3MDkzOTAxNjBvOhldPJ4zUhLoFp1XG0iSKp5zCBRb"

 

'E' possibile anche usare user e password con la basic authentication. Non è il nostro caso ma lo riporto lo stesso.

'Const GITUSR                      = "MYUSR"

'Const GITPWD                    = "MYPWD"

 

Const RC_OK = 0

Const RC_ERR          = 3

 

Dim StdOut : Set StdOut = WScript.StdOut 'Impostazione Standart Output

Dim uscita : uscita  = RC_ERR

 

if wscript.arguments.count <> 4 then

WriteLine date & " - " & time & " : Arguments number error: "

WriteLine date & " - " & time & " : Arguments expected: PROJECT REPO BRANCH OUT_FOLDER(ex. c:\temp)"

WriteLine date & " - " & time & " : End of Program - Exit Code: " & uscita

set StdOut = nothing

wscript.quit uscita

end if

 

Dim fso : set fso = CreateObject("Scripting.FileSystemObject")

 

Dim PROJECT              : PROJECT          = wscript.arguments(0)

Dim REPO : REPO = wscript.arguments(1)

Dim BRANCH          : BRANCH = wscript.arguments(2)

Dim OUT_FOLDER  : OUT_FOLDER = wscript.arguments(3)

if right(OUT_FOLDER,1) <> "\" then

OUT_FOLDER = OUT_FOLDER & "\"

end if

Dim intRequest : intRequest   = JRequest

 

if intRequest = 200 Or intRequest = 201 then

WriteLine date & " - " & time & " : DownLoad Repo OK "

uscita = RC_OK

 else

WriteLine date & " - " & time & " : Error during download repo - Request Return Code: " & intRequest

end if

 

WriteLine date & " - " & time & " : End of Program - Exit Code: " & uscita

DistruggiOggetti

wscript.quit uscita

 

Function JRequest()

Dim strURL 

strURL = GIT_ROOT & PROJECT & GIT_REPO_TAG & REPO & GIT_ARCH_REF & BRANCH & GIT_FORMAT

Dim HttpReq  : set HttpReq  = CreateObject("Msxml2.ServerXMLHTTP.6.0")

Dim bStrm : set bStrm = CreateObject("Adodb.Stream")

WriteLine date & " - " & time & " : REQUEST: " & strURL

 

HttpReq.Open "GET", strURL, False

 

 

'We use the token to do the request previous created in 

'bitbucket in the profile section (Menage Account > Personal Access Token)

'With token - just add Authorization Header and the value: "Bearer " + token.

HttpReq.setRequestHeader "Authorization", "Bearer " & GITTKN

 

'It is also possible to use the user and password for the basic authentication

'With Basic Authentication - There are two function to do a Base 64 Encoding.

'HttpReq.setRequestHeader "Authorization", "Basic "& Base64Encode(GITUSR &":"& GITPWD)

 

HttpReq.Send

 

wscript.sleep 60000 'fix wait for a minute

 

with bStrm

.type = 1 '//binary

.open

.write HttpReq.responseBody

.savetofile OUT_FOLDER & PROJECT & ".zip", 2

end with

 

strRes = HttpReq.Status

Set HttpReq = Nothing

Set bStrm   = Nothing

 

JRequest = strRes

End Function

'**********************************************************************************************************

'**********************************************************************************************************

'Funzioni a contorno per la codifica di un testo in base64

'**********************************************************************************************************

Function Base64Encode(sText)

Dim oXML, oNode

Set oXML = CreateObject("Msxml2.DOMDocument.3.0")

Set oNode = oXML.CreateElement("base64")

oNode.dataType = "bin.base64"

oNode.nodeTypedValue = Stream_StringToBinary(sText)

Base64Encode = oNode.text

Set oNode = Nothing

Set oXML = Nothing

End Function

 

Private Function Stream_StringToBinary(Text)

Const adTypeText = 2

Const adTypeBinary = 1

Dim BinaryStream 'As New Stream

Set BinaryStream = CreateObject("ADODB.Stream")

BinaryStream.Type = adTypeText

BinaryStream.CharSet = "us-ascii"

BinaryStream.Open

BinaryStream.WriteText Text

BinaryStream.Position = 0

BinaryStream.Type = adTypeBinary

BinaryStream.Position = 0

Stream_StringToBinary = BinaryStream.Read

Set BinaryStream = Nothing

End Function

 

'*********************************************************************************************************************************

'Sub per scrivere Output in linea (standard output)

'*********************************************************************************************************************************

Sub WriteLine(text)           

    StdOut.WriteLine(text) 'Scrivo l'output 

End Sub

'*********************************************************************************************************************************

'*********************************************************************************************************************************

'Distruggi oggetti

'*********************************************************************************************************************************

sub DistruggiOggetti()

set fso = nothing

set StdOut = nothing

End Sub

 

 

Pag:  <<   <   >