Add CI/CD and k8s

master
J. Fernando Sánchez 6 years ago
parent 62142482dc
commit 54da48b548

@ -0,0 +1,50 @@
# Uncomment if you want to use docker-in-docker
# image: gsiupm/dockermake:latest
# services:
# - docker:dind
# When using dind, it's wise to use the overlayfs driver for
# improved performance.
stages:
- test
- build
- push
- deploy
before_script:
- make -e login
test:
stage: test
script:
- make -e test
build:
stage: build
script:
- make -e docker-build
only:
- master
- fix-makefiles
push:
stage: push
script:
- make -e docker-push
only:
- master
- fix-makefiles
deploy:
stage: deploy
script:
- make -e deploy
only:
- master
- fix-makefiles
clean :
stage: clean
script:
- make -e clean
when: manual

@ -1,30 +1,28 @@
PYVERSION=2.7
NAME=senpycommunity
REPO=gsiupm
VERSION=test
PLUGINS= $(filter %/, $(wildcard */))
DOCKER_FLAGS=
IMAGENAME=gsiupm/senpy-plugins-community
DOCKER_FLAGS=-p 5000:5000
ifdef SENPY_FOLDER
DOCKER_FLAGS+=-v $(realpath $(SENPY_FOLDER)):/usr/src/app/
DOCKER_FLAGS+= -v $(realpath $(SENPY_FOLDER)):/usr/src/app/
endif
all: build run
build: clean Dockerfile
docker build -t '$(REPO)/$(NAME):$(VERSION)-python$(PYVERSION)' -f Dockerfile .;
test-%:
docker run $(DOCKER_FLAGS) -v $$PWD/$*:/senpy-plugins/ --rm -ti '$(REPO)/$(NAME):$(VERSION)-python$(PYVERSION)' --only-test $(TEST_FLAGS)
test: test-.
clean:
clean-docker:
@docker ps -a | awk '/$(REPO)\/$(NAME)/{ split($$2, vers, "-"); if(vers[1] != "${VERSION}"){ print $$1;}}' | xargs docker rm 2>/dev/null|| true
@docker images | awk '/$(REPO)\/$(NAME)/{ split($$2, vers, "-"); if(vers[1] != "${VERSION}"){ print $$1":"$$2;}}' | xargs docker rmi 2>/dev/null|| true
run: build
docker run $(DOCKER_FLAGS) --rm -p 5000:5000 -ti '$(REPO)/$(NAME):$(VERSION)-python$(PYMAIN)'
.PHONY:: test test-% build-% build test test_pip run clean
include .makefiles/base.mk
include .makefiles/k8s.mk
.PHONY: test test-% build-% build test test_pip run clean

@ -1,9 +1,6 @@
from senpy.plugins import Analysis
from senpy.models import Response, Entry
import logging
logger = logging.getLogger(__name__)
class ExamplePlugin(Analysis):
'''A *VERY* simple plugin that exemplifies the development of Senpy Plugins'''
@ -21,8 +18,8 @@ class ExamplePlugin(Analysis):
custom_attribute = "42"
def analyse_entry(self, entry, params):
logger.debug('Analysing with the example.')
logger.debug('The answer to this response is: %s.' % params['parameter'])
self.log.debug('Analysing with the example.')
self.log.debug('The answer to this response is: %s.' % params['parameter'])
resp = Response()
entry['example:reversed'] = entry.text[::-1]
entry['example:the_answer'] = params['parameter']

@ -0,0 +1,8 @@
Deploy senpy to a kubernetes cluster.
The files are templates, which need to be expanded with something like envsubst.
Example usage:
```
cat k8s/*.ya*ml | envsubst | kubectl apply -n senpy -f -
```

@ -0,0 +1,24 @@
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: senpy-$NAME-latest
spec:
replicas: 1
template:
metadata:
labels:
role: $NAME-latest
app: test
spec:
containers:
- name: senpy-latest
image: $IMAGEWTAG
imagePullPolicy: Always
resources:
limits:
memory: "512Mi"
cpu: "1000m"
ports:
- name: web
containerPort: 5000

@ -0,0 +1,14 @@
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: senpy-$NAME-ingress
spec:
rules:
- host: senpy.cluster.gsi.dit.upm.es
http:
paths:
- path: /
backend:
serviceName: senpy-$NAME-latest
servicePort: 5000

@ -0,0 +1,12 @@
---
apiVersion: v1
kind: Service
metadata:
name: senpy-$NAME-latest
spec:
type: ClusterIP
ports:
- port: 5000
protocol: TCP
selector:
role: $NAME-latest
Loading…
Cancel
Save