Jeżeli tych projektów mamy kilkadziesiąt to ich migracja w ten sposób staje się dużym wyzwaniem.
Jak sobie z tym poradzić ?
Oczywiście poprzez automatyzację tego procesu 😉
Co jest niezbędne do automatycznej migracji wielu projektów do usługi Azure DevOps ?
- konto Azure
- konto Azure DevOps account & organization
- git
- powershell
- Azure CLI
- Azure DevOps CLI
Po utworzeniu niezbędnych kont oraz zainstalowaniu niezbędnych narzędzi możemy przystąpić do stworzenia skryptu powershell, który wykona za nas czarną robotę 🙂
Pierwszy krok to oczywiście zalogowanie się do portalu Azure DevOps.
az login --allow-no-subscriptions
Następnym krokiem jest zdefiniowanie nazw projektów, które chcemy przenieść do usługi Azure DevOps. W moim przypadku nazwy wszystkich projektów lokalnych są tożsame z nazwami katalogów, w których znajduje się ich kod źródłowy. Ponadto wszystkie projekty lokalne trzymane są w katalogu Projects zatem określenie nazw tworzonych projektów w Azure DevOps to nic innego jak odczytanie nazw wszystkich folderów, które znajdują się w katalogu Projects.
Get-ChildItem -Recurse -Directory | ForEach-Object { ... }
Po odczytaniu nazwy lokalnego projektu ( na podstawie nazwy katalogu, w którym się on znajduje ) ustawiamy kontekst katalogu, w którym będziemy wykonywać dalsze operacje.
cd $_.Name
Następnie możemy wywołać polecenie, które utworzy nam analogiczny projekt w usłudze Azure DevOps.
az devops project create --name $_.Name --source-control git --visibility private --detect true --organization https://dev.azure.com/{organization}/
Po utworzeniu projektu w usłudze Azure DevOps możemy w bieżącym katalogu lokalnego projektu zainicjalizować repozytorium git’a, a następnie zakomitować wszystkie pliki, które się w nim znajdują.
git init
git add .
git commit -a -m "Initial commit"
Po inicjalizacji repozytorium i dodaniu do niego wszystkich plików, jedyne co Nam pozostaje to połączenie lokalnego repozytorium z repozytorium, które utworzyliśmy w usłudze Azure DevOps podczas tworzenia projektu a następnie wypchnięcie do niego zakomitowanych przez Nas plików.
git remote add origin (az repos list --project $_.Name --org https://dev.azure.com/{organization}/ --query [0].webUrl)
git push -u origin master
Na koniec zmiana kontekstu katalogu, w którym jesteśmy tak, aby w następnym kroku iterowania po katalogu Projects móc przeprocesować następny w kolejności lokalny projekt.
cd ..
Pełen skrypt można znaleźć na moim GitHubie.
Uruchamiając ten skrypt w moim katalogu Projects, automatycznie wszystkie lokalne projekty zostały zmigrowane do portalu Azure DevOps.