Compare commits

..

1 commit

10 changed files with 64 additions and 110 deletions

View file

@ -39,19 +39,17 @@ prerequisites:
ifdef DEPLOY_CLEANUP ifdef DEPLOY_CLEANUP
cleanup: cleanup:
@- echo "\n### cleanup ..." @- echo "\n### cleanup ..."
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \
scp cleanup.sh $(SSH_USER)@$(host):/$(DEPLOY_PATH)/$(DEPLOY_NAME); \ scp cleanup.sh $(SSH_USER)@$(host):/$(DEPLOY_PATH)/$(DEPLOY_NAME); \
if [ -e cleanup.sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh cleanup.sh $(host)"; fi; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh cleanup.sh $(host)"; \
) )
endif endif
prepare: prepare:
@- echo "\n### preparing ..." @- echo "\n### preparing ..."
@- chmod 600 secrets.mk @- chmod 600 secrets.mk
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH); mkdir $(DEPLOY_NAME)"; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH); if [ ! -d $(DEPLOY_NAME) ] ; then mkdir $(DEPLOY_NAME); fi"; \
) )
build: build:
@ -73,28 +71,23 @@ endif
pre-deploy: pre-deploy:
ifdef DEPLOY_HOSTS ifdef DEPLOY_HOSTS
@- echo "\n### running pre-deploy script(s)" @- echo "\n### running pre-deploy script(s)"
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh pre-deploy.sh $(host); sh pre-deploy_$(host).sh"; \
if [ -e pre-deploy.sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh pre-deploy.sh $(host)"; fi; \
if [ -e pre-deploy_$(host).sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh pre-deploy_$(host).sh"; fi; \
) )
endif endif
post-deploy: post-deploy:
ifdef DEPLOY_HOSTS ifdef DEPLOY_HOSTS
@- echo "\n### running post-deploy script(s)" @- echo "\n### running post-deploy script(s)"
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh post-deploy.sh $(host); sh post-deploy_$(host).sh"; \
if [ -e post-deploy.sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh post-deploy.sh $(host)"; fi; \
if [ -e post-deploy_$(host).sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh post-deploy_$(host).sh"; fi; \
) )
endif endif
pre-local: pre-local:
ifneq (,$(wildcard pre-local.sh)) ifneq (,$(wildcard pre-local.sh))
@- echo "\n### running pre-local script" @- echo "\n### running pre-local script"
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \
./pre-local.sh $(host); \ ./pre-local.sh $(host); \
) )
else else
@ -104,8 +97,7 @@ endif
post-local: post-local:
ifneq (,$(wildcard post-local.sh)) ifneq (,$(wildcard post-local.sh))
@- echo "\n### running post-local script" @- echo "\n### running post-local script"
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \
./post-local.sh $(host); \ ./post-local.sh $(host); \
) )
else else
@ -115,17 +107,16 @@ endif
upload: upload:
ifdef DEPLOY_HOSTS ifdef DEPLOY_HOSTS
@- echo "\n### uploading files" @- echo "\n### uploading files"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ ssh $(SSH_USER)@$(host) "mkdir -p $(DEPLOY_PATH)/$(DEPLOY_NAME)"; \
ssh $(SSH_USER)@$(host) "if [ ! -d $(DEPLOY_PATH)/$(DEPLOY_NAME) ]; then mkdir -p $(DEPLOY_PATH)/$(DEPLOY_NAME); fi"; \ rsync_xtra=`cat .rsync`; \
if [ -r .rsync ] ; then rsync_xtra=`cat .rsync`; fi; \ rsync_xtra_host=`cat .rsync_$(host)`; \
if [ -r .rsync_$(host) ] ; then rsync_xtra_host=`cat .rsync_$(host)`; fi; \
param="-ravv"; \ param="-ravv"; \
param="$$param $$rsync_xtra"; \ param="$$param $$rsync_xtra"; \
param="$$param $$rsync_xtra_host"; \ param="$$param $$rsync_xtra_host"; \
param="$$param --exclude '*~' --exclude '.git*' --exclude '*.swp' . $(SSH_USER)@$(host):$(DEPLOY_PATH)/$(DEPLOY_NAME)"; \ param="$$param --exclude '*~' --exclude '.git*' --exclude '*.swp' . $(SSH_USER)@$(host):$(DEPLOY_PATH)/$(DEPLOY_NAME)"; \
eval rsync $$param; \ eval rsync $$param; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); if [ -e .env ]; then chmod o-r .env ; fi; if [ -e secrets.mk ]; then chmod o-r secrets.mk; fi; if [ -e secrets.yaml ]; then chmod o-r secrets.yaml; fi"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME) && chmod o-r .env secrets*"; \
) )
endif endif
@ -152,9 +143,9 @@ restart: restart-$(DEPLOY_TYPE)
reload: reload:
ifneq (,$(wildcard reload.sh)) ifneq (,$(wildcard reload.sh))
@- echo "\n### reloading ..." @- echo "\n### reloading ..."
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "### reloading service on $(host)"; \ echo "### reloading service on $(host)"; \
if [ -e reload.sh ]; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); ./reload.sh"; fi; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); ./reload.sh"; \
) )
else else
@- echo "\n### no reload script found" @- echo "\n### no reload script found"

View file

@ -8,7 +8,7 @@ A simple Makefile based deployment system.
1. Clone **make-deploy** as a submodule into your repository: 1. Clone **make-deploy** as a submodule into your repository:
$ git submodule add https://git.dnix.de/dnix/make-deploy $ git submodule add https://git.chefkoch.net/pub/make-deploy
2. Create a symlink to the Makefile: 2. Create a symlink to the Makefile:

9
apt.mk
View file

@ -5,11 +5,8 @@ pull-apt:
start-apt: start-apt:
@- echo "\n### start" @- echo "\n### start"
@ $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ echo "$(host)"; \
set -e; \ ssh $(SSH_USER)@$(host) "sudo apt install -y $(APT_PACKAGES); sh start.sh"; \
ssh $(SSH_USER)@$(host) "sudo apt install -y $(APT_PACKAGES)"; \
if [ -e start.sh ]; then ssh $(SSH_USER)@$(host) "sh start.sh"; fi; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )

View file

@ -5,13 +5,13 @@ DOCKER_LOGIN = 0
endif endif
pull-compose-file: pull-compose-file:
@ echo "\n### pulling image(s)" @- echo "\n### pulling image(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ echo "$(host)"; \
if test "$(DOCKER_LOGIN)" -eq 1 ; \ if test $(DOCKER_LOGIN) -eq 1 ; \
then \ then \
echo "\n#### perform docker login with user $(DOCKER_USER) on $(DOCKER_REGISTRY)"; \ echo "\n#### perfom docker login with user $(DOCKER_USER) on $(DOCKER_REGISTRY)"; \
ssh $(SSH_USER)@$(host) "echo $(DOCKER_PASS) | docker login -u $(DOCKER_USER) --password-stdin $(DOCKER_REGISTRY)"; \ ssh $(SSH_USER)@$(host) "docker login -u $(DOCKER_USER) -p $(DOCKER_PASS) $(DOCKER_REGISTRY)"; \
fi; \ fi; \
if test -n "$(DOCKER_IMAGE)" ; \ if test -n "$(DOCKER_IMAGE)" ; \
then \ then \
@ -20,33 +20,27 @@ pull-compose-file:
) )
start-compose-file: start-compose-file:
@ echo "\n### starting service(s)" @- echo "\n### starting service(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) up -d"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) up -d"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )
stop-compose-file: stop-compose-file:
@echo "\n### stopping service(s)" @- echo "\n### stopping service(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) down"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) down"; \
set +e; \
) )
logs-compose-file: logs-compose-file:
@ echo "\n### logs" @- echo "\n### logs"
@ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) logs -f $(service)" @- ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) logs -f $(service)"
restart-compose-file: restart-compose-file:
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) restart"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose -f $(DEPLOY_COMPOSE_FILE) -p $(DEPLOY_COMPOSE_PROJECT) restart"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )

View file

@ -7,13 +7,13 @@ DOCKER_LOGIN = 0
endif endif
pull-compose: pull-compose:
@echo "\n### pulling image(s)" @- echo "\n### pulling image(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ echo "$(host)"; \
if test "$(DOCKER_LOGIN)" -eq 1 ; \ if test "$(DOCKER_LOGIN)" = "1" ; \
then \ then \
echo "\n#### perform docker login with user $(DOCKER_USER) on $(DOCKER_REGISTRY)"; \ echo "\n#### perform docker login with user $(DOCKER_USER) on $(DOCKER_REGISTRY)"; \
ssh $(SSH_USER)@$(host) "echo $(DOCKER_PASS) | docker login -u $(DOCKER_USER) --password-stdin $(DOCKER_REGISTRY)"; \ ssh $(SSH_USER)@$(host) "docker login -u $(DOCKER_USER) -p $(DOCKER_PASS) $(DOCKER_REGISTRY)"; \
fi; \ fi; \
if test -n "$(DOCKER_IMAGE)" ; \ if test -n "$(DOCKER_IMAGE)" ; \
then \ then \
@ -22,30 +22,24 @@ pull-compose:
) )
start-compose: start-compose:
@echo "\n### starting service(s)" @- echo "\n### starting service(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose up -d"; \ ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose up -d"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )
logs-compose: logs-compose:
@echo "\n### logs" @- echo "\n### logs"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose logs -f $(service)"; \ ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose logs -f $(service)"; \
set +e; \
) )
restart-compose: restart-compose:
@echo "\n### restarting service(s)" @- echo "\n### restarting service(s)"
@$(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
set -e; \ echo "$(host)"; \
echo "#host: $(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose restart"; \ ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose restart"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )

View file

@ -4,19 +4,15 @@ start-cron:
@- echo "\n### starting..." @- echo "\n### starting..."
@- $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "$(host)"; \ echo "$(host)"; \
set -e; \
ssh $(SSH_USER)@$(host) "sudo -u $(CRON_USER) sh -c 'crontab -l | sed \"/^#make-deploy-cron:$(DEPLOY_NAME)/,+1 d\" | { cat; echo \"#make-deploy-cron:$(DEPLOY_NAME)\"; cat \"$(DEPLOY_PATH)/$(DEPLOY_NAME)/crontab\"; } | crontab -'"; \ ssh $(SSH_USER)@$(host) "sudo -u $(CRON_USER) sh -c 'crontab -l | sed \"/^#make-deploy-cron:$(DEPLOY_NAME)/,+1 d\" | { cat; echo \"#make-deploy-cron:$(DEPLOY_NAME)\"; cat \"$(DEPLOY_PATH)/$(DEPLOY_NAME)/crontab\"; } | crontab -'"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )
stop-cron: stop-cron:
@- echo "\n### stopping ..." @- echo "\n### stopping ..."
@- $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "$(host)"; \ echo "$(host)"; \
set -e; \
ssh $(SSH_USER)@$(host) "sudo -u $(CRON_USER) sh -c 'crontab -l | sed \"/^#make-deploy-cron:$(DEPLOY_NAME)/,+1 d\" | crontab -'"; \ ssh $(SSH_USER)@$(host) "sudo -u $(CRON_USER) sh -c 'crontab -l | sed \"/^#make-deploy-cron:$(DEPLOY_NAME)/,+1 d\" | crontab -'"; \
set +e; \
) )
pull-cron: pull-cron:

25
helm.mk
View file

@ -23,21 +23,15 @@ ifdef HELM_REPO_URL
@- helm repo update $(HELM_CHART_NAME) @- helm repo update $(HELM_CHART_NAME)
endif endif
@ $(eval helm_params = $(HELM_CHART_NAME) $(HELM_CHART_PATH) -n $(K8S_NAMESPACE) --install --wait --values)
ifdef DEBUG_MODE ifdef DEBUG_MODE
@- echo "\n### deploying helm chart with --debug flag" @ $(eval helm_params = $(helm_params) --debug)
@- echo "-- DEBUG DEPLOYMENT --------------------" endif
@- echo " " ifdef K8S_KUBECONFIG
@- echo "Namespace: $(K8S_NAMESPACE)" @ $(eval helm_params = $(helm_params) --kubeconfig $(K8S_KUBECONFIG))
@- echo "Helm Chart: $(HELM_CHART_PATH)" endif
@- echo "Helm Version (use latest if empty): $(HELM_CHART_VERSION)" @ $(eval helm_params = $(helm_params) - --version $(HELM_CHART_VERSION))
@- echo "Values File: $(HELM_VALUES_FILE)"
@- echo " "
@- echo "----------------------------------"
@ envsubst < $(HELM_VALUES_FILE) | helm upgrade $(HELM_CHART_NAME) $(HELM_CHART_PATH) -n $(K8S_NAMESPACE) --install --debug --wait --values - --version "$(HELM_CHART_VERSION)"
else
@- echo "\n### deploying helm chart" @- echo "\n### deploying helm chart"
@- echo "-- DEPLOYMENT --------------------" @- echo "-- DEPLOYMENT --------------------"
@- echo " " @- echo " "
@ -48,10 +42,7 @@ else
@- echo " " @- echo " "
@- echo "----------------------------------" @- echo "----------------------------------"
@ envsubst < $(HELM_VALUES_FILE) | helm upgrade $(HELM_CHART_NAME) $(HELM_CHART_PATH) -n $(K8S_NAMESPACE) --install --wait --values - --version "$(HELM_CHART_VERSION)" envsubst < $(HELM_VALUES_FILE) | helm upgrade $(helm_params)
endif
pull-helm: pull-helm:
# nop # nop

9
k8s.mk
View file

@ -4,19 +4,14 @@
MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT
K8S_MANIFEST_FILENAME ?= kubernetes.yaml K8S_MANIFEST_FILENAME ?= kubernetes.yaml
ifneq ("$(wildcard secrets.yaml)","")
SECRETS="secrets.yaml"
else
SECRETS=""
endif
start-k8s: start-k8s:
@- echo "\n### starting deployment with k8s" @- echo "\n### starting deployment with k8s"
@- echo "\n### setting kubernetes context to $(K8S_CONTEXT)" @- echo "\n### setting kubernetes context to $(K8S_CONTEXT)"
@ kubectl config use-context $(K8S_CONTEXT) @ kubectl config use-context $(K8S_CONTEXT)
@- echo "\n### run kubectl apply -f $(K8S_MANIFEST_FILENAME) and if available secrets file $(SECRETS)" @- echo "\n### run kubectl apply -f $(K8S_MANIFEST_FILENAME) and secrets.yaml"
@ cat $(K8S_MANIFEST_FILENAME) $(SECRETS) | envsubst | kubectl apply $(K8S_ADDITIONAL_PARAMS) -f - @ cat $(K8S_MANIFEST_FILENAME) secrets.yaml | envsubst | kubectl apply $(K8S_ADDITIONAL_PARAMS) -f -
pull-k8s: pull-k8s:
# nop # nop

View file

@ -3,7 +3,7 @@
# this just rsyncs the stuff to the remote server(s) and runs # this just rsyncs the stuff to the remote server(s) and runs
# build.sh, pre-/post-deploy, pre-/post-local, start.sh, etc. # build.sh, pre-/post-deploy, pre-/post-local, start.sh, etc.
ifndef DEPLOY_START_DELAY ifndef DEPLOY_StART_DELAY
DEPLOY_START_DELAY = 0 DEPLOY_START_DELAY = 0
endif endif
@ -13,9 +13,7 @@ pull-simple:
start-simple: start-simple:
@- echo "\n### start" @- echo "\n### start"
@- $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "#host: $(host)"; \ echo "$(host)"; \
set -e; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh start.sh"; \
if [ -e start.sh ] ; then ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh start.sh"; fi; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
set +e; \
) )

View file

@ -4,9 +4,7 @@ start-swarm:
@- echo "\n### starting service(s)" @- echo "\n### starting service(s)"
@- $(foreach host,$(DEPLOY_HOSTS), \ @- $(foreach host,$(DEPLOY_HOSTS), \
echo "$(host)"; \ echo "$(host)"; \
set -e; \
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker stack deploy -c stack.yml $(DEPLOY_NAME)"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker stack deploy -c stack.yml $(DEPLOY_NAME)"; \
set +e; \
) )
stop-swarm: stop-swarm: