Compare commits
1 commit
master
...
more-tests
Author | SHA1 | Date | |
---|---|---|---|
e115a87ae5 |
16 changed files with 108 additions and 139 deletions
2
LICENSE
2
LICENSE
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
Copyright (c) 2022 Andreas Neue <an@dnix.de>
|
Copyright (c) 2022 Andreas Neue <an@dnix.de>
|
||||||
Copyright (c) 2022-25 the make-deploy authors (see CONTRIBUTORS)
|
Copyright (c) 2022-23 the make-deploy authors (see CONTRIBUTORS)
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
|
65
Makefile
65
Makefile
|
@ -1,7 +1,4 @@
|
||||||
DEPLOY_START_DELAY = 0
|
DEPLOY_START_DELAY = 0
|
||||||
DEPLOY_PROJECT_DIR =
|
|
||||||
|
|
||||||
MANDATORY = DEPLOY_NAME DEPLOY_HOSTS DEPLOY_PATH SSH_USER
|
|
||||||
|
|
||||||
-include secrets.mk
|
-include secrets.mk
|
||||||
include config.mk
|
include config.mk
|
||||||
|
@ -12,19 +9,20 @@ ifeq ($(DEPLOY_TYPE), copy)
|
||||||
DEPLOY_TYPE = simple
|
DEPLOY_TYPE = simple
|
||||||
endif
|
endif
|
||||||
|
|
||||||
project_dir = $(DEPLOY_PATH)/$(DEPLOY_NAME)$(DEPLOY_PROJECT_DIR)
|
|
||||||
|
|
||||||
include make-deploy/$(DEPLOY_TYPE).mk
|
include make-deploy/$(DEPLOY_TYPE).mk
|
||||||
|
|
||||||
.PHONY: self-update mandatory cleanup prerequisites prepare build test deploy pre-deploy post-deploy pre-local post-local upload pull start stop restart reload notify
|
.PHONY: self-update mandatory cleanup prerequisites prepare build test deploy pre-deploy post-deploy pre-local post-local upload pull start stop restart reload
|
||||||
|
|
||||||
self-update:
|
self-update:
|
||||||
@- git submodule update --remote
|
@- git submodule update --remote
|
||||||
|
|
||||||
deploy: mandatory cleanup prepare build test upload pre-deploy pre-local pull start notify post-local post-deploy reload
|
deploy: mandatory cleanup prepare build test upload pre-deploy pre-local pull start post-local post-deploy reload
|
||||||
|
|
||||||
mandatory:
|
mandatory:
|
||||||
@- echo "\n### mandatory check"
|
@- echo "\n### mandatory check"
|
||||||
|
ifndef MANDATORY-$(DEPLOY_TYPE)
|
||||||
|
$(error MANDATORY-$(DEPLOY_TYPE) is not defined)
|
||||||
|
endif
|
||||||
@ $(foreach var,$(MANDATORY), \
|
@ $(foreach var,$(MANDATORY), \
|
||||||
if test -z "${$(var)}"; then \
|
if test -z "${$(var)}"; then \
|
||||||
echo "Missing mandatory variable: $(var)"; \
|
echo "Missing mandatory variable: $(var)"; \
|
||||||
|
@ -39,19 +37,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 +69,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 +95,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 +105,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
|
||||||
|
|
||||||
|
@ -135,16 +124,6 @@ start: start-$(DEPLOY_TYPE)
|
||||||
|
|
||||||
stop: stop-$(DEPLOY_TYPE)
|
stop: stop-$(DEPLOY_TYPE)
|
||||||
|
|
||||||
notify:
|
|
||||||
ifdef DEPLOY_NOTIFY_HOSTS
|
|
||||||
ifdef DEPLOY_NOTIFY_MAIL
|
|
||||||
ifdef DEPLOY_NOTIFY_MSG
|
|
||||||
@- echo "\n### notify"
|
|
||||||
@- echo "$$DEPLOY_NOTIFY_MSG :: Please deploy manually on following hosts: $$DEPLOY_NOTIFY_HOSTS" | mail -s "make-deploy notification" $(DEPLOY_MAIL)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
logs: logs-$(DEPLOY_TYPE)
|
logs: logs-$(DEPLOY_TYPE)
|
||||||
|
|
||||||
restart: restart-$(DEPLOY_TYPE)
|
restart: restart-$(DEPLOY_TYPE)
|
||||||
|
@ -152,9 +131,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"
|
||||||
|
|
|
@ -2,13 +2,15 @@
|
||||||
|
|
||||||
A simple Makefile based deployment system.
|
A simple Makefile based deployment system.
|
||||||
|
|
||||||
|
**make-deploy** was initially hosted at https://git.dnix.de/an/make-deploy. Since it has become heavily used at chefkoch.de for system deployments, and lots of code is committed there, we moved the repo to https://git.chefkoch.net/pub/make-deploy. A mirror still exists at https://git.dnix.de/mirror/make-deploy.
|
||||||
|
|
||||||
**make-deploy** is licensed under the terms of the MIT-License. See [LICENSE](LICENSE) for info.
|
**make-deploy** is licensed under the terms of the MIT-License. See [LICENSE](LICENSE) for info.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
|
@ -22,7 +24,6 @@ Example `config.mk`:
|
||||||
DEPLOY_PATH = /srv
|
DEPLOY_PATH = /srv
|
||||||
DEPLOY_TYPE = compose
|
DEPLOY_TYPE = compose
|
||||||
DEPLOY_HOSTS = server01.example.com server02.example.com
|
DEPLOY_HOSTS = server01.example.com server02.example.com
|
||||||
DEPLOY_SUBPATH = my-sub-path
|
|
||||||
|
|
||||||
DOCKER_IMAGE = dr.example.com/my-project:latest
|
DOCKER_IMAGE = dr.example.com/my-project:latest
|
||||||
DOCKER_LOGIN = 1
|
DOCKER_LOGIN = 1
|
||||||
|
@ -35,8 +36,6 @@ Example `secrets.mk`:
|
||||||
DOCKER_USER = root
|
DOCKER_USER = root
|
||||||
DOCKER_PASS = secret1234
|
DOCKER_PASS = secret1234
|
||||||
|
|
||||||
`DEPLOY_SUBPATH` is used to define a location for `DEPLOY_TYPE` = compose that states where the docker-compose.yml is placed at. If that variable is undefined, it is expected to be in projects root.
|
|
||||||
|
|
||||||
By setting `DEPLOY_CONFIG_OVERRIDE`, an alternative config can be loaded to override existing configuration settings. This is useful in script calling make deploy or in a `.gitlab-ci.yml` in order to control settings for different targets.
|
By setting `DEPLOY_CONFIG_OVERRIDE`, an alternative config can be loaded to override existing configuration settings. This is useful in script calling make deploy or in a `.gitlab-ci.yml` in order to control settings for different targets.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
11
apt.mk
11
apt.mk
|
@ -1,15 +1,12 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) APT_PACKAGES
|
MANDATORY-apt = DEPLOY_HOSTS SSH_USER APT_PACKAGES DEPLOY_NAME
|
||||||
|
|
||||||
pull-apt:
|
pull-apt:
|
||||||
# nop
|
# nop
|
||||||
|
|
||||||
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; \
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) SSH_USER DEPLOY_COMPOSE_FILE DEPLOY_COMPOSE_PROJECT
|
MANDATORY-compose-file = DEPLOY_HOSTS DEPLOY_TYPE SSH_USER DEPLOY_COMPOSE_FILE DEPLOY_COMPOSE_PROJECT
|
||||||
|
|
||||||
ifndef DOCKER_LOGIN
|
ifndef DOCKER_LOGIN
|
||||||
DOCKER_LOGIN = 0
|
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; \
|
|
||||||
)
|
)
|
||||||
|
|
51
compose.mk
51
compose.mk
|
@ -1,19 +1,17 @@
|
||||||
ifdef DOCKER_LOGIN
|
MANDATORY-compose = DEPLOY_HOSTS DEPLOY_TYPE SSH_USER DEPLOY_NAME
|
||||||
MANDATORY = $(shell printenv MANDATORY) DOCKER_USER DOCKER_PASS DOCKER_REGISTRY
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef DOCKER_LOGIN
|
ifndef DOCKER_LOGIN
|
||||||
DOCKER_LOGIN = 0
|
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) -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 \
|
||||||
|
@ -22,30 +20,27 @@ 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 $(DEPLOY_PATH)/$(DEPLOY_NAME); 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; \
|
)
|
||||||
|
|
||||||
|
stop-compose:
|
||||||
|
@- echo "\n### stopping service(s)"
|
||||||
|
@- $(foreach host,$(DEPLOY_HOSTS), \
|
||||||
|
echo "$(host)"; \
|
||||||
|
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose down"; \
|
||||||
)
|
)
|
||||||
|
|
||||||
logs-compose:
|
logs-compose:
|
||||||
@echo "\n### logs"
|
@- echo "\n### logs"
|
||||||
@$(foreach host,$(DEPLOY_HOSTS), \
|
@- ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose logs -f $(service)"
|
||||||
set -e; \
|
|
||||||
echo "#host: $(host)"; \
|
|
||||||
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose logs -f $(service)"; \
|
|
||||||
set +e; \
|
|
||||||
)
|
|
||||||
|
|
||||||
restart-compose:
|
restart-compose:
|
||||||
@echo "\n### restarting service(s)"
|
@- $(foreach host,$(DEPLOY_HOSTS), \
|
||||||
@$(foreach host,$(DEPLOY_HOSTS), \
|
echo "$(host)"; \
|
||||||
set -e; \
|
ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose restart"; \
|
||||||
echo "#host: $(host)"; \
|
|
||||||
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose restart"; \
|
|
||||||
sleep $(DEPLOY_START_DELAY); \
|
sleep $(DEPLOY_START_DELAY); \
|
||||||
set +e; \
|
|
||||||
)
|
)
|
||||||
|
|
6
cron.mk
6
cron.mk
|
@ -1,22 +1,18 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) CRON_USER
|
MANDATORY-cron = true
|
||||||
|
|
||||||
start-cron:
|
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:
|
||||||
|
|
2
helm.mk
2
helm.mk
|
@ -1,4 +1,4 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT HELM_CHART_NAME HELM_CHART_PATH HELM_VALUES_FILE K8S_NAMESPACE
|
MANDATORY-helm = K8S_CONTEXT HELM_CHART_NAME HELM_CHART_PATH HELM_VALUES_FILE NAMESPACE
|
||||||
# helm
|
# helm
|
||||||
#
|
#
|
||||||
# deploys helm charts on k8s via helm
|
# deploys helm charts on k8s via helm
|
||||||
|
|
12
k8s.mk
12
k8s.mk
|
@ -2,21 +2,15 @@
|
||||||
#
|
#
|
||||||
# deploys k8s
|
# deploys k8s
|
||||||
|
|
||||||
MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT
|
MANDATORY-k8s = K8S_CONTEXT
|
||||||
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 kubernetes.yaml and secrets.yaml"
|
||||||
@ cat $(K8S_MANIFEST_FILENAME) $(SECRETS) | envsubst | kubectl apply $(K8S_ADDITIONAL_PARAMS) -f -
|
@ cat kubernetes.yaml secrets.yaml | envsubst | kubectl apply -f -
|
||||||
|
|
||||||
pull-k8s:
|
pull-k8s:
|
||||||
# nop
|
# nop
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT KUSTOMIZE_FOLDER NAMESPACE
|
MANDATORY-kustomize = K8S_CONTEXT KUSTOMIZE_FOLDER NAMESPACE
|
||||||
# kustomize
|
# kustomize
|
||||||
#
|
#
|
||||||
# this uses kustomize to install stuff on k8s
|
# this uses kustomize to install stuff on k8s
|
||||||
|
|
15
simple.mk
15
simple.mk
|
@ -1,21 +1,18 @@
|
||||||
# simple
|
MANDATORY-copy = DEPLOY_TYPE DEPLOY_HOSTS SSH_USER DEPLOY_PATH DEPLOY_NAME
|
||||||
|
MANDATORY-simple = $(MANDATORY-copy)
|
||||||
|
|
||||||
|
# copy
|
||||||
#
|
#
|
||||||
# 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
|
|
||||||
DEPLOY_START_DELAY = 0
|
|
||||||
endif
|
|
||||||
|
|
||||||
pull-simple:
|
pull-simple:
|
||||||
# nop
|
# nop
|
||||||
|
|
||||||
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; \
|
|
||||||
)
|
)
|
||||||
|
|
4
swarm.mk
4
swarm.mk
|
@ -1,12 +1,12 @@
|
||||||
|
MANDATORY-swarm = DEPLOY_HOSTS DEPLOY_TYPE TAG
|
||||||
|
|
||||||
pull-swarm:
|
pull-swarm:
|
||||||
|
|
||||||
start-swarm:
|
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:
|
||||||
|
|
14
test.sh
14
test.sh
|
@ -30,7 +30,7 @@ function test_with_minimal_vars_compose(){
|
||||||
cp $TESTS/compose_config.mk config.mk
|
cp $TESTS/compose_config.mk config.mk
|
||||||
cp $TESTS/docker-compose.yml .
|
cp $TESTS/docker-compose.yml .
|
||||||
make deploy
|
make deploy
|
||||||
rm -f docker-compose.yml
|
rm -f docker-compose.yml config.mk
|
||||||
}
|
}
|
||||||
|
|
||||||
function test_with_minimal_vars_compose_file(){
|
function test_with_minimal_vars_compose_file(){
|
||||||
|
@ -38,7 +38,16 @@ function test_with_minimal_vars_compose_file(){
|
||||||
cp $TESTS/compose_file_config.mk config.mk
|
cp $TESTS/compose_file_config.mk config.mk
|
||||||
cp $TESTS/docker-compose.yml .
|
cp $TESTS/docker-compose.yml .
|
||||||
make deploy
|
make deploy
|
||||||
rm -f docker-compose.yml
|
rm -f docker-compose.yml config.mk
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_with_minimal_vars_compose_and_tag(){
|
||||||
|
echo "::::::::: $FUNCNAME ::::::::::::"
|
||||||
|
cp $TESTS/compose_config.tag.mk config.mk
|
||||||
|
cp $TESTS/docker-compose.tag.yml docker-compose.yml
|
||||||
|
echo "TAG=3.17" > .env
|
||||||
|
make deploy
|
||||||
|
rm -f docker-compose.yml config.mk
|
||||||
}
|
}
|
||||||
|
|
||||||
prepdir
|
prepdir
|
||||||
|
@ -46,5 +55,6 @@ prepdir
|
||||||
test_with_minimal_vars_apt
|
test_with_minimal_vars_apt
|
||||||
test_with_minimal_vars_compose
|
test_with_minimal_vars_compose
|
||||||
test_with_minimal_vars_compose_file
|
test_with_minimal_vars_compose_file
|
||||||
|
test_with_minimal_vars_compose_and_tag
|
||||||
|
|
||||||
cleandir
|
cleandir
|
||||||
|
|
5
testing/compose_config.tag.mk
Normal file
5
testing/compose_config.tag.mk
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
DEPLOY_NAME = make-deploy-test-compose-tag
|
||||||
|
DEPLOY_PATH = /tmp
|
||||||
|
DEPLOY_HOSTS = localhost
|
||||||
|
DEPLOY_TYPE = compose
|
||||||
|
SSH_USER = $(USER)
|
4
testing/docker-compose.tag.yml
Normal file
4
testing/docker-compose.tag.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
services:
|
||||||
|
curl:
|
||||||
|
image: "alpine:${TAG}"
|
||||||
|
command: cat /etc/os-release
|
3
tf.mk
3
tf.mk
|
@ -1,5 +1,4 @@
|
||||||
MANDATORY = $(shell printenv MANDATORY) TF_FLAGS
|
MANDATORY-tf =
|
||||||
|
|
||||||
# tf
|
# tf
|
||||||
#
|
#
|
||||||
# deploys via tf apply
|
# deploys via tf apply
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue