From 18879786bfba6c6b29ee15b5adc910040be3e108 Mon Sep 17 00:00:00 2001
From: sivan <sivanduijn@gmail.com>
Date: Fri, 2 Apr 2021 12:45:33 +0200
Subject: [PATCH] adjusted template files, added yml files

---
 .gitlab-ci.yml                | 68 ++++++++++++++++++++++++++++++++---
 Dockerfile                    |  3 ++
 Makefile                      | 29 ++++++++-------
 builds/.gitignore             |  5 ---
 builds/README.md              |  3 --
 coverage/.gitignore           |  5 ---
 coverage/README.md            |  3 --
 deployments/deployment.yml    | 32 +++++++++++++++++
 deployments/svc.yml           |  8 +++++
 go.mod                        |  1 -
 go.sum                        |  2 --
 internal/consumer/consumer.go | 14 ++++----
 12 files changed, 126 insertions(+), 47 deletions(-)
 create mode 100644 Dockerfile
 delete mode 100644 builds/.gitignore
 delete mode 100644 builds/README.md
 delete mode 100644 coverage/.gitignore
 delete mode 100644 coverage/README.md
 create mode 100644 deployments/deployment.yml
 create mode 100644 deployments/svc.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ef2b463..2e040ad 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,9 @@ image: golang:1.16
 
 stages:
   - test
+  - build
+  - docker
+  - deploy
 
 lint:
   stage: test
@@ -13,10 +16,10 @@ unit_tests:
   script:
     - make dep
     - make test
-    - gocover-cobertura < coverage/coverage.txt > coverage/coverage.xml
+    - gocover-cobertura < coverage.txt > coverage.xml
   artifacts:
     reports:
-      cobertura: coverage/coverage.xml
+      cobertura: coverage.xml
 
 race:
   stage: test
@@ -29,7 +32,7 @@ coverage:
     - make coverage
   after_script:
     - mkdir coverage/$CI_COMMIT_BRANCH
-    - cp coverage/cover.html coverage/$CI_COMMIT_BRANCH
+    - cp cover.html coverage/$CI_COMMIT_BRANCH
     - mv coverage/$CI_COMMIT_BRANCH/cover.html coverage/$CI_COMMIT_BRANCH/index.html
     # install openssh client and add ssh keys
     - apt-get install openssh-client curl -y >/dev/null
@@ -41,9 +44,64 @@ coverage:
     - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
     - chmod 644 ~/.ssh/known_hosts
     - ssh -fN -L 1234:science-vs260.science.uu.nl:22 sivan@up.science.uu.nl
-    - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa coverage/$CI_COMMIT_BRANCH root@localhost:/datadisk/documentation-coverage/home/backend/query-service/features
+    - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa coverage/$CI_COMMIT_BRANCH root@localhost:/datadisk/documentation-coverage/home/backend/$SERVICE_NAME/features
   artifacts:
     untracked: false
     expire_in: 30 days
     paths:
-      - "coverage/cover.html"
+      - cover.html
+
+build:
+  stage: build
+  script:
+    - make linux
+  only:
+    - develop
+  artifacts:
+    paths:
+      - builds/
+  dependencies: []
+
+
+docker:
+  image: docker:stable
+  tags:
+    - docker
+  stage: docker
+  only:
+    - develop
+  before_script:
+    - docker login datastropheregistry.azurecr.io -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD
+  script:
+    - ls
+    - cd builds
+    - ls
+    - cd ..
+    - docker build --progress plain -t $SERVICE_NAME:latest .
+    - docker tag $SERVICE_NAME datastropheregistry.azurecr.io/$SERVICE_NAME:latest
+    - docker push datastropheregistry.azurecr.io/$SERVICE_NAME:latest
+  dependencies:
+    - build
+
+
+deploy:
+  stage: deploy
+  only:
+    - develop
+  script:
+    - apt-get install openssh-client curl -y >/dev/null
+    - mkdir ~/.ssh/
+    - eval $(ssh-agent -s)
+    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
+    - chmod 600 ~/.ssh/id_rsa
+    - ssh-add ~/.ssh/id_rsa
+    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
+    - chmod 644 ~/.ssh/known_hosts
+    - ssh -fN -L 1234:science-vs260.science.uu.nl:22 sivan@up.science.uu.nl
+    # Copy kubernetes files over
+    - scp -r -o StrictHostKeyChecking=no -P 1234 -i ~/.ssh/id_rsa deployments/* root@localhost:/root/kubernetes/$SERVICE_NAME
+    # Deploy all yml files
+    - ssh -p 1234 -i ~/.ssh/id_rsa root@localhost "for i in kubernetes/$SERVICE_NAME/*.yml; do kubectl apply -f \$i; done"
+    # Perform rolling update for deployment
+    - ssh -p 1234 -i ~/.ssh/id_rsa root@localhost "kubectl rollout restart -f kubernetes/$SERVICE_NAME/deployment.yml"
+  dependencies: []
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..8d02ac6
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,3 @@
+FROM busybox
+ADD ./builds/main /
+CMD /main
diff --git a/Makefile b/Makefile
index 0160b0e..469c8d8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,10 @@
+.PHONY: all dep build test lint
+
 lint: dep ## Lint the files
 	@golint -set_exit_status ./...
 
 test: ## Run unittests
-	@go test -cover -coverprofile=coverage/coverage.txt -covermode count ./...
+	@go test -cover -coverprofile=coverage.txt -covermode count ./...
 
 race: dep ## Run data race detector
 	@go test -race -short ./...
@@ -13,24 +15,21 @@ dep: ## Get the dependencies
 	@go get -u github.com/boumenot/gocover-cobertura
 
 coverage: dep
-	@go test -v -coverpkg=./... -coverprofile=coverage/cover.out ./...
-	@go tool cover -func coverage/cover.out | grep total
-	@go tool cover -html=coverage/cover.out -o coverage/cover.html
+	@go test -v -coverpkg=./... -coverprofile=cover.out ./...
+	@go tool cover -func cover.out | grep total
+	@go tool cover -html=cover.out -o cover.html
 
 windows:
-	$(eval GOOS := windows)
-	@go build -o main ./cmd/service-template/
-	@mv main builds
+	$(eval export GOOS := windows)
+	@go build -o builds/main ./cmd/service-template/
 
-macos: dep
-	$(eval GOOS := darwin)
-	@go build -o main ./cmd/service-template/
-	@mv main builds
+macos:
+	$(eval export GOOS := darwin)
+	@go build -o builds/main ./cmd/service-template/
 
 linux: # Build for linux
-	$(eval GOOS := linux)
-	@go build -o main ./cmd/service-template/
-	@mv main builds
+	$(eval export GOOS := linux)
+	CGO_ENABLED=0 go build -o builds/main ./cmd/service-template/
 
 run:
-	./builds/main
\ No newline at end of file
+	./builds/main
diff --git a/builds/.gitignore b/builds/.gitignore
deleted file mode 100644
index b07ba2c..0000000
--- a/builds/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# Ignore everything in this directory
-*
-# Except this file
-!.gitignore
-!README.md
\ No newline at end of file
diff --git a/builds/README.md b/builds/README.md
deleted file mode 100644
index b7f8eb7..0000000
--- a/builds/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# `/builds`
-
-Where the built binaries are placed. Everything in this folder should be ignored by a .gitignore file.
\ No newline at end of file
diff --git a/coverage/.gitignore b/coverage/.gitignore
deleted file mode 100644
index b07ba2c..0000000
--- a/coverage/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# Ignore everything in this directory
-*
-# Except this file
-!.gitignore
-!README.md
\ No newline at end of file
diff --git a/coverage/README.md b/coverage/README.md
deleted file mode 100644
index 6bd99e5..0000000
--- a/coverage/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# `/coverage`
-
-Where code coverage statistics go when running command like `make coverage`.
\ No newline at end of file
diff --git a/deployments/deployment.yml b/deployments/deployment.yml
new file mode 100644
index 0000000..d18bb00
--- /dev/null
+++ b/deployments/deployment.yml
@@ -0,0 +1,32 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: query-handler-deployment
+  labels:
+    app: query-handler 
+spec:
+  replicas: 3 
+  selector:
+    matchLabels:
+      app: query-handler
+  template:
+    metadata:
+      labels:
+        app: query-handler 
+    spec:
+      containers:
+      - name: query-handler
+        image: datastropheregistry.azurecr.io/query-handler-service:latest
+        ports:
+        - containerPort: 3000 
+        env:
+        - name: RABBIT_HOST
+          value: rabbitmq
+        - name: RABBIT_PORT
+          value: "5672"
+        - name: RABBIT_USER
+          value: I9YPuqNYvN_o4597-LJ6i0sWZTDTV5kk
+        - name: RABBIT_PASSWORD
+          value: zBA4m-IzK6ejLtCdr2gxB6kHmURaUvy4
+      imagePullSecrets:
+      - name: docker-regcred
\ No newline at end of file
diff --git a/deployments/svc.yml b/deployments/svc.yml
new file mode 100644
index 0000000..2008dda
--- /dev/null
+++ b/deployments/svc.yml
@@ -0,0 +1,8 @@
+# Service that exposes this deployment
+kind: Service
+apiVersion: v1
+metadata:
+  name: query-handler-service
+spec:
+  selector:
+    app: query-handler
diff --git a/go.mod b/go.mod
index 640347d..a7dc102 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,6 @@ module query-service
 go 1.15
 
 require (
-	github.com/rs/xid v1.3.0
 	github.com/streadway/amqp v1.0.0
 	github.com/thijsheijden/alice v0.1.5
 )
diff --git a/go.sum b/go.sum
index 33802db..c523523 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,3 @@
-github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4=
-github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
 github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo=
 github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/thijsheijden/alice v0.1.5 h1:kOZHhLGSHMja77I/Wvd19M7nvxgEWVIJ4vk5antCKdQ=
diff --git a/internal/consumer/consumer.go b/internal/consumer/consumer.go
index e742681..f0a6a63 100644
--- a/internal/consumer/consumer.go
+++ b/internal/consumer/consumer.go
@@ -1,7 +1,9 @@
 package consumer
 
 import (
+	"os"
 	"query-service/internal/errorhandler"
+	"strconv"
 	"time"
 
 	"github.com/streadway/amqp"
@@ -16,14 +18,10 @@ type ConsumeMessageFunc func(*[]byte)
 func StartConsuming(consumeMessage ConsumeMessageFunc, exchangeID string, routingKey string) {
 
 	// Create connection config using environment variables
-	// rabbitUser := os.Getenv("RABBIT_USER")
-	// rabbitPassword := os.Getenv("RABBIT_PASSWORD")
-	// rabbitHost := os.Getenv("RABBIT_HOST")
-	// rabbitPort, err := strconv.Atoi(os.Getenv("RABBIT_PORT"))
-	rabbitUser := "haha-test"
-	rabbitPassword := "dikkedraak"
-	rabbitHost := "192.168.178.158"
-	rabbitPort := 5672
+	rabbitUser := os.Getenv("RABBIT_USER")
+	rabbitPassword := os.Getenv("RABBIT_PASSWORD")
+	rabbitHost := os.Getenv("RABBIT_HOST")
+	rabbitPort, err := strconv.Atoi(os.Getenv("RABBIT_PORT"))
 
 	config := alice.CreateConfig(rabbitUser, rabbitPassword, rabbitHost, rabbitPort, true, time.Minute*1, alice.DefaultErrorHandler)
 
-- 
GitLab