Skip to content

Commit f17e350

Browse files
committed
Refactor and allow option to NOT build netcore projects when creating docker images
1 parent 30f7759 commit f17e350

1 file changed

Lines changed: 78 additions & 69 deletions

File tree

k8s/deploy.ps1

Lines changed: 78 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,16 @@ Param(
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-
2115
function 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)
4732
if(-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
5882
if(-not $useDockerHub) {
@@ -91,32 +115,19 @@ if ($deployInfrastructure) {
91115
Write-Host 'Deploying code deployments (databases, redis, ...)' -ForegroundColor Yellow
92116
ExecKube -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

121132
ExecKube -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

142153
ExecKube -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-
165175
ExecKube -cmd 'label configmap externalcfg app=eshop'
166176

167-
168177
Write-Host "Creating deployments..." -ForegroundColor Yellow
169-
170178
ExecKube -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+
189198
Write-Host "Execute rollout..." -ForegroundColor Yellow
190199
ExecKube -cmd 'rollout resume deployments/basket'
191200
ExecKube -cmd 'rollout resume deployments/catalog'

0 commit comments

Comments
 (0)