You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
6.1 KiB

  1. Param(
  2. [parameter(Mandatory=$false)][string]$registry,
  3. [parameter(Mandatory=$false)][string]$dockerUser,
  4. [parameter(Mandatory=$false)][string]$dockerPassword,
  5. [parameter(Mandatory=$false)][bool]$deployCI,
  6. [parameter(Mandatory=$false)][bool]$useDockerHub,
  7. [parameter(Mandatory=$false)][string]$execPath,
  8. [parameter(Mandatory=$false)][string]$kubeconfigPath
  9. )
  10. function ExecKube($cmd) {
  11. if($deployCI) {
  12. $kubeconfig = $kubeconfigPath + 'config';
  13. $exp = $execPath + 'kubectl ' + $cmd + ' --kubeconfig=' + $kubeconfig
  14. Invoke-Expression $exp
  15. }
  16. else{
  17. $exp = $execPath + 'kubectl ' + $cmd
  18. Invoke-Expression $exp
  19. }
  20. }
  21. # Not used when deploying through CI VSTS
  22. if(-not $deployCI) {
  23. $requiredCommands = ("docker", "docker-compose", "kubectl")
  24. foreach ($command in $requiredCommands) {
  25. if ((Get-Command $command -ErrorAction SilentlyContinue) -eq $null) {
  26. Write-Host "$command must be on path" -ForegroundColor Red
  27. exit
  28. }
  29. }
  30. }
  31. # Use ACR instead of DockerHub as image repository
  32. if(-not $useDockerHub) {
  33. Write-Host "Logging in to $registry" -ForegroundColor Yellow
  34. docker login -u $dockerUser -p $dockerPassword $registry
  35. if (-not $LastExitCode -eq 0) {
  36. Write-Host "Login failed" -ForegroundColor Red
  37. exit
  38. }
  39. # create registry key secret
  40. ExecKube -cmd 'create secret docker-registry registry-key `
  41. --docker-server=$registry `
  42. --docker-username=$dockerUser `
  43. --docker-password=$dockerPassword `
  44. --docker-email=not@used.com'
  45. }
  46. # Removing previous services & deployments
  47. Write-Host "Removing existing services & deployments.." -ForegroundColor Yellow
  48. ExecKube -cmd 'delete deployments --all'
  49. ExecKube -cmd 'delete services --all'
  50. ExecKube -cmd 'delete configmap config-files'
  51. ExecKube -cmd 'delete configmap urls'
  52. # start sql, rabbitmq, frontend deploymentsExecKube -cmd 'delete configmap config-files'
  53. ExecKube -cmd 'create configmap config-files --from-file=nginx-conf=nginx.conf'
  54. ExecKube -cmd 'label configmap config-files app=eshop'
  55. ExecKube -cmd 'create -f sql-data.yaml -f basket-data.yaml -f rabbitmq.yaml -f services.yaml -f frontend.yaml'
  56. # building and publishing docker images not necessary when deploying through CI VSTS
  57. if(-not $deployCI) {
  58. Write-Host "Building and publishing eShopOnContainers..." -ForegroundColor Yellow
  59. dotnet restore ../eShopOnContainers-ServicesAndWebApps.sln
  60. dotnet publish -c Release -o obj/Docker/publish ../eShopOnContainers-ServicesAndWebApps.sln
  61. Write-Host "Building Docker images..." -ForegroundColor Yellow
  62. docker-compose -p .. -f ../docker-compose.yml build
  63. Write-Host "Pushing images to $registry..." -ForegroundColor Yellow
  64. $services = ("basket.api", "catalog.api", "identity.api", "ordering.api", "webmvc", "webspa", "webstatus")
  65. foreach ($service in $services) {
  66. docker tag eshop/$service $registry/eshop/$service
  67. docker push $registry/eshop/$service
  68. }
  69. }
  70. Write-Host "Waiting for frontend's external ip..." -ForegroundColor Yellow
  71. while ($true) {
  72. $frontendUrl = & ExecKube -cmd 'get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"'
  73. if ([bool]($frontendUrl -as [ipaddress])) {
  74. break
  75. }
  76. Start-Sleep -s 15
  77. }
  78. ExecKube -cmd 'create configmap urls `
  79. --from-literal=BasketUrl=http://basket `
  80. --from-literal=BasketHealthCheckUrl=http://basket/hc `
  81. --from-literal=CatalogUrl=http://$($frontendUrl)/catalog-api `
  82. --from-literal=CatalogHealthCheckUrl=http://catalog/hc `
  83. --from-literal=IdentityUrl=http://$($frontendUrl)/identity `
  84. --from-literal=IdentityHealthCheckUrl=http://identity/hc `
  85. --from-literal=OrderingUrl=http://ordering `
  86. --from-literal=OrderingHealthCheckUrl=http://ordering/hc `
  87. --from-literal=MvcClientExternalUrl=http://$($frontendUrl)/webmvc `
  88. --from-literal=WebMvcHealthCheckUrl=http://webmvc/hc `
  89. --from-literal=MvcClientOrderingUrl=http://ordering `
  90. --from-literal=MvcClientCatalogUrl=http://catalog `
  91. --from-literal=MvcClientBasketUrl=http://basket `
  92. --from-literal=WebSpaHealthCheckUrl=http://webspa/hc `
  93. --from-literal=SpaClientOrderingExternalUrl=http://$($frontendUrl)/ordering-api `
  94. --from-literal=SpaClientCatalogExternalUrl=http://$($frontendUrl)/catalog-api `
  95. --from-literal=SpaClientBasketExternalUrl=http://$($frontendUrl)/basket-api `
  96. --from-literal=SpaClientIdentityExternalUrl=http://$($frontendUrl)/identity `
  97. --from-literal=SpaClientExternalUrl=http://$($frontendUrl)'
  98. ExecKube -cmd 'label configmap urls app=eshop'
  99. Write-Host "Creating deployments..." -ForegroundColor Yellow
  100. ExecKube -cmd 'create -f deployments.yaml'
  101. # not using ACR for pulling images when deploying through CI VSTS
  102. if(-not $deployCI) {
  103. # update deployments with the private registry before k8s tries to pull images
  104. # (deployment templating, or Helm, would obviate this)
  105. Write-Host "Update Image containers..." -ForegroundColor Yellow
  106. ExecKube -cmd 'set image deployments/basket basket=$registry/eshop/basket.api'
  107. ExecKube -cmd 'set image deployments/catalog catalog=$registry/eshop/catalog.api'
  108. ExecKube -cmd 'set image deployments/identity identity=$registry/eshop/identity.api'
  109. ExecKube -cmd 'set image deployments/ordering ordering=$registry/eshop/ordering.api'
  110. ExecKube -cmd 'set image deployments/webmvc webmvc=$registry/eshop/webmvc'
  111. ExecKube -cmd 'set image deployments/webstatus webstatus=$registry/eshop/webstatus'
  112. ExecKube -cmd 'set image deployments/webspa webspa=$registry/eshop/webspa'
  113. }
  114. Write-Host "Execute rollout..." -ForegroundColor Yellow
  115. ExecKube -cmd 'rollout resume deployments/basket'
  116. ExecKube -cmd 'rollout resume deployments/catalog'
  117. ExecKube -cmd 'rollout resume deployments/identity'
  118. ExecKube -cmd 'rollout resume deployments/ordering'
  119. ExecKube -cmd 'rollout resume deployments/webmvc'
  120. ExecKube -cmd 'rollout resume deployments/webstatus'
  121. ExecKube -cmd 'rollout resume deployments/webspa'
  122. Write-Host "WebSPA is exposed at http://$frontendUrl, WebMVC at http://$frontendUrl/webmvc, WebStatus at http://$frontendUrl/webstatus" -ForegroundColor Yellow