Dwa moje poprzednie artykuły wprowadziły Was w świat Pipeline, praktyk DevOps w zakresie budowania i weryfikacji kodu X++ oraz korzyści z wykorzystywania DevOps Pipelines dla D365 F&O.
W trzeciej części serii ponownie przedstawię praktyczne informacje dotyczących użycia automatyzacji zadań za pomocą Pipeline DevOps (będę używał polskiego słowa „potok” zamiast angielskiego „pipeline”) na przykładzie systemu ERP D365 F&O wdrażanego przez moje Centrum Kompetencyjne. Skupię się m.in. na użyciu automatu potoku DevOps do innych czynności niż tylko sprawdzanie wytwarzanego kodu przez naszych programistów za pomocą automatu potoku DevOps.
W artykule opiszę różne sposoby wdrożenia i używania potoków DevOps.
Kopiowanie branchy/plików w ramach repozytorium
- Aby utworzyć potok DevOps, który kopiuje plik w obrębie gałęzi, np. DEV, możesz użyć potoków Azure DevOps lub innego dowolnego narzędzia CI/CD obsługującego operacje na plikach. W tym artykule przedstawię przykład z wykorzystaniem potoków Azure DevOps.
Oto jak możesz utworzyć taki potok dla skopiowania pliku:- Utwórz potok lub utwórz/edytuj plik xml w katalogu głównym repozytorium. Zdefiniuj konfigurację potoku do kopiowania pliku
trigger:
- SAT
pool:
vmImage: windows-latest'
steps:
- script: |
echo "Kopiowanie pliku..."
cp path/to/source/file path/to/destination/
displayName: 'Kopiowanie pliku'
- Aby utworzyć potok DevOps, który kopiuje pliki z jednej gałęzi, np. DEV do SAT, możesz użyć potoków Azure DevOps do stworzenia całego procesu kopiowania plików:

oraz użyć poleceń:
tf add D:\a\9\s\SAT\ /recursive /noignore .....
tf checkin D:\a\9\s\SAT\ /recursive /comment:"DEV to SAT" .....
Takie działanie pozwala stworzyć potok dla kopiowania plików.
Automatyczne odświeżenie encji w aplikacji D365 F&O
Konsultanci i programiści po jakichkolwiek zmianach w encjach w D365 F&O muszą odświeżać ręcznie listę encji danych na środowisku. Dzięki dodatkowi d365fo.integrations jest możliwość zautomatyzowania tego procesu za pomocą potoków DevOps. Dzięki temu modułowi będziesz mógł odświeżyć listę encji nawet w środowisku produkcyjnym.
Aby rozpocząć, potrzebujemy rejestracji aplikacji w portalu Azure oraz konfiguracji w systemie D365. W ramach rejestracji aplikacji w portalu Azure konieczne będą:
- Identyfikator klienta zarejestrowanej aplikacji usługi Azure AD.
- Identyfikator klucza klienta zarejestrowanej aplikacji usługi Azure AD.
- Identyfikator GUID dzierżawy usługi Azure AD, w której utworzono zarejestrowaną aplikację.
Potrzebujesz także zainstalować plik d365fo.integrations. Otwórz wiersz polecenia programu PowerShell z podwyższonym poziomem uprawnień i użyj następującego polecenia.
Install-Module -Name d365fo.integrations
Ponadto, utwórz potok DevOps:

Dla skryptu PowerShell potrzebujesz uzupełnić skrypt:
Install-PackageProvider nuget -Scope CurrentUser -Force -Confirm:$false
write-host "pakiet nuget zainstalowany"
Install-Module -Name AZ -AllowClobber -Scope CurrentUser -Force -Confirm:$False -SkipPublisherCheck
write-host "az zainstalowany"
Install-Module -Name d365fo.integrations -AllowClobber -Scope CurrentUser -Force -Confirm:$false
write-host "d365fo.integrations zainstalowany"
Add-D365ODataConfig -Name "D365EntityRefresh" -Tenant "AzureTenantId" -url "https://yourenvironment.sandbox.operations.dynamics.com" -ClientId "AzureApplicationId" -ClientSecret "AzureApplicationClientSecret"
write-host "konfiguracja dodana"
Set-D365ActiveODataConfig -Name D365EntityRefresh
write-host "standardowa konfiguracja"
$token = Get-D365ODataToken
write-host "token wygenerowany"
Invoke-D365DmfInit -verbose -Token $token
write-host "dmf inicjalny - wywołany"
Takie działanie pozwala stworzyć potok dla odświeżenia encji.
Automatyczna kopia zapasowa środowisk D365 za pomocą potoków DevOps
Za pomocą potoku DevOps możesz zautomatyzować kopię zapasową środowisk D365 F&O. Istnieje API Database Movement, które pozwala to zrobić. Sii w swoich projektach wdrożeniowych u klientów bardzo często wykorzystuje ten mechanizm.
W celu stworzenia automatycznej kopii zapasowej środowisk D365 powinieneś utworzyć potok DevOps z dwoma zadaniami.
Dodatkowo, tak jak w przypadku potoku dla odświeżania encji, należy zarejestrować aplikację oraz zebrać informacje i parametry potrzebne do konfiguracji.

Dla skryptu powershell Token możesz użyć:
$tokenUrl = "https://login.microsoftonline.com/common/oauth2/token"
$tokenBody = @{
grant_type = "password"
client_id = "$(CLIENTID)"
client_secret = "$(CLIENTSECRET)"
resource = "https://lcsapi.lcs.dynamics.com"
username = "$(USERNAME)"
password = "$(PASSWORD)"
}
$tokenResponse = Invoke-RestMethod -Method 'POST' -Uri $tokenUrl -Body $tokenBody
$token = $tokenResponse.access_token
Write-Host $token
Write-Host "##vso[task.setvariable variable=TOKENOUT;isOutput=true]$token"
Dla skryptu powershell Backup możesz użyć:
$cstzone = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId( (Get-Date), ‘W. Europe Standard Time’)
$filedate = Get-Date $cstzone -f “yyy-MM-dd”
$BackupName = “Golderbackup-$filedate”
Write-Output $BackupName
$refreshUrl = “https://lcsapi.lcs.dynamics.com/databasemovement/v1/export/project/$(LCSPROJID)/environment/$(SAT)/backupName/$BackupName”
$refreshHeader = @{
Authorization = “Sii $(task1.TOKENOUT)”
“x-ms-version” = ‘2017-09-15’
“Content-Type” = “application/json”
}
$refreshResponse = Invoke-RestMethod $refreshUrl -Method ‘POST’ -Headers $refreshHeader
Write-Output $refreshResponse
Takie działanie pozwala stworzyć potok dla automatyzacji kopii zapasowych środowisk D365 F&O.

Na zakończenie
W artykule skupiłem się na kolejnych aspektach praktycznych dotyczących automatyzacji zadań za pomocą potoków DevOps na przykładzie systemu ERP D365 F&O wdrażanego przez moje Centrum Kompetencyjne. Skupiłem się na części administracyjnej czyli m.in. automatycznej kopii środowisk. Mam nadzieję, że artykuł będzie dla Was pomocny.
W kolejnych częściach przedstawię dalsze możliwości potoków DevOps.
Poprzednie wpisy znajdziecie tutaj:
Zostaw komentarz