diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fbfd9697a58c9f55d1d4dd8d2f98fd1e29cc4ea6..78d4fbdd29dfd13411968c8f050bac9b732ed7d7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,8 +12,8 @@ workflow: stages: - .pre - - test - build + - test - apply - integration-test - deploy @@ -29,5 +29,6 @@ include: - local: '/build/ci/.build-container.yml' - local: '/build/ci/.test.yml' - local: '/build/ci/.containerlab-ci.yml' - - local: '/build/ci/.deploy-k8s.yml' - local: '/build/ci/.uml-autogen-ci.yml' + - local: '/build/ci/.deploy-k8s.yml' + diff --git a/Dockerfile b/Dockerfile index b8a7b9cab2bfcbec7da50a41abda0e0e445167cf..4233e034dff757050c178529ea8f9c429cf50e53 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,34 @@ -FROM golang:1.16-buster AS builder +FROM golang:1.16-buster AS installer ARG GITLAB_USER ARG GITLAB_TOKEN ARG BUILDARGS -WORKDIR /src/gosdn -COPY . . + RUN apt-get update && apt-get install -y git RUN git config --global url."https://$GITLAB_USER:$GITLAB_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de" + +WORKDIR /src/gosdn +COPY go.* ./ +RUN go mod download + +FROM installer as builder + +COPY controller.go . +COPY http.go . +COPY ./api ./api +COPY ./cmd ./cmd +COPY ./database ./database +COPY ./forks ./forks +COPY ./interfaces ./interfaces +COPY ./northbound ./northbound +COPY ./nucleus ./nucleus + RUN GOOS=linux go build $BUILDARGS ./cmd/gosdn FROM debian:latest EXPOSE 8080 EXPOSE 55055 COPY --from=builder /src/gosdn/gosdn . -COPY --from=builder /src/gosdn/configs ./configs +COPY ./configs ./configs ENTRYPOINT [ "./gosdn" ] CMD [""] diff --git a/build/ci/.build-container.yml b/build/ci/.build-container.yml index 12dfb819df09e377633a89e1c7db23484925b2a0..642139656967655780033dc337cac8a420a10b5b 100644 --- a/build/ci/.build-container.yml +++ b/build/ci/.build-container.yml @@ -1,64 +1,40 @@ variables: DOCKER_TLS_CERTDIR: "/certs" -.build: &build +build-docker: before_script: - echo "override global before script" - image: docker:19.03.12 - services: - - name: docker:19.03.12-dind - command: ["--registry-mirror", "http://141.100.70.170:6000", "--dns", "1.1.1.1"] stage: build + allow_failure: false + needs: [] tags: - - dind - script: - - docker info - - > - docker build \ - --build-arg GITLAB_USER=$GO_MODULES_USER \ - --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN \ - --build-arg BUILDARGS=$BUILDARGS \ - -t $DOCKER_IMAGE_SHA . - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker push $DOCKER_IMAGE_SHA - - docker tag $DOCKER_IMAGE_SHA $TAG - - docker tag $DOCKER_IMAGE_SHA registry.code.fbi.h-da.de/cocsn/gosdn:${CI_PIPELINE_ID} - - docker push $TAG + - shell-builder -build:develop: - variables: - TAG: $CI_REGISTRY_IMAGE:develop - BUILDARGS: -race rules: - if: $CI_COMMIT_BRANCH == "develop" && $CI_NIGHTLY == null - <<: *build - -build:nightly:develop: - variables: - TAG: $CI_REGISTRY_IMAGE:nightly-develop - BUILDARGS: -race - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:develop + BUILDARGS: -race - if: $CI_NIGHTLY == "develop" - <<: *build - -build:nightly: - variables: - TAG: $CI_REGISTRY_IMAGE:nightly - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:nightly-develop + BUILDARGS: -race - if: $CI_NIGHTLY == "mainline" - <<: *build - -build:merge-request: - variables: - TAG: $CI_REGISTRY_IMAGE:merge-request - BUILDARGS: -race - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:nightly - if: $CI_PIPELINE_SOURCE == "merge_request_event" - <<: *build - -build:latest: - variables: - TAG: $CI_REGISTRY_IMAGE:latest - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:merge-request + BUILDARGS: -race - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_NIGHTLY == null - <<: *build \ No newline at end of file + variables: + TAG: $CI_REGISTRY_IMAGE:latest + + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t $DOCKER_IMAGE_SHA . + - docker push $DOCKER_IMAGE_SHA + - docker tag $DOCKER_IMAGE_SHA $TAG + - docker push $TAG + - docker build --target installer --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t registry.code.fbi.h-da.de/cocsn/gosdn:testing_${CI_PIPELINE_ID} . + - docker push registry.code.fbi.h-da.de/cocsn/gosdn:testing_${CI_PIPELINE_ID} \ No newline at end of file diff --git a/build/ci/.containerlab-ci.yml b/build/ci/.containerlab-ci.yml index dd69edc646669eec082e1974340839cc9f99dd47..f968e0a136f22c954d7d0077fafe1cee99924a86 100644 --- a/build/ci/.containerlab-ci.yml +++ b/build/ci/.containerlab-ci.yml @@ -48,12 +48,12 @@ containerlab:template: paths: - ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml - containerlab:deploy: extends: - .containerlab_template - .containerlab_rules stage: apply + needs: ["containerlab:template", "build-docker"] script: - sudo containerlab deploy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml --reconfigure - echo "GOSDN_HTTP_PORT=$(docker inspect -f '{{ (index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort }}' clab-${CLAB_NAME}-gosdn)" >> ${CI_PROJECT_DIR}/build.env diff --git a/build/ci/.deploy-k8s.yml b/build/ci/.deploy-k8s.yml index 9642ce0cac4f6cd0fc379fda9921c9e30f9fe61f..8f3458606261bff2f0c39a45eacfa20b2062d06f 100644 --- a/build/ci/.deploy-k8s.yml +++ b/build/ci/.deploy-k8s.yml @@ -27,7 +27,7 @@ deploy:develop: <<: *deploy stage: deploy needs: - - job: "build:develop" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -37,7 +37,7 @@ deploy:latest: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -47,7 +47,7 @@ deploy:nightly:mainline: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -57,7 +57,7 @@ deploy:nightly:develop: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: diff --git a/build/ci/.test.yml b/build/ci/.test.yml index 65ef4b5e85f22990b2a7a5e5f652f052dab37f84..106d29b7893283c1d9751fd7c1aad12c7bf999c0 100644 --- a/build/ci/.test.yml +++ b/build/ci/.test.yml @@ -1,5 +1,5 @@ .integration-test: &integration-test - image: golang:1.16 + image: registry.code.fbi.h-da.de/cocsn/gosdn:testing_${CI_PIPELINE_ID} stage: integration-test needs: - job: "containerlab:deploy" @@ -34,7 +34,7 @@ integration-test:api: - go test -race -v -run TestApiIntegration .test: &test - image: golang:1.16 + image: registry.code.fbi.h-da.de/cocsn/gosdn:testing_${CI_PIPELINE_ID} stage: test allow_failure: true variables: @@ -55,6 +55,7 @@ unit-test: <<: *test controller-test: + image: golang:1.16 script: - go test -race -v -run TestRun <<: *test