From 81c8baba671c1736225c009e6011e234edb16347 Mon Sep 17 00:00:00 2001
From: Manuel Kieweg <mail@manuelkieweg.de>
Date: Mon, 19 Oct 2020 13:04:43 +0100
Subject: [PATCH] Dockerfile and adapted CI

---
 .gitlab-ci.yml                 |  4 +++-
 Dockerfile                     | 16 +++++++++++++
 build/ci/.build-container.yml  | 44 ++++++++++++++++++++++++++++++++++
 build/ci/.documentation-ci.yml |  4 ++--
 4 files changed, 65 insertions(+), 3 deletions(-)
 create mode 100644 Dockerfile
 create mode 100644 build/ci/.build-container.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1ca81acf9..8de33ee98 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,8 @@ variables:
 
 stages:
   - test
-  - documentation
+  - build
+  - deploy
 
 before_script:
   - git config --global url."https://$GO_MODULES_USER:$GO_MODULES_ACCESS_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
@@ -12,3 +13,4 @@ include:
   - local: '/build/ci/.code-quality-ci.yml'
   - local: '/build/ci/.documentation-ci.yml'
   - local: '/build/ci/.security-and-compliance-ci.yml'
+  - local: '/build/ci/.build-container.yml'
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..f7e594ad6
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,16 @@
+FROM golang:alpine AS builder
+ARG GITLAB_USER
+ARG GITLAB_TOKEN
+WORKDIR /src/gosdn
+COPY . .
+RUN git config --global url."https://$GITLAB_USER:$GITLAB_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de"
+RUN go mod download
+RUN CGO_ENABLED=0 GOOS=linux go build ./cmd/gosdn
+
+FROM alpine:latest
+EXPOSE 8443
+COPY --from=builder /src/gosdn/gosdn .
+COPY --from=builder /src/gosdn/config .
+
+ENTRYPOINT [ "./gosdn" ]
+CMD [""]
diff --git a/build/ci/.build-container.yml b/build/ci/.build-container.yml
new file mode 100644
index 000000000..b33146da2
--- /dev/null
+++ b/build/ci/.build-container.yml
@@ -0,0 +1,44 @@
+variables:
+  DOCKER_IMAGE_SHA: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+
+build:docker:
+  stage: build
+  tags:
+    - baremetal
+  script:
+    - >
+      docker build \
+        --build-arg <GITLAB_USER>=<$GO_MODULES_USER> \
+        --build-arg <GITLAB_TOKEN>=<$GO_MODULES_ACCESS_TOKEN> \
+        -t $DOCKER_IMAGE_SHA .
+
+.deploy: &deploy
+  stage: deploy
+  needs: ["build:docker"]
+  tags:
+    - baremetal
+  script:
+    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+    - docker tag $DOCKER_IMAGE_SHA $TAG
+    - docker push $TAG
+
+deploy:develop:
+  variables:
+    TAG: $CI_REGISTRY_IMAGE:develop
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
+  <<: *deploy
+
+deploy:tagged:
+  variables:
+    TAG: $CI_REGISTRY_IMAGE:CI_COMMIT_TAG
+  rules:
+    - if: CI_COMMIT_TAG
+  <<: *deploy
+
+deploy:latest:
+  variables:
+    TAG: $CI_REGISTRY_IMAGE:latest
+  rules:
+    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
+  <<: *deploy
\ No newline at end of file
diff --git a/build/ci/.documentation-ci.yml b/build/ci/.documentation-ci.yml
index cd9bbc427..23a5caf7f 100644
--- a/build/ci/.documentation-ci.yml
+++ b/build/ci/.documentation-ci.yml
@@ -5,7 +5,7 @@ documentation:pdf:
     name: pandoc/latex
     entrypoint:
     - ''
-  stage: documentation
+  stage: deploy
   rules:
     - changes:
       - documentation/design/*.md
@@ -22,7 +22,7 @@ documentation:pdf:
       - cargo install mdbook
   image:
     name: rust:latest
-  stage: documentation
+  stage: deploy
   script:
   - mdbook build documentation --dest-dir public
   cache:
-- 
GitLab