22 [parameter (Mandatory = $false )][string ]$registry ,
33 [parameter (Mandatory = $false )][string ]$dockerUser ,
44 [parameter (Mandatory = $false )][string ]$dockerPassword ,
5- [parameter (Mandatory = $false )][bool ]$deployCI ,
6- [parameter (Mandatory = $false )][bool ]$useDockerHub ,
75 [parameter (Mandatory = $false )][string ]$execPath ,
86 [parameter (Mandatory = $false )][string ]$kubeconfigPath ,
97 [parameter (Mandatory = $true )][string ]$configFile ,
108 [parameter (Mandatory = $false )][string ]$imageTag ,
9+ [parameter (Mandatory = $false )][string ]$externalDns ,
10+ [parameter (Mandatory = $false )][bool ]$deployCI = $false ,
11+ [parameter (Mandatory = $false )][bool ]$buildImages = $false ,
1112 [parameter (Mandatory = $false )][bool ]$deployInfrastructure = $true
1213)
1314
14- $debugMode = $PSCmdlet.MyInvocation.BoundParameters [" Debug" ].IsPresent
15- if ([string ]::IsNullOrEmpty($imageTag )) {
16- $imageTag = $ (git rev- parse -- abbrev- ref HEAD)
17- }
18-
19- Write-Host " Docker image Tag: $imageTag " - ForegroundColor Yellow
20-
2115function ExecKube ($cmd ) {
2216 if ($deployCI ) {
2317 $kubeconfig = $kubeconfigPath + ' config' ;
@@ -30,20 +24,11 @@ function ExecKube($cmd) {
3024 }
3125}
3226
27+ # Initialization
28+ $debugMode = $PSCmdlet.MyInvocation.BoundParameters [" Debug" ].IsPresent
29+ $useDockerHub = [string ]::IsNullOrEmpty($registry )
3330
34- $config = Get-Content - Raw - Path $configFile | ConvertFrom-Json
35-
36- if ($debugMode ) {
37- Write-Host " Using following JSON config: " - ForegroundColor Yellow
38- $json = ConvertTo-Json $config - Depth 5
39- Write-Host $json
40- Write-Host " Press a key " - ForegroundColor Yellow
41- [System.Console ]::Read()
42- }
43-
44-
45-
46- # Not used when deploying through CI VSTS
31+ # Check required commands (only if not in CI environment)
4732if (-not $deployCI ) {
4833 $requiredCommands = (" docker" , " docker-compose" , " kubectl" )
4934 foreach ($command in $requiredCommands ) {
@@ -53,6 +38,45 @@ if(-not $deployCI) {
5338 }
5439 }
5540}
41+ else {
42+ $buildImages = false; # Never build images through CI, as they previously built
43+ }
44+
45+ # Get tag to use from current branch if no tag is passed
46+ if ([string ]::IsNullOrEmpty($imageTag )) {
47+ $imageTag = $ (git rev- parse -- abbrev- ref HEAD)
48+ }
49+ Write-Host " Docker image Tag: $imageTag " - ForegroundColor Yellow
50+
51+ # Read config to use
52+ $config = Get-Content - Raw - Path $configFile | ConvertFrom-Json
53+ if ($debugMode ) {
54+ Write-Host " [DEBUG]: Using following JSON config: " - ForegroundColor Yellow
55+ $json = ConvertTo-Json $config - Depth 5
56+ Write-Host $json
57+ if (-not $deployCI ) {
58+ Write-Host " [DEBUG]: Press a key " - ForegroundColor Yellow
59+ [System.Console ]::Read()
60+ }
61+ }
62+
63+ # building and publishing docker images if needed
64+ if ($buildImages ) {
65+ Write-Host " Building and publishing eShopOnContainers..." - ForegroundColor Yellow
66+ dotnet restore ../ eShopOnContainers- ServicesAndWebApps.sln
67+ dotnet publish - c Release - o obj/ Docker/ publish ../ eShopOnContainers- ServicesAndWebApps.sln
68+
69+ Write-Host " Building Docker images tagged with '$imageTag '" - ForegroundColor Yellow
70+ $env: TAG = $imageTag
71+ docker- compose - p .. -f ../ docker- compose.yml build
72+
73+ Write-Host " Pushing images to $registry ..." - ForegroundColor Yellow
74+ $services = (" basket.api" , " catalog.api" , " identity.api" , " ordering.api" , " marketing.api" , " payment.api" , " locations.api" , " webmvc" , " webspa" , " webstatus" )
75+ foreach ($service in $services ) {
76+ docker tag eshop/ ${service} :$imageTag $registry / eshop/ ${service} :$imageTag
77+ docker push $registry / eshop/ ${service} :$imageTag
78+ }
79+ }
5680
5781# Use ACR instead of DockerHub as image repository
5882if (-not $useDockerHub ) {
@@ -91,32 +115,19 @@ if ($deployInfrastructure) {
91115Write-Host ' Deploying code deployments (databases, redis, ...)' - ForegroundColor Yellow
92116ExecKube - cmd ' create -f services.yaml -f frontend.yaml'
93117
94- # building and publishing docker images not necessary when deploying through CI VSTS
95- if (-not $deployCI ) {
96- Write-Host " Building and publishing eShopOnContainers..." - ForegroundColor Yellow
97- dotnet restore ../ eShopOnContainers- ServicesAndWebApps.sln
98- dotnet publish - c Release - o obj/ Docker/ publish ../ eShopOnContainers- ServicesAndWebApps.sln
99-
100- Write-Host " Building Docker images." - ForegroundColor Yellow
101- $env: TAG = $imageTag
102- docker- compose - p .. -f ../ docker- compose.yml build
103-
104- Write-Host " Pushing images to $registry ..." - ForegroundColor Yellow
105- $services = (" basket.api" , " catalog.api" , " identity.api" , " ordering.api" , " marketing.api" , " payment.api" , " locations.api" , " webmvc" , " webspa" , " webstatus" )
106- foreach ($service in $services ) {
107- docker tag eshop/ ${service} :$imageTag $registry / eshop/ ${service} :$imageTag
108- docker push $registry / eshop/ ${service} :$imageTag
109- }
118+ if ([string ]::IsNullOrEmpty($externalDns )) {
119+ Write-Host " Waiting for frontend's external ip..." - ForegroundColor Yellow
120+ while ($true ) {
121+ $frontendUrl = & ExecKube - cmd ' get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"'
122+ if ([bool ]($frontendUrl -as [ipaddress ])) {
123+ break
124+ }
125+ Start-Sleep - s 15
126+ }
127+ $externalDns = $frontendUrl
110128}
111129
112- Write-Host " Waiting for frontend's external ip..." - ForegroundColor Yellow
113- while ($true ) {
114- $frontendUrl = & ExecKube - cmd ' get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}"'
115- if ([bool ]($frontendUrl -as [ipaddress ])) {
116- break
117- }
118- Start-Sleep - s 15
119- }
130+ Write-Host " Using $externalDns as the external DNS/IP of the k8s cluster"
120131
121132ExecKube - cmd ' create configmap urls `
122133 --from-literal=BasketUrl=http://basket `
@@ -133,11 +144,11 @@ ExecKube -cmd 'create configmap urls `
133144 --from-literal=MvcClientCatalogUrl=http://catalog `
134145 --from-literal=MvcClientBasketUrl=http://basket `
135146 --from-literal=WebSpaHealthCheckUrl=http://webspa/hc `
136- --from-literal=SpaClientOrderingExternalUrl=http://$($frontendUrl )/ordering-api `
137- --from-literal=SpaClientCatalogExternalUrl=http://$($frontendUrl )/catalog-api `
138- --from-literal=SpaClientBasketExternalUrl=http://$($frontendUrl )/basket-api `
139- --from-literal=SpaClientIdentityExternalUrl=http://$($frontendUrl )/identity `
140- --from-literal=SpaClientExternalUrl=http://$($frontendUrl )'
147+ --from-literal=SpaClientOrderingExternalUrl=http://$($externalDns )/ordering-api `
148+ --from-literal=SpaClientCatalogExternalUrl=http://$($externalDns )/catalog-api `
149+ --from-literal=SpaClientBasketExternalUrl=http://$($externalDns )/basket-api `
150+ --from-literal=SpaClientIdentityExternalUrl=http://$($externalDns )/identity `
151+ --from-literal=SpaClientExternalUrl=http://$($externalDns )'
141152
142153ExecKube - cmd ' label configmap urls app=eshop'
143154
@@ -161,31 +172,29 @@ ExecKube -cmd 'create configmap externalcfg `
161172 --from-literal=PaymentBus=$($config.servicebus.payment) `
162173 --from-literal=UseAzureServiceBus=$($config.servicebus.use_azure) `
163174 --from-literal=keystore=$($config.redis.keystore) '
164-
165175ExecKube - cmd ' label configmap externalcfg app=eshop'
166176
167-
168177Write-Host " Creating deployments..." - ForegroundColor Yellow
169-
170178ExecKube - cmd ' create -f deployments.yaml'
171179
172- # not using ACR for pulling images when deploying through CI VSTS
173- if (-not $deployCI ) {
174- # update deployments with the private registry before k8s tries to pull images
175- # (deployment templating, or Helm, would obviate this)
176- Write-Host " Update Image containers..." - ForegroundColor Yellow
177- ExecKube - cmd ' set image deployments/basket basket=$registry/eshop/basket.api:$imageTag'
178- ExecKube - cmd ' set image deployments/catalog catalog=$registry/eshop/catalog.api:$imageTag'
179- ExecKube - cmd ' set image deployments/identity identity=$registry/eshop/identity.api:$imageTag'
180- ExecKube - cmd ' set image deployments/ordering ordering=$registry/eshop/ordering.api:$imageTag'
181- ExecKube - cmd ' set image deployments/marketing marketing=$registry/eshop/marketing.api:$imageTag'
182- ExecKube - cmd ' set image deployments/locations locations=$registry/eshop/locations.api:$imageTag'
183- ExecKube - cmd ' set image deployments/payment payment=$registry/eshop/payment.api:$imageTag'
184- ExecKube - cmd ' set image deployments/webmvc webmvc=$registry/eshop/webmvc:$imageTag'
185- ExecKube - cmd ' set image deployments/webstatus webstatus=$registry/eshop/webstatus:$imageTag'
186- ExecKube - cmd ' set image deployments/webspa webspa=$registry/eshop/webspa:$imageTag'
180+ # update deployments with the correct image (with tag and/or registry)
181+ Write-Host " Update Image containers to use prefix '$registry ' and tag '$imageTag '" - ForegroundColor Yellow
182+ $registryPath = " "
183+ if (-not [string ]::IsNullOrEmpty($registry )) {
184+ $registryPath = " $registry /"
187185}
188186
187+ ExecKube - cmd ' set image deployments/basket basket=${registryPath}eshop/basket.api:$imageTag'
188+ ExecKube - cmd ' set image deployments/catalog catalog=${registryPath}eshop/catalog.api:$imageTag'
189+ ExecKube - cmd ' set image deployments/identity identity=${registryPath}eshop/identity.api:$imageTag'
190+ ExecKube - cmd ' set image deployments/ordering ordering=${registryPath}eshop/ordering.api:$imageTag'
191+ ExecKube - cmd ' set image deployments/marketing marketing=${registryPath}eshop/marketing.api:$imageTag'
192+ ExecKube - cmd ' set image deployments/locations locations=${registryPath}eshop/locations.api:$imageTag'
193+ ExecKube - cmd ' set image deployments/payment payment=${registryPath}eshop/payment.api:$imageTag'
194+ ExecKube - cmd ' set image deployments/webmvc webmvc=${registryPath}eshop/webmvc:$imageTag'
195+ ExecKube - cmd ' set image deployments/webstatus webstatus=${registryPath}eshop/webstatus:$imageTag'
196+ ExecKube - cmd ' set image deployments/webspa webspa=${registryPath}eshop/webspa:$imageTag'
197+
189198Write-Host " Execute rollout..." - ForegroundColor Yellow
190199ExecKube - cmd ' rollout resume deployments/basket'
191200ExecKube - cmd ' rollout resume deployments/catalog'
0 commit comments