Tak, można zautomatyzować zmianę physical path w IIS i restart aplikacji bez użycia PowerShell, korzystając z narzędzi dostępnych w systemie Windows, takich jak appcmd (Application Configuration Command Tool) lub msdeploy. Obie te opcje są dostępne z poziomu wiersza poleceń (cmd) i można je zintegrować z pipeline’em GitLab CI/CD.
physical path i restart aplikacji za pomocą appcmdappcmd jest narzędziem wbudowanym w IIS, które pozwala zarządzać konfiguracją serwera z poziomu wiersza poleceń. Możesz go użyć do:
physicalPath) dla aplikacji.physicalPath dla aplikacjicmd%windir%\system32\inetsrv\appcmd set app /app.name:"Default Web Site/aplikacja" /path:/ /physicalPath:"C:\inetpub\wwwroot\aplikacja\%CI_JOB_ID%"
Default Web Site/aplikacja – nazwa aplikacji w IIS (dostosuj do swojej struktury).%CI_JOB_ID% – zmienna środowiskowa GitLab CI/CD (zastąpi ją wartość z pipeline’a).cmd%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:"aplikacja"
aplikacja – nazwa puli aplikacji (Application Pool) w IIS.cmd%windir%\system32\inetsrv\appcmd stop site /site.name:"Default Web Site" %windir%\system32\inetsrv\appcmd start site /site.name:"Default Web Site"
W pliku .gitlab-ci.yml dodaj job, który wykona te polecenia na serwerze docelowym (np. za pomocą SSH lub WinRM).
Przykład dla SSH (jeśli serwer Windows obsługuje OpenSSH):
yamldeploy_to_iis: stage: deploy script: - echo "Deploying to IIS..." - scp -o StrictHostKeyChecking=no -r ./artifacts/* user@windows-server:C:\inetpub\wwwroot\aplikacja\%CI_JOB_ID% - ssh user@windows-server "%windir%\system32\inetsrv\appcmd set app /app.name:\"Default Web Site/aplikacja\" /path:/ /physicalPath:\"C:\inetpub\wwwroot\aplikacja\%CI_JOB_ID%\"" - ssh user@windows-server "%windir%\system32\inetsrv\appcmd recycle apppool /apppool.name:\"aplikacja\"" only: - main
Uwaga:
- Jeśli używasz WinRM, zamiast
sshużyj narzędzia jakwinrslubInvoke-Command(ale to już PowerShell).- Upewnij się, że użytkownik, pod którym łączysz się z serwerem, ma uprawnienia administratora w IIS.
msdeploy (Web Deploy)Jeśli używasz Web Deploy (msdeploy), możesz zautomatyzować wdrożenie i restart aplikacji w jednym poleceniu.
Przykład:
cmdmsdeploy -verb:sync -source:contentPath="C:\inetpub\wwwroot\aplikacja\%CI_JOB_ID%" -dest:contentPath="Default Web Site/aplikacja",computerName=https://windows-server:8172/msdeploy.axd,userName=user,password=pass,authType=Basic -allowUntrusted
appcmd po wykryciu nowego folderu w C:\inetpub\wwwroot\aplikacja\. Pipeline GitLab mógłby tworzyć plik "trigger" (np. deploy.trigger), a zadanie monitorowałoby ten plik i wykonywało polecenia appcmd..bat:.bat na serwerze, który wykona appcmd, i uruchamiaj go z pipeline’a (np. przez ssh lub winrs).appcmdmsdeployNajprostsze rozwiązanie to appcmd + SSH (jeśli serwer obsługuje OpenSSH). Jeśli nie, rozważ Web Deploy lub zadania zaplanowane.
Czy masz już skonfigurowany dostęp SSH/WinRM do serwera Windows?
Jeśli nie, to który sposób wolisz: appcmd, msdeploy, czy może coś innego?