ALL: added docker and kubernetes support
parent
b09b2819df
commit
8317302143
|
@ -0,0 +1 @@
|
|||
/build
|
|
@ -36,6 +36,7 @@ include(${SCRIPTS_CMAKE_DIR}/vogl.cmake)
|
|||
include(${SCRIPTS_CMAKE_DIR}/debug.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/googletest.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/manifests.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/docker.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/lua.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/ui.cmake)
|
||||
include(${SCRIPTS_CMAKE_DIR}/macros.cmake)
|
||||
|
@ -52,6 +53,7 @@ option(UNITTESTS_SANITIZER_ADDRESS "Builds tests with address sanitizer" OFF)
|
|||
option(TOOLS "Builds with tools" ON)
|
||||
option(RCON "Builds with rcon tool - also needs TOOLS to be active" ON)
|
||||
option(SERVER "Builds with server" ON)
|
||||
set(DOCKER_EXECUTABLE "docker" CACHE STRING "The docker cli to use for the docker target")
|
||||
set(GDB_EXECUTABLE "gdb" CACHE STRING "The gnu debugger binary to use for the debug target")
|
||||
set(LLDB_EXECUTABLE "lldb" CACHE STRING "The lldb binary to use for the debug target")
|
||||
set(GIT_EXECUTABLE "git" CACHE STRING "The git binary to use for the update-libs target")
|
||||
|
@ -65,9 +67,12 @@ option(USE_CPPCHECK "Enable cppcheck" OFF)
|
|||
option(USE_CLANG_TIDY "Enable Clang Tidy" OFF)
|
||||
set(DEBUGGER "gdb" CACHE STRING "Which debugger should be used")
|
||||
set_property(CACHE DEBUGGER PROPERTY STRINGS gdb lldb)
|
||||
set(SERVER_HOST "localhost" CACHE STRING "Host where the server is running on")
|
||||
set(FQDN "example.com" CACHE STRING "The domain to place the services in")
|
||||
set(DB_PW "engine" CACHE STRING "The database password")
|
||||
set(SERVER_HOST "server-${FQDN}" CACHE STRING "Host where the server is running on")
|
||||
set(SERVER_PORT "11337" CACHE STRING "Port where the server is listening on")
|
||||
set(BASE_URL "http://localhost/" CACHE STRING "Base url of the http endpoints")
|
||||
set(DOCKER_REGISTRY "" CACHE STRING "Docker registry")
|
||||
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
||||
set(WINDOWS 1)
|
||||
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Android")
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
set(DOCKER_BUILD_ARGS "" CACHE STRING "Docker cli arguments for building an image")
|
||||
set(DOCKER_RUN_ARGS "" CACHE STRING "Docker cli arguments for running an image")
|
||||
set(DOCKER_DELETE_IUMAGE_ARGS "" CACHE STRING "Docker cli arguments for deleting an image")
|
||||
set(DOCKER_PUSH_ARGS "" CACHE STRING "Docker cli arguments for pushing an image")
|
||||
|
||||
#
|
||||
# Adds a docker target to a project if a Dockerfile (copied) or Dockerfile.in (template) is in the directory
|
||||
# The working directory is the root dir of the project.
|
||||
#
|
||||
# The DOCKER_IMAGE_NAME_TAG variable that is set here, must be in sync with the kubernetes manifests
|
||||
#
|
||||
macro(engine_docker NAME)
|
||||
set(DOCKERFILE_SRC)
|
||||
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile.in)
|
||||
set(DOCKERFILE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile.in)
|
||||
configure_file(${DOCKERFILE_SRC} ${CMAKE_CURRENT_BINARY_DIR}/Dockerfile @ONLY)
|
||||
elseif (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile)
|
||||
set(DOCKERFILE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile)
|
||||
configure_file(${DOCKERFILE_SRC} ${CMAKE_CURRENT_BINARY_DIR}/Dockerfile COPYONLY)
|
||||
endif()
|
||||
set(DOCKERFILE_TARGET ${CMAKE_CURRENT_BINARY_DIR}/Dockerfile)
|
||||
|
||||
if (DOCKER_REGISTRY)
|
||||
set(DOCKER_IMAGE_NAME_TAG "${DOCKER_REGISTRY}/${NAME}:${ROOT_PROJECT_VERSION}")
|
||||
else()
|
||||
set(DOCKER_IMAGE_NAME_TAG "${NAME}:${ROOT_PROJECT_VERSION}")
|
||||
endif()
|
||||
|
||||
if (DOCKERFILE_SRC AND DOCKER_EXECUTABLE)
|
||||
add_custom_target(${NAME}-docker
|
||||
COMMAND
|
||||
${DOCKER_EXECUTABLE}
|
||||
build
|
||||
--pull
|
||||
${DOCKER_BUILD_ARGS}
|
||||
-t ${DOCKER_IMAGE_NAME_TAG}
|
||||
.
|
||||
-f - < ${DOCKERFILE_TARGET}
|
||||
DEPENDS ${DOCKERFILE_TARGET}
|
||||
SOURCES ${DOCKERFILE_SRC}
|
||||
COMMENT "Docker image name of ${NAME} is ${DOCKER_IMAGE_NAME_TAG}"
|
||||
VERBATIM
|
||||
WORKING_DIRECTORY "${ROOT_DIR}"
|
||||
)
|
||||
|
||||
add_custom_target(${NAME}-docker-run
|
||||
COMMAND
|
||||
${DOCKER_EXECUTABLE}
|
||||
run
|
||||
-it
|
||||
${DOCKER_RUN_ARGS}
|
||||
${DOCKER_IMAGE_NAME_TAG}
|
||||
VERBATIM
|
||||
DEPENDS ${NAME}-docker
|
||||
)
|
||||
|
||||
add_custom_target(${NAME}-docker-push
|
||||
COMMAND
|
||||
${DOCKER_EXECUTABLE}
|
||||
push
|
||||
${DOCKER_PUSH_ARGS}
|
||||
"${DOCKER_IMAGE_NAME_TAG}"
|
||||
COMMAND
|
||||
${DOCKER_EXECUTABLE}
|
||||
rmi
|
||||
${DOCKER_DELETE_IUMAGE_ARGS}
|
||||
"${DOCKER_IMAGE_NAME_TAG}"
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
endmacro()
|
|
@ -10,7 +10,11 @@
|
|||
# The DOCKER_IMAGE_NAME_TAG variable that is set here, must be in sync with the docker target
|
||||
#
|
||||
macro(engine_manifests NAME)
|
||||
set(DOCKER_IMAGE_NAME_TAG "${NAME}:${ROOT_PROJECT_VERSION}")
|
||||
if (DOCKER_REGISTRY)
|
||||
set(DOCKER_IMAGE_NAME_TAG "${DOCKER_REGISTRY}/${NAME}:${ROOT_PROJECT_VERSION}")
|
||||
else()
|
||||
set(DOCKER_IMAGE_NAME_TAG "${NAME}:${ROOT_PROJECT_VERSION}")
|
||||
endif()
|
||||
foreach (FILEPATH ${ARGN})
|
||||
get_filename_component(FILENAME ${FILEPATH} NAME_WE)
|
||||
configure_file(${FILEPATH} ${CMAKE_CURRENT_BINARY_DIR}/deployment/${FILENAME}.yaml)
|
||||
|
|
|
@ -15,6 +15,14 @@ set(LUA_SRCS
|
|||
map/map001.lua
|
||||
)
|
||||
set(FILES)
|
||||
set(MANIFESTS
|
||||
deployment/deployment.yaml.in
|
||||
deployment/route.yaml.in
|
||||
deployment/service.yaml.in
|
||||
deployment/secrets.yaml.in
|
||||
)
|
||||
|
||||
engine_add_executable(TARGET ${PROJECT_NAME} SRCS ${SRCS} FILES ${FILES} LUA_SRCS ${LUA_SRCS})
|
||||
engine_target_link_libraries(TARGET ${PROJECT_NAME} DEPENDENCIES backend)
|
||||
engine_docker(${PROJECT_NAME})
|
||||
engine_manifests(${PROJECT_NAME} ${MANIFESTS})
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
FROM debian:buster as builder
|
||||
MAINTAINER Martin Gerhardy <martin.gerhardy@gmail.com>
|
||||
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
|
||||
RUN apt-get update -q && apt-get install -y cmake g++ pkg-config \
|
||||
libpq-dev opencl-c-headers libcurl4-openssl-dev \
|
||||
libsdl2-dev zlib1g-dev libuv1-dev
|
||||
|
||||
COPY contrib /tmp/@ROOT_PROJECT_NAME@/contrib
|
||||
COPY tools /tmp/@ROOT_PROJECT_NAME@/tools
|
||||
COPY cmake /tmp/@ROOT_PROJECT_NAME@/cmake
|
||||
COPY data /tmp/@ROOT_PROJECT_NAME@/data
|
||||
COPY src /tmp/@ROOT_PROJECT_NAME@/src
|
||||
COPY CMakeLists.txt /tmp/@ROOT_PROJECT_NAME@/
|
||||
|
||||
RUN mkdir /tmp/@ROOT_PROJECT_NAME@/build
|
||||
RUN cmake -H/tmp/@ROOT_PROJECT_NAME@ -B/tmp/@ROOT_PROJECT_NAME@/build -DUNITTESTS=OFF -DVISUALTESTS=OFF -DTOOLS=OFF -DSERVER=ON -DRCON=OFF -DCMAKE_INSTALL_PREFIX=installation
|
||||
RUN make -C /tmp/@ROOT_PROJECT_NAME@/build -j $(nproc) server
|
||||
|
||||
FROM debian:buster
|
||||
RUN apt-get update -q && \
|
||||
apt-get install -y libatomic1 libcurl4 zlib1g libuv1 libpq5 libsdl2-2.0.0 && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY --from=builder /tmp/@ROOT_PROJECT_NAME@/build/@PROJECT_NAME@ /opt/@ROOT_PROJECT_NAME@/
|
||||
|
||||
EXPOSE @SERVER_PORT@
|
||||
|
||||
WORKDIR /opt/@ROOT_PROJECT_NAME@
|
||||
ENTRYPOINT ./@ROOT_PROJECT_NAME@-@PROJECT_NAME@
|
|
@ -0,0 +1,48 @@
|
|||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: @PROJECT_NAME@-deployment
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: @PROJECT_NAME@
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: @PROJECT_NAME@
|
||||
spec:
|
||||
containers:
|
||||
- name: @PROJECT_NAME@
|
||||
image: @DOCKER_IMAGE_NAME_TAG@
|
||||
ports:
|
||||
- name: service-port
|
||||
containerPort: @SERVER_PORT@
|
||||
env:
|
||||
- name: DB_HOST
|
||||
value: postgres-@FQDN@
|
||||
livenessProbe:
|
||||
failureThreshold: 3
|
||||
exec:
|
||||
command:
|
||||
- /opt/@ROOT_PROJECT_NAME@/vengi-@PROJECT_NAME@-healthcheck
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 5
|
||||
readinessProbe:
|
||||
failureThreshold: 3
|
||||
exec:
|
||||
command:
|
||||
- /opt/@ROOT_PROJECT_NAME@/vengi-@PROJECT_NAME@-healthcheck
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
successThreshold: 1
|
||||
timeoutSeconds: 5
|
||||
resources:
|
||||
requests:
|
||||
memory: 256Mi
|
||||
cpu: 1000m
|
||||
limits:
|
||||
memory: 4096Mi
|
||||
cpu: 10000m
|
|
@ -0,0 +1,14 @@
|
|||
apiVersion: v1
|
||||
kind: Route
|
||||
metadata:
|
||||
name: @PROJECT_NAME@-route
|
||||
spec:
|
||||
host: @PROJECT_NAME@-@FQDN@
|
||||
port:
|
||||
targetPort: tcp
|
||||
tls:
|
||||
insecureEdgeTerminationPolicy: Allow
|
||||
termination: edge
|
||||
to:
|
||||
kind: Service
|
||||
name: @PROJECT_NAME@
|
|
@ -0,0 +1,8 @@
|
|||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: database-credentials
|
||||
type: Opaque
|
||||
data:
|
||||
DB_PW: >-
|
||||
@DB_PW@
|
|
@ -0,0 +1,12 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: @PROJECT_NAME@
|
||||
spec:
|
||||
ports:
|
||||
- name: tcp
|
||||
port: @SERVER_PORT@
|
||||
protocol: TCP
|
||||
targetPort: @SERVER_PORT@
|
||||
selector:
|
||||
app: @PROJECT_NAME@
|
Loading…
Reference in New Issue