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.

80 lines
2.9 KiB

  1. Param(
  2. [parameter(Mandatory=$true)][string]$registry,
  3. [parameter(Mandatory=$true)][string]$dockerUser,
  4. [parameter(Mandatory=$true)][string]$dockerPassword
  5. )
  6. $requiredCommands = ("docker", "docker-compose", "kubectl")
  7. foreach ($command in $requiredCommands) {
  8. if ((Get-Command $command -ErrorAction SilentlyContinue) -eq $null) {
  9. Write-Host "$command must be on path" -ForegroundColor Red
  10. exit
  11. }
  12. }
  13. Write-Host "Logging in to $registry" -ForegroundColor Yellow
  14. docker login -u $dockerUser -p $dockerPassword $registry
  15. if (-not $LastExitCode -eq 0) {
  16. Write-Host "Login failed" -ForegroundColor Red
  17. exit
  18. }
  19. # create registry key secret
  20. kubectl create secret docker-registry registry-key `
  21. --docker-server=$registry `
  22. --docker-username=$dockerUser `
  23. --docker-password=$dockerPassword `
  24. --docker-email=not@used.com
  25. # start sql and frontend deployments
  26. kubectl create configmap config-files --from-file=nginx-conf=nginx.conf
  27. kubectl label configmap config-files app=eshop
  28. kubectl create -f sql-data.yaml -f services.yaml -f frontend.yaml
  29. Write-Host "Building solution..." -ForegroundColor Yellow
  30. ../cli-windows/build-bits-simple.ps1
  31. Write-Host "Building Docker images..." -ForegroundColor Yellow
  32. docker-compose -p .. -f ../docker-compose.yml build
  33. Write-Host "Pushing images to $registry..." -ForegroundColor Yellow
  34. $services = ("basket.api", "catalog.api", "identity.api", "ordering.api", "webmvc", "webspa")
  35. foreach ($service in $services) {
  36. docker tag eshop/$service $registry/$service
  37. docker push $registry/$service
  38. }
  39. Write-Host "Waiting for frontend's external ip..." -ForegroundColor Yellow
  40. while ($true) {
  41. $frontendUrl = kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}" 2> $_
  42. if ([bool]($frontendUrl -as [ipaddress])) {
  43. break
  44. }
  45. Start-Sleep -s 15
  46. }
  47. kubectl create configmap urls `
  48. --from-literal=BasketUrl=http://$($frontendUrl)/basket-api `
  49. --from-literal=CatalogUrl=http://$($frontendUrl)/catalog-api `
  50. --from-literal=IdentityUrl=http://$($frontendUrl)/identity `
  51. --from-literal=OrderingUrl=http://$($frontendUrl)/ordering-api `
  52. --from-literal=MvcClient=http://$($frontendUrl)/webmvc `
  53. --from-literal=SpaClient=http://$($frontendUrl)
  54. kubectl label configmap urls app=eshop
  55. # TODO verify database readiness?
  56. Write-Host "Creating deployments..."
  57. kubectl apply -f deployments.yaml
  58. # update deployments with the private registry
  59. # (deployment templating, or Helm, would obviate this)
  60. kubectl set image -f deployments.yaml `
  61. basket=$registry/basket.api `
  62. catalog=$registry/catalog.api `
  63. identity=$registry/identity.api `
  64. ordering=$registry/ordering.api `
  65. webmvc=$registry/webmvc `
  66. webspa=$registry/webspa
  67. kubectl rollout resume -f deployments.yaml
  68. Write-Host "WebSPA is exposed at http://$frontendUrl, WebMVC at http://$frontendUrl/webmvc" -ForegroundColor Yellow