kubectl apply
command, because sometimes the deployment can fail or crash, so its best to add a rollout status in the steps. Example:
k8s-deployment.sh
#!/bin/bash
sed -i "s#replace#${imageName}#g" k8s_deployment_service.yaml
kubectl -n default get deployment ${deploymentName} > /dev/null
if [[ $? -ne 0 ]]; then
echo "Deployment ${deploymentName} does not exist"
kubectl -n default apply -f k8s_deployment_service.yaml
else
echo "Deployment exists, updating"
echo "image name: ${imageName}"
kubectl -n default set image deploy ${deploymentName} ${containerName}=${imageName} --record=true
fi
k8s-deployment-rollout-status.sh
#!/bin/bash
sleep 60s
# maximum timeout to consider a deployment is successful is 15s
if [[ $(kubectl -n default rollout status deploy ${deploymentName} --timeout 15s) != *"successfully rolled out"* ]];
then
echo "Deployment $deploymentName} Rollout has failed"
kubectl -n default rollout undo deploy ${deploymentName}
exit 1;
else
echo "Deployment ${deploymentName rollout is successful"
fi
Then include them as steps in the pipeline script of your CI/CD