k8s.mk 1.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
# Deployment with Kubernetes

# KUBE_CA_PEM_FILE is the path of a certificate file. It automatically set by GitLab
# if you enable Kubernetes integration in a project.
#
# As of this writing, Kubernetes integration can not be set on a group level, so it has to
# be manually set in every project.
# Alternatively, we use a custom KUBE_CA_BUNDLE environment variable, which can be set at
# the group level. In this case, the variable contains the whole content of the certificate,
# which we dump to a temporary file
#
# Check if the KUBE_CA_PEM_FILE exists. Otherwise, create it from KUBE_CA_BUNDLE
KUBE_CA_TEMP=false
ifeq ($(wildcard $(KUBE_CA_PEM_FILE)),) 
	KUBE_CA_PEM_FILE:="$$PWD/.ca.crt"
	CREATED:=$(shell echo -e "$$KUBE_CA_BUNDLE" > $(KUBE_CA_PEM_FILE))
endif 
KUBE_URL?=""
KUBE_TOKEN?=""
KUBE_NAMESPACE?=$(NAME)
KUBECTL=docker run --rm -v $(KUBE_CA_PEM_FILE):/tmp/ca.pem -i lachlanevenson/k8s-kubectl --server="$(KUBE_URL)" --token="$(KUBE_TOKEN)" --certificate-authority="/tmp/ca.pem" -n $(KUBE_NAMESPACE)
CI_COMMIT_REF_NAME?=master

info: ## Print variables. Useful for debugging.
	@echo "#KUBERNETES"
	@echo KUBE_URL=$(KUBE_URL)
	@echo KUBE_CA_PEM_FILE=$(KUBE_CA_PEM_FILE)
	@echo KUBE_CA_BUNDLE=$$KUBE_CA_BUNDLE
	@echo KUBE_TOKEN=$(KUBE_TOKEN)
	@echo KUBE_NAMESPACE=$(KUBE_NAMESPACE)
	@echo KUBECTL=$(KUBECTL)

	@echo "#CI"
	@echo CI_PROJECT_NAME=$(CI_PROJECT_NAME)
	@echo CI_REGISTRY=$(CI_REGISTRY)
	@echo CI_REGISTRY_USER=$(CI_REGISTRY_USER)
	@echo CI_COMMIT_REF_NAME=$(CI_COMMIT_REF_NAME)

#
# Deployment and advanced features
# 


deploy: ## Deploy to kubernetes using the credentials in KUBE_CA_PEM_FILE (or KUBE_CA_BUNDLE ) and TOKEN
	@cat k8s/{*.yaml,*.yml,*.tmpl} | envsubst | $(KUBECTL) apply -f -

deploy-check: ## Get the deployed configuration.
	@$(KUBECTL) get deploy,pods,svc,ingress

.PHONY:: info deploy deploy-check