Giter Club home page Giter Club logo

gramola's Introduction

Setting up DEV environment

export JAVA_BUILDER_IMAGE="registry.access.redhat.com/redhat-openjdk-18/openjdk18-openshift:1.5"
export NODEJS_BUILDER_IMAGE="nodejs:12"
export DEV_PROJECT=gramola-dev

export DB_SERVICE_NAME=events-database
export DB_SERVICE_PORT=5432
export DB_NAME=events
export DB_USERNAME=events
export DB_PASSWORD=secret

export REGISTRY_USERNAME=<QUAY_USER>
export REGISTRY_PASSWORD=<QUAY_USER>

Create development project in OpenShift

oc new-project ${DEV_PROJECT}

Deploy PostgreSQL Database in DEV

oc new-app postgresql-persistent \
  -p DATABASE_SERVICE_NAME=${DB_SERVICE_NAME} \
  -p POSTGRESQL_USER=${DB_USERNAME} -p POSTGRESQL_PASSWORD=${DB_PASSWORD} \
  -p POSTGRESQL_DATABASE=${DB_NAME} \
  -n ${DEV_PROJECT}

oc label dc/${DB_SERVICE_NAME} app.kubernetes.io/part-of=gramola-app app.openshift.io/runtime=postgresql --overwrite -n ${DEV_PROJECT}

Deploy Events API

NOTE: Although we set quarkus profile to test with -Dquarkus.profile=test this just means that we don't want to recreate tables in the DEV environment we all share...

mvn clean package -Dquarkus.profile=test -DskipTests -f ./events

oc new-build ${JAVA_BUILDER_IMAGE} --binary --name=events -l app=gramola-app -n ${DEV_PROJECT}

oc start-build bc/events --from-file=./events/target/events-1.0.0-SNAPSHOT-runner.jar --follow -n ${DEV_PROJECT}

oc new-app events:latest -e DB_SERVICE_NAME=${DB_SERVICE_NAME} -e DB_SERVICE_PORT=${DB_SERVICE_PORT} -e DB_NAME=${DB_NAME} -e DB_USERNAME=${DB_USERNAME} -e DB_PASSWORD=${DB_PASSWORD} -n ${DEV_PROJECT} && \
oc expose svc/events -n ${DEV_PROJECT} && \
oc label dc/events app.kubernetes.io/part-of=gramola-app app.openshift.io/runtime=java --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/events app.openshift.io/vcs-uri=https://github.com/cvicens/gramola.git --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/events app.openshift.io/vcs-ref=master --overwrite -n ${DEV_PROJECT}

Deploy Gateway

oc create secret docker-registry quay-registry \
  --docker-username=${REGISTRY_USERNAME} \
  --docker-password=${REGISTRY_PASSWORD} \
  --docker-server=quay.io -n ${DEV_PROJECT}

oc secrets link builder quay-registry --for=pull -n ${DEV_PROJECT}

oc new-build ${JAVA_BUILDER_IMAGE} --binary --name=gateway -l app=gramola-app \
  --push-secret='quay-registry' \
  --to=quay.io/cvicensa/gramola-gateway:latest --to-docker=true -n ${DEV_PROJECT}

mvn clean package -Dquarkus.profile=test -DskipTests -f ./gateway

oc start-build bc/gateway --from-file=./gateway/target/gateway-1.0.0-runner.jar --follow -n ${DEV_PROJECT}

oc import-image gateway:latest --from=quay.io/cvicensa/gramola-gateway:latest --confirm --scheduled=true -n ${DEV_PROJECT}

oc new-app gateway:latest --name gateway -n ${DEV_PROJECT} && \
oc expose svc/gateway -n ${DEV_PROJECT} && \
oc label dc/gateway app.kubernetes.io/part-of=gramola-app app.openshift.io/runtime=java --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/gateway app.openshift.io/vcs-uri=https://github.com/cvicens/gramola.git --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/gateway app.openshift.io/vcs-ref=master --overwrite -n ${DEV_PROJECT}

Deploy Frontend

oc new-app -n ${DEV_PROJECT} ${NODEJS_BUILDER_IMAGE}~https://github.com/cvicens/gramola.git \
  --context-dir=frontend --name frontend && \
oc expose svc/frontend -n ${DEV_PROJECT} && \
oc label dc/frontend app.kubernetes.io/part-of=gramola-app app.openshift.io/runtime=nodejs --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/frontend app.openshift.io/vcs-uri=https://github.com/cvicens/gramola.git --overwrite -n ${DEV_PROJECT} && \
oc annotate dc/frontend app.openshift.io/vcs-ref=master --overwrite -n ${DEV_PROJECT}

Connections in DEV

oc annotate dc/frontend app.openshift.io/connects-to=gateway --overwrite -n ${DEV_PROJECT}
oc annotate dc/gateway app.openshift.io/connects-to=events --overwrite -n ${DEV_PROJECT}
oc annotate dc/events app.openshift.io/connects-to='events-database,postgresql-persistent' --overwrite -n ${DEV_PROJECT}

Deploy Jenkins

oc new-app jenkins-ephemeral -p MEMORY_LIMIT=3Gi -p JENKINS_IMAGE_STREAM_TAG=jenkins:2 -n ${DEV_PROJECT}
oc label dc/jenkins app.openshift.io/runtime=jenkins --overwrite -n ${DEV_PROJECT}

Setting up TEST environment

export TEST_PROJECT=gramola-test

Create TEST project in OpenShift

oc new-project ${TEST_PROJECT}

Deploy PostgreSQL Database in TEST

oc new-app postgresql-persistent \
  -p DATABASE_SERVICE_NAME=${DB_SERVICE_NAME} \
  -p POSTGRESQL_USER=${DB_USERNAME} -p POSTGRESQL_PASSWORD=${DB_PASSWORD} \
  -p POSTGRESQL_DATABASE=${DB_NAME} \
  -n ${TEST_PROJECT}

oc label dc/${DB_SERVICE_NAME} app.kubernetes.io/part-of=gramola-app app.openshift.io/runtime=postgresql --overwrite -n ${TEST_PROJECT}

Adjust permissions

oc policy add-role-to-user edit system:serviceaccount:${DEV_PROJECT}:jenkins -n ${TEST_PROJECT}
oc policy add-role-to-user view system:serviceaccount:${DEV_PROJECT}:jenkins -n ${TEST_PROJECT}

oc policy add-role-to-user system:image-puller system:serviceaccount:${TEST_PROJECT}:default -n ${DEV_PROJECT}

Deploying pipelines

TODO

cat << EOF | oc -n ${DEV_PROJECT} apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jenkins-m2
  labels:
    app: jenkins
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: gp2
  volumeMode: Filesystem  
EOF
BAD: oc set volume bc/gramola-events-pipeline-complex --add --name=m2 --type=persistentVolumeClaim \
  --claim-name=jenkins-m2 --mount-path=/home/jenkins/.m2 --containers=jenkins -n ${DEV_PROJECT}
oc apply -n ${DEV_PROJECT} -f ./events/gramola-events-pipeline-complex.yaml
oc start-build bc/gramola-events-pipeline-complex -n ${DEV_PROJECT}

oc apply -n ${DEV_PROJECT} -f ./gateway/gramola-gateway-pipeline-complex.yaml
oc start-build bc/gramola-gateway-pipeline-complex -n ${DEV_PROJECT}

oc apply -n ${DEV_PROJECT} -f ./frontend/gramola-frontend-pipeline-complex.yaml
oc start-build bc/gramola-frontend-pipeline-complex -n ${DEV_PROJECT}

Useful queries

psql -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c "SELECT table_name FROM information_schema.tables WHERE table_schema='public' AND table_type='BASE TABLE';"

psql -U $POSTGRESQL_USER $POSTGRESQL_DATABASE -c 'select name from Event;'

gramola's People

Contributors

cvicens avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.