From 81b8950ced7f58165ef80953e5ae52ff089748c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 8 May 2017 12:03:24 +0200 Subject: [PATCH] Updated k8s deploy script --- k8s/deploy.ps1 | 54 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/k8s/deploy.ps1 b/k8s/deploy.ps1 index f0d24e1b1..22b94c41e 100644 --- a/k8s/deploy.ps1 +++ b/k8s/deploy.ps1 @@ -3,16 +3,24 @@ Param( [parameter(Mandatory=$false)][string]$dockerUser, [parameter(Mandatory=$false)][string]$dockerPassword, [parameter(Mandatory=$false)][bool]$deployCI, - [parameter(Mandatory=$false)][string]$execPath + [parameter(Mandatory=$false)][bool]$useDockerHub, + [parameter(Mandatory=$false)][string]$execPath, + [parameter(Mandatory=$false)][string]$kubeconfigPath ) -$kubectl_exec = 'kubectl'; - -if(-not [string]::IsNullOrEmpty($execPath)) { - $kubectl_exec = $execPath + '/' + 'kubectl'; +function ExecKube($cmd) { + if($deployCI) { + $kubeconfig = $kubeconfigPath + 'config'; + $exp = $execPath + 'kubectl ' + $cmd + ' --kubeconfig=' + $kubeconfig + Invoke-Expression $exp + } + else{ + $exp = $execPath + 'kubectl ' + $cmd + Invoke-Expression $exp + } } -# Not using ACR when deploying through CI VSTS +# Check command paths only for manual deployment if(-not $deployCI) { $requiredCommands = ("docker", "docker-compose", "kubectl") foreach ($command in $requiredCommands) { @@ -21,7 +29,10 @@ if(-not $deployCI) { exit } } +} +# Use ACR instead of DockerHub as image repository +if(-not $useDockerHub) { Write-Host "Logging in to $registry" -ForegroundColor Yellow docker login -u $dockerUser -p $dockerPassword $registry if (-not $LastExitCode -eq 0) { @@ -30,17 +41,17 @@ if(-not $deployCI) { } # create registry key secret - & $kubectl_exec create secret docker-registry registry-key ` + ExecKube -cmd 'create secret docker-registry registry-key ` --docker-server=$registry ` --docker-username=$dockerUser ` --docker-password=$dockerPassword ` - --docker-email=not@used.com + --docker-email=not@used.com' } # start sql, rabbitmq, frontend deployments -& $kubectl_exec create configmap config-files --from-file=nginx-conf=nginx.conf -& $kubectl_exec label configmap config-files app=eshop -& $kubectl_exec create -f sql-data.yaml -f rabbitmq.yaml -f services.yaml -f frontend.yaml +ExecKube -cmd 'create configmap config-files --from-file=nginx-conf=nginx.conf' +ExecKube -cmd 'label configmap config-files app=eshop' +ExecKube -cmd 'create -f sql-data.yaml -f rabbitmq.yaml -f services.yaml -f frontend.yaml' # building and publishing docker images not necessary when deploying through CI VSTS if(-not $deployCI) { @@ -61,38 +72,39 @@ if(-not $deployCI) { Write-Host "Waiting for frontend's external ip..." -ForegroundColor Yellow while ($true) { - $frontendUrl = & $kubectl_exec get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}" + $frontendUrl = & ExecKube -cmd 'get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"' if ([bool]($frontendUrl -as [ipaddress])) { break } Start-Sleep -s 15 } -& $kubectl_exec create configmap urls ` +ExecKube -cmd 'create configmap urls ` --from-literal=BasketUrl=http://$($frontendUrl)/basket-api ` --from-literal=CatalogUrl=http://$($frontendUrl)/catalog-api ` --from-literal=IdentityUrl=http://$($frontendUrl)/identity ` --from-literal=OrderingUrl=http://$($frontendUrl)/ordering-api ` --from-literal=MvcClient=http://$($frontendUrl)/webmvc ` - --from-literal=SpaClient=http://$($frontendUrl) -& $kubectl_exec label configmap urls app=eshop + --from-literal=SpaClient=http://$($frontendUrl)' + +ExecKube -cmd 'label configmap urls app=eshop' Write-Host "Creating deployments..." -& $kubectl_exec apply -f deployments.yaml +ExecKube -cmd 'apply -f deployments.yaml' -# not using ACR for pulling images when deploying through CI VSTS -if(-not $deployCI) { +# use ACR registry for pulling images if docker hub is not specified +if(-not $useDockerHub) { # update deployments with the private registry before k8s tries to pull images # (deployment templating, or Helm, would obviate this) - & $kubectl_exec set image -f deployments.yaml ` + ExecKube -cmd 'set image -f deployments.yaml ` basket=$registry/eshop/basket.api ` catalog=$registry/eshop/catalog.api ` identity=$registry/eshop/identity.api ` ordering=$registry/eshop/ordering.api ` webmvc=$registry/eshop/webmvc ` - webspa=$registry/eshop/webspa + webspa=$registry/eshop/webspa' } -& $kubectl_exec rollout resume -f deployments.yaml +ExecKube -cmd 'rollout resume -f deployments.yaml' Write-Host "WebSPA is exposed at http://$frontendUrl, WebMVC at http://$frontendUrl/webmvc" -ForegroundColor Yellow