in src/actions/promote.ts [144:228]
async function promoteBlueGreen(
kubectl: Kubectl,
manifests: string[],
resourceType: ClusterType
) {
// update container images and pull secrets
const inputManifestFiles: string[] = updateManifestFiles(manifests)
const manifestObjects: BlueGreenManifests =
getManifestObjects(inputManifestFiles)
const routeStrategy = parseRouteStrategy(
core.getInput('route-method', {required: true})
)
core.startGroup('Deleting old deployment and making new stable deployment')
const {deployResult} = await (async () => {
switch (routeStrategy) {
case RouteStrategy.INGRESS:
return await promoteBlueGreenIngress(kubectl, manifestObjects)
case RouteStrategy.SMI:
return await promoteBlueGreenSMI(kubectl, manifestObjects)
default:
return await promoteBlueGreenService(kubectl, manifestObjects)
}
})()
core.endGroup()
// checking stability of newly created deployments
core.startGroup('Checking manifest stability')
const deployedManifestFiles = deployResult.manifestFiles
const resources: Resource[] = getResources(
deployedManifestFiles,
models.DEPLOYMENT_TYPES.concat([
models.DiscoveryAndLoadBalancerResource.SERVICE
])
)
await KubernetesManifestUtility.checkManifestStability(
kubectl,
resources,
resourceType
)
core.endGroup()
core.startGroup(
'Routing to new deployments and deleting old workloads and services'
)
if (routeStrategy == RouteStrategy.INGRESS) {
await routeBlueGreenIngressUnchanged(
kubectl,
manifestObjects.serviceNameMap,
manifestObjects.ingressEntityList
)
await deleteGreenObjects(
kubectl,
[].concat(
manifestObjects.deploymentEntityList,
manifestObjects.serviceEntityList
)
)
} else if (routeStrategy == RouteStrategy.SMI) {
await routeBlueGreenSMI(
kubectl,
NONE_LABEL_VALUE,
manifestObjects.serviceEntityList
)
await deleteGreenObjects(kubectl, manifestObjects.deploymentEntityList)
await cleanupSMI(kubectl, manifestObjects.serviceEntityList)
} else {
await routeBlueGreenService(
kubectl,
NONE_LABEL_VALUE,
manifestObjects.serviceEntityList
)
await deleteGreenObjects(kubectl, manifestObjects.deploymentEntityList)
}
core.endGroup()
// annotate resources
core.startGroup('Annotating resources')
await annotateAndLabelResources(deployedManifestFiles, kubectl, resources)
core.endGroup()
}