2017-02-16 10:49:58 -08:00
Param (
2017-05-16 12:13:49 +02:00
[ parameter ( Mandatory = $false ) ] [ string ] $registry ,
[ parameter ( Mandatory = $false ) ] [ string ] $dockerUser ,
[ parameter ( Mandatory = $false ) ] [ string ] $dockerPassword ,
[ parameter ( Mandatory = $false ) ] [ string ] $execPath ,
2017-06-16 17:40:27 +02:00
[ parameter ( Mandatory = $false ) ] [ string ] $kubeconfigPath ,
2017-06-16 20:44:11 +02:00
[ parameter ( Mandatory = $true ) ] [ string ] $configFile ,
2017-06-19 19:01:00 +02:00
[ parameter ( Mandatory = $false ) ] [ string ] $imageTag ,
2017-06-20 16:47:42 +02:00
[ parameter ( Mandatory = $false ) ] [ bool ] $deployCI = $false ,
2017-06-30 16:16:00 +02:00
[ parameter ( Mandatory = $false ) ] [ bool ] $buildImages = $true ,
2018-05-18 13:03:31 -07:00
[ parameter ( Mandatory = $false ) ] [ bool ] $pushImages = $true ,
2017-06-30 16:16:00 +02:00
[ parameter ( Mandatory = $false ) ] [ bool ] $deployInfrastructure = $true ,
[ parameter ( Mandatory = $false ) ] [ string ] $dockerOrg = " eshop "
2017-02-16 10:49:58 -08:00
)
2017-05-16 12:13:49 +02:00
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
2017-02-16 10:49:58 -08:00
}
}
2017-06-20 16:47:42 +02:00
# Initialization
$debugMode = $PSCmdlet . MyInvocation . BoundParameters [ " Debug " ] . IsPresent
$useDockerHub = [ string ] :: IsNullOrEmpty ( $registry )
2017-06-16 17:40:27 +02:00
2018-01-10 12:48:23 +01:00
$externalDns = & ExecKube -cmd 'get svc ingress-nginx -n ingress-nginx -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"'
Write-Host " Ingress ip detected: $externalDns " -ForegroundColor Yellow
if ( -not [ bool ] ( $externalDns -as [ ipaddress ] ) ) {
Write-Host " Must install ingress first " -ForegroundColor Red
Write-Host " Run deploy-ingress.ps1 and deploy-ingress-azure.ps1 " -ForegroundColor Red
exit
}
2017-06-20 16:47:42 +02:00
# Check required commands (only if not in CI environment)
2017-05-16 12:13:49 +02:00
if ( -not $deployCI ) {
$requiredCommands = ( " docker " , " docker-compose " , " kubectl " )
foreach ( $command in $requiredCommands ) {
if ( ( Get-Command $command -ErrorAction SilentlyContinue ) -eq $null ) {
Write-Host " $command must be on path " -ForegroundColor Red
exit
}
}
2017-02-16 10:49:58 -08:00
}
2017-06-20 16:47:42 +02:00
else {
$buildImages = false ; # Never build images through CI, as they previously built
}
# Get tag to use from current branch if no tag is passed
if ( [ string ] :: IsNullOrEmpty ( $imageTag ) ) {
$imageTag = $ ( git rev-parse - -abbrev -ref HEAD )
}
Write-Host " Docker image Tag: $imageTag " -ForegroundColor Yellow
2018-01-11 11:14:25 +01:00
# building docker images if needed
2017-06-30 16:16:00 +02:00
if ( $buildImages ) {
2017-06-20 16:47:42 +02:00
Write-Host " Building Docker images tagged with ' $imageTag ' " -ForegroundColor Yellow
$env:TAG = $imageTag
docker-compose -p . . -f . . / docker-compose . yml build
2018-05-18 13:03:31 -07:00
}
2017-06-20 16:47:42 +02:00
2018-05-18 13:03:31 -07:00
if ( $pushImages ) {
2017-06-30 16:16:00 +02:00
Write-Host " Pushing images to $registry / $dockerOrg ... " -ForegroundColor Yellow
2018-04-19 17:21:26 +02:00
$services = ( " basket.api " , " catalog.api " , " identity.api " , " ordering.api " , " ordering.backgroundtasks " , " marketing.api " , " payment.api " , " locations.api " , " webmvc " , " webspa " , " webstatus " , " ocelotapigw " , " mobileshoppingagg " , " webshoppingagg " , " ordering.signalrhub " )
2017-06-30 16:16:00 +02:00
2017-06-20 16:47:42 +02:00
foreach ( $service in $services ) {
2017-06-30 16:16:00 +02:00
$imageFqdn = if ( $useDockerHub ) { " $dockerOrg / ${service} " } else { " $registry / $dockerOrg / ${service} " }
docker tag eshop / $ { service } : $imageTag $ { imageFqdn } : $imageTag
docker push $ { imageFqdn } : $imageTag
2017-06-20 16:47:42 +02:00
}
}
2017-02-16 10:49:58 -08:00
2017-06-30 16:16:00 +02:00
# if we have login/pwd add the secret to k8s
if ( -not [ string ] :: IsNullOrEmpty ( $dockerUser ) ) {
$registryFDQN = if ( -not $useDockerHub ) { $registry } else { " index.docker.io/v1/ " }
Write-Host " Logging in to $registryFDQN as user $dockerUser " -ForegroundColor Yellow
if ( $useDockerHub ) {
docker login -u $dockerUser -p $dockerPassword
}
else {
docker login -u $dockerUser -p $dockerPassword $registryFDQN
}
2017-05-16 12:13:49 +02:00
if ( -not $LastExitCode -eq 0 ) {
Write-Host " Login failed " -ForegroundColor Red
exit
}
2018-05-18 13:03:31 -07:00
# Try to delete the Docker registry key secret
ExecKube -cmd 'delete secret docker-registry registry-key'
# Create the Docker registry key secret
2017-05-16 12:13:49 +02:00
ExecKube -cmd ' create secret docker-registry registry-key `
2017-06-30 16:16:00 +02:00
- -docker -server = $registryFDQN `
2017-02-16 10:49:58 -08:00
- -docker -username = $dockerUser `
- -docker -password = $dockerPassword `
2017-05-16 12:13:49 +02:00
- -docker -email = not @used . com '
}
2017-02-16 10:49:58 -08:00
2017-05-16 12:13:49 +02:00
# Removing previous services & deployments
Write-Host " Removing existing services & deployments.. " -ForegroundColor Yellow
2017-05-25 09:24:37 +02:00
ExecKube -cmd 'delete deployments --all'
ExecKube -cmd 'delete services --all'
2018-03-14 18:25:26 +01:00
ExecKube -cmd 'delete configmap internalurls'
2017-05-16 12:13:49 +02:00
ExecKube -cmd 'delete configmap urls'
2017-06-16 17:40:27 +02:00
ExecKube -cmd 'delete configmap externalcfg'
2018-01-11 18:18:16 +01:00
ExecKube -cmd 'delete configmap ocelot'
2017-02-16 10:49:58 -08:00
2017-12-11 11:59:30 +01:00
# start sql, rabbitmq, frontend deployments
2017-06-16 20:44:11 +02:00
if ( $deployInfrastructure ) {
2017-09-18 18:23:49 -07:00
Write-Host 'Deploying infrastructure deployments (databases, redis, RabbitMQ...)' -ForegroundColor Yellow
2017-06-16 20:44:11 +02:00
ExecKube -cmd 'create -f sql-data.yaml -f basket-data.yaml -f keystore-data.yaml -f rabbitmq.yaml -f nosql-data.yaml'
}
2017-02-16 10:49:58 -08:00
2018-01-11 18:18:16 +01:00
Write-Host 'Deploying ocelot APIGW' -ForegroundColor Yellow
2018-03-14 18:25:26 +01:00
ExecKube " create configmap ocelot --from-file=mm=ocelot/configuration-mobile-marketing.json --from-file=ms=ocelot/configuration-mobile-shopping.json --from-file=wm=ocelot/configuration-web-marketing.json --from-file=ws=ocelot/configuration-web-shopping.json "
2018-01-11 18:18:16 +01:00
ExecKube -cmd " apply -f ocelot/deployment.yaml "
ExecKube -cmd " apply -f ocelot/service.yaml "
2018-01-10 12:48:23 +01:00
Write-Host 'Deploying code deployments (Web APIs, Web apps, ...)' -ForegroundColor Yellow
ExecKube -cmd 'create -f services.yaml'
2017-02-16 10:49:58 -08:00
2018-03-14 18:25:26 +01:00
ExecKube -cmd 'create -f internalurls.yaml'
2017-05-16 12:13:49 +02:00
ExecKube -cmd ' create configmap urls `
2018-03-14 18:25:26 +01:00
- -from -literal = PicBaseUrl = http : / / $ ( $externalDns ) / webshoppingapigw / api / v1 / c / catalog / items / [ 0 ] / pic / `
- -from -literal = Marketing_PicBaseUrl = http : / / $ ( $externalDns ) / webmarketingapigw / api / v1 / m / campaigns / [ 0 ] / pic / `
- -from -literal = mvc_e = http : / / $ ( $externalDns ) / webmvc `
- -from -literal = marketingapigw_e = http : / / $ ( $externalDns ) / webmarketingapigw `
- -from -literal = webshoppingapigw_e = http : / / $ ( $externalDns ) / webshoppingapigw `
- -from -literal = mobileshoppingagg_e = http : / / $ ( $externalDns ) / mobileshoppingagg `
- -from -literal = webshoppingagg_e = http : / / $ ( $externalDns ) / webshoppingagg `
- -from -literal = identity_e = http : / / $ ( $externalDns ) / identity `
- -from -literal = spa_e = http : / / $ ( $externalDns ) `
- -from -literal = locations_e = http : / / $ ( $externalDns ) / locations-api `
- -from -literal = marketing_e = http : / / $ ( $externalDns ) / marketing-api `
- -from -literal = basket_e = http : / / $ ( $externalDns ) / basket-api `
2018-03-21 18:27:53 +01:00
- -from -literal = ordering_e = http : / / $ ( $externalDns ) / ordering-api `
- -from -literal = xamarin_callback_e = http : / / $ ( $externalDns ) / xamarincallback '
2017-07-31 14:14:52 +02:00
2017-05-16 12:13:49 +02:00
ExecKube -cmd 'label configmap urls app=eshop'
2017-02-16 10:49:58 -08:00
2017-07-03 16:57:10 +02:00
Write-Host " Deploying configuration from $configFile " -ForegroundColor Yellow
ExecKube -cmd " create -f $configFile "
2017-06-16 17:40:27 +02:00
2017-05-24 17:32:39 +02:00
Write-Host " Creating deployments... " -ForegroundColor Yellow
2017-05-16 12:13:49 +02:00
ExecKube -cmd 'create -f deployments.yaml'
2017-06-20 16:47:42 +02:00
# update deployments with the correct image (with tag and/or registry)
$registryPath = " "
if ( -not [ string ] :: IsNullOrEmpty ( $registry ) ) {
$registryPath = " $registry / "
2017-05-16 12:13:49 +02:00
}
2017-06-30 16:16:00 +02:00
Write-Host " Update Image containers to use prefix ' $registry $dockerOrg ' and tag ' $imageTag ' " -ForegroundColor Yellow
ExecKube -cmd 'set image deployments/basket basket=${registryPath}${dockerOrg}/basket.api:$imageTag'
ExecKube -cmd 'set image deployments/catalog catalog=${registryPath}${dockerOrg}/catalog.api:$imageTag'
ExecKube -cmd 'set image deployments/identity identity=${registryPath}${dockerOrg}/identity.api:$imageTag'
ExecKube -cmd 'set image deployments/ordering ordering=${registryPath}${dockerOrg}/ordering.api:$imageTag'
2018-04-16 19:28:12 +02:00
ExecKube -cmd 'set image deployments/ordering-backgroundtasks ordering-backgroundtasks=${registryPath}${dockerOrg}/ordering.backgroundtasks:$imageTag'
2017-06-30 16:16:00 +02:00
ExecKube -cmd 'set image deployments/marketing marketing=${registryPath}${dockerOrg}/marketing.api:$imageTag'
ExecKube -cmd 'set image deployments/locations locations=${registryPath}${dockerOrg}/locations.api:$imageTag'
ExecKube -cmd 'set image deployments/payment payment=${registryPath}${dockerOrg}/payment.api:$imageTag'
ExecKube -cmd 'set image deployments/webmvc webmvc=${registryPath}${dockerOrg}/webmvc:$imageTag'
ExecKube -cmd 'set image deployments/webstatus webstatus=${registryPath}${dockerOrg}/webstatus:$imageTag'
ExecKube -cmd 'set image deployments/webspa webspa=${registryPath}${dockerOrg}/webspa:$imageTag'
2018-04-19 17:21:26 +02:00
ExecKube -cmd 'set image deployments/ordering-signalrhub ordering-signalrhub=${registryPath}${dockerOrg}/ordering.signalrhub:$imageTag'
2018-03-14 18:25:26 +01:00
ExecKube -cmd 'set image deployments/mobileshoppingagg mobileshoppingagg=${registryPath}${dockerOrg}/mobileshoppingagg:$imageTag'
ExecKube -cmd 'set image deployments/webshoppingagg webshoppingagg=${registryPath}${dockerOrg}/webshoppingagg:$imageTag'
2018-04-04 16:25:13 +02:00
ExecKube -cmd 'set image deployments/apigwmm apigwmm=${registryPath}${dockerOrg}/ocelotapigw:$imageTag'
ExecKube -cmd 'set image deployments/apigwms apigwms=${registryPath}${dockerOrg}/ocelotapigw:$imageTag'
ExecKube -cmd 'set image deployments/apigwwm apigwwm=${registryPath}${dockerOrg}/ocelotapigw:$imageTag'
ExecKube -cmd 'set image deployments/apigwws apigwws=${registryPath}${dockerOrg}/ocelotapigw:$imageTag'
2017-06-20 16:47:42 +02:00
2017-05-25 09:24:37 +02:00
Write-Host " Execute rollout... " -ForegroundColor Yellow
ExecKube -cmd 'rollout resume deployments/basket'
ExecKube -cmd 'rollout resume deployments/catalog'
ExecKube -cmd 'rollout resume deployments/identity'
ExecKube -cmd 'rollout resume deployments/ordering'
2018-04-16 19:28:12 +02:00
ExecKube -cmd 'rollout resume deployments/ordering-backgroundtasks'
2017-06-19 19:01:00 +02:00
ExecKube -cmd 'rollout resume deployments/marketing'
ExecKube -cmd 'rollout resume deployments/locations'
ExecKube -cmd 'rollout resume deployments/payment'
2017-05-25 09:24:37 +02:00
ExecKube -cmd 'rollout resume deployments/webmvc'
ExecKube -cmd 'rollout resume deployments/webstatus'
ExecKube -cmd 'rollout resume deployments/webspa'
2018-03-14 18:25:26 +01:00
ExecKube -cmd 'rollout resume deployments/mobileshoppingagg'
ExecKube -cmd 'rollout resume deployments/webshoppingagg'
ExecKube -cmd 'rollout resume deployments/apigwmm'
ExecKube -cmd 'rollout resume deployments/apigwms'
ExecKube -cmd 'rollout resume deployments/apigwwm'
ExecKube -cmd 'rollout resume deployments/apigwws'
2018-04-19 17:21:26 +02:00
ExecKube -cmd 'rollout resume deployments/ordering-signalrhub'
2017-02-16 10:49:58 -08:00
2017-07-05 16:01:14 +02:00
Write-Host " WebSPA is exposed at http:// $externalDns , WebMVC at http:// $externalDns /webmvc, WebStatus at http:// $externalDns /webstatus " -ForegroundColor Yellow
2017-05-19 17:19:29 -07:00