diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ef2b4637bff4438e58d9f1eaee1a699a9cf1752a..2e040adb4582dc06b0164e9f1530a91dbf381880 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 0000000000000000000000000000000000000000..8d02ac60fcf1b48db639ff42dc3e2248cd4fda81 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,3 @@ +FROM busybox +ADD ./builds/main / +CMD /main diff --git a/Makefile b/Makefile index 0160b0e67bbad27f275e676d0f523b6a3a7a0f64..469c8d8c4e6b415ab7ee9c383c4c977bd2b55057 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 b07ba2c4d2be67a2ea81d12370776f37797b62c0..0000000000000000000000000000000000000000 --- 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 b7f8eb758809405e2976b283b3a6c18db3270a4c..0000000000000000000000000000000000000000 --- 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 b07ba2c4d2be67a2ea81d12370776f37797b62c0..0000000000000000000000000000000000000000 --- 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 6bd99e5d9c3eae527180168e68f2594ada4b36d0..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..d18bb006265e352e7e3d11bd47ae803eaab76968 --- /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 0000000000000000000000000000000000000000..2008ddaef8535f2ee49ae9f035067b451636aed1 --- /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 640347d1c26a99887c1f3c39ee6d7ea7fa0e90f7..a7dc1025525f003a631846fe11b00c092393f5e5 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 33802db516b1ff981b34d69733c14df54d8b12a1..c5235231ebc8e617a4d510befb9198f2bf559c90 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 e7426811a31d075b0667764f2472d9594b24ceba..f0a6a630402e46470549bbca2d10f612ac2a5391 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)