Compare commits

..

1 commit

Author SHA1 Message Date
Stefan Riepenhausen
e115a87ae5 add test with tag 2024-06-13 15:49:11 +02:00
16 changed files with 65 additions and 59 deletions

View file

@ -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

View file

@ -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)"; \
@ -126,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)

View file

@ -2,6 +2,8 @@
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
@ -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

2
apt.mk
View file

@ -1,4 +1,4 @@
MANDATORY = $(shell printenv MANDATORY) APT_PACKAGES MANDATORY-apt = DEPLOY_HOSTS SSH_USER APT_PACKAGES DEPLOY_NAME
pull-apt: pull-apt:
# nop # nop

View file

@ -1,4 +1,4 @@
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

View file

@ -1,18 +1,16 @@
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)"; \ echo "$(host)"; \
if test "$(DOCKER_LOGIN)" = "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) "docker login -u $(DOCKER_USER) -p $(DOCKER_PASS) $(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)" ; \
@ -22,24 +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), \
echo "$(host)"; \ echo "$(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose up -d"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose up -d"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
) )
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)"
echo "$(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose logs -f $(service)"; \
)
restart-compose: restart-compose:
@echo "\n### restarting service(s)" @- $(foreach host,$(DEPLOY_HOSTS), \
$(foreach host,$(DEPLOY_HOSTS), \
echo "$(host)"; \ echo "$(host)"; \
ssh $(SSH_USER)@$(host) "cd $(project_dir); docker-compose restart"; \ ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); docker-compose restart"; \
sleep $(DEPLOY_START_DELAY); \ sleep $(DEPLOY_START_DELAY); \
) )

View file

@ -1,4 +1,4 @@
MANDATORY = $(shell printenv MANDATORY) CRON_USER MANDATORY-cron = true
start-cron: start-cron:
@- echo "\n### starting..." @- echo "\n### starting..."

View file

@ -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

7
k8s.mk
View file

@ -2,16 +2,15 @@
# #
# deploys k8s # deploys k8s
MANDATORY = $(shell printenv MANDATORY) K8S_CONTEXT MANDATORY-k8s = K8S_CONTEXT
K8S_MANIFEST_FILENAME ?= kubernetes.yaml
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 secrets.yaml" @- echo "\n### run kubectl apply -f kubernetes.yaml and secrets.yaml"
@ cat $(K8S_MANIFEST_FILENAME) secrets.yaml | envsubst | kubectl apply $(K8S_ADDITIONAL_PARAMS) -f - @ cat kubernetes.yaml secrets.yaml | envsubst | kubectl apply -f -
pull-k8s: pull-k8s:
# nop # nop

View file

@ -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

View file

@ -1,12 +1,11 @@
# 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

View file

@ -1,3 +1,5 @@
MANDATORY-swarm = DEPLOY_HOSTS DEPLOY_TYPE TAG
pull-swarm: pull-swarm:
start-swarm: start-swarm:

14
test.sh
View file

@ -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

View file

@ -0,0 +1,5 @@
DEPLOY_NAME = make-deploy-test-compose-tag
DEPLOY_PATH = /tmp
DEPLOY_HOSTS = localhost
DEPLOY_TYPE = compose
SSH_USER = $(USER)

View file

@ -0,0 +1,4 @@
services:
curl:
image: "alpine:${TAG}"
command: cat /etc/os-release

3
tf.mk
View file

@ -1,5 +1,4 @@
MANDATORY = $(shell printenv MANDATORY) TF_FLAGS MANDATORY-tf =
# tf # tf
# #
# deploys via tf apply # deploys via tf apply