Skip to content
Snippets Groups Projects
Verified Commit d4042baf authored by Widera, Pascal's avatar Widera, Pascal
Browse files

changed build process to kaniko and separated into 2 job,

changed and introduced variables for container images and go version,
replaced go test with gotestsum to allow export of junit files to gitlab
parent a72c82fc
No related branches found
No related tags found
2 merge requests!208changed pipeline for new runner,!206Draft: Check unit tests
Pipeline #85111 failed
.git
.gitlab
build
documentation
mocks
test
.cobra.yaml
.dockeringore
.gitlab-ci.yaml
ARCHITECTURE.md
CONTRIBUTING.md
Dockerfile.alpine
README.md
\ No newline at end of file
variables:
SECURE_ANALYZERS_PREFIX: registry.gitlab.com/gitlab-org/security-products/analyzers
DOCKER_IMAGE_SHA: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
GOSDN_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
GOSDN_TESTING_IMAGE: "${CI_REGISTRY_IMAGE}:testing_${CI_COMMIT_SHA}"
CEOS_IMAGE: "$CI_REGISTRY_IMAGE/ceos:latest"
GOLANG_VERSION: "1.16"
stages:
- .pre
......@@ -17,10 +19,6 @@ workflow:
when: never
- when: always
default:
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"
include:
- local: '/.gitlab/ci/.build-container.yml'
- local: '/.gitlab/ci/.code-quality-ci.yml'
......@@ -29,4 +27,4 @@ include:
- local: '/.gitlab/ci/.containerlab-ci.yml'
- local: '/.gitlab/ci/.integration-test.yml'
- local: '/.gitlab/ci/.uml-autogen-ci.yml'
- local: '/.gitlab/ci/.deploy-k8s.yml'
# - local: '/.gitlab/ci/.deploy-k8s.yml'
variables:
DOCKER_TLS_CERTDIR: "/certs"
build-docker:
before_script:
- echo "override global before script"
.build: &build
stage: build
allow_failure: false
needs: []
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [ "" ]
variables:
TAG: $CI_COMMIT_BRANCH
tags:
- shell-builder
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
......@@ -21,17 +14,33 @@ build-docker:
TAG: develop
BUILDARGS: -race
- when: always
- variables:
TAG: $CI_COMMIT_SHA
before_script:
# replace all slashes in the tag with hyphen, because slashes are not allowed in tags
- TAG=${TAG//\//-}
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" >/kaniko/.docker/config.json
needs: []
build-testing-image:
script:
- /kaniko/executor
--cache=true
--context "$CI_PROJECT_DIR"
--dockerfile "Dockerfile"
--build-arg "GOLANG_VERSION=$GOLANG_VERSION"
--build-arg "BUILDARGS=$BUILDARGS"
--destination "$GOSDN_TESTING_IMAGE"
--target "installer"
<<: *build
build-image:
script:
# replace all slashes in the tag with hyphen, because slashes are not allowed in tags
- TAG=${TAG//\//-}
- TARGET=$CI_REGISTRY_IMAGE:$TAG
- 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 $TARGET
- docker push $TARGET
- docker build --target installer --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} .
- docker push ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID}
- /kaniko/executor
--cache=true
--context "$CI_PROJECT_DIR"
--dockerfile "Dockerfile"
--build-arg "GOLANG_VERSION=$GOLANG_VERSION"
--build-arg "BUILDARGS=$BUILDARGS"
--destination "$GOSDN_IMAGE"
--destination "$CI_REGISTRY_IMAGE:$TAG"
<<: *build
......@@ -9,3 +9,5 @@ code-quality:
codequality: gl-code-quality-report.json
paths:
- gl-code-quality-report.json
needs: []
\ No newline at end of file
variables:
CEOS_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE/ceos:latest"
GOSDN_CONTAINER_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
CLAB_DIR: "/mnt"
CLAB_NAME: "clab${CI_PIPELINE_IID}"
......@@ -13,9 +11,9 @@ variables:
- cd ${CLAB_DIR}
- export PATH="${PATH}:${CI_PROJECT_DIR}/.gitlab/ci/scripts"
- echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
- echo ${GOSDN_CONTAINER_IMAGE}
- docker pull ${GOSDN_CONTAINER_IMAGE}
- docker pull ${CEOS_CONTAINER_IMAGE}
- echo ${GOSDN_IMAGE}
- docker pull ${GOSDN_IMAGE}
- docker pull ${CEOS_IMAGE}
.containerlab_template: &containerlab_template
image: alpine:latest
......@@ -27,8 +25,8 @@ variables:
- export CLAB_MGMT_SUBNET="172.$firstOctet.$secondOctet.0/24"
script:
- |
sed -e "s|@@CEOS_CONTAINER_IMAGE@@|${CEOS_CONTAINER_IMAGE}|g" \
-e "s|@@GOSDN_CONTAINER_IMAGE@@|${GOSDN_CONTAINER_IMAGE}|g" \
sed -e "s|@@CEOS_CONTAINER_IMAGE@@|${CEOS_IMAGE}|g" \
-e "s|@@GOSDN_CONTAINER_IMAGE@@|${GOSDN_IMAGE}|g" \
-e "s|@@CLAB_NAME@@|${CLAB_NAME}|g" \
-e "s|@@CLAB_MGMT_SUBNET@@|${CLAB_MGMT_SUBNET}|g" \
${CLAB_TEMPLATE} > ${CLAB_NAME}.clab.yml
......@@ -72,7 +70,7 @@ containerlab:destroy:
script:
- sudo containerlab destroy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml
- docker volume rm -f ${CLAB_NAME}-volume
- docker image rm -f ${GOSDN_CONTAINER_IMAGE}
- docker image rm -f ${GOSDN_IMAGE}
allow_failure: true
when: always
......
build:k8s-bot:
stage: build
image: golang:1.16
image: golang:$GOLANG_VERSION
rules:
- if: $CI_COMMIT_BRANCH == "develop"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
......
.integration-test: &integration-test
image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID}
image: $GOSDN_TESTING_IMAGE
stage: integration-test
needs:
- job: "containerlab:deploy:integration"
......
.test: &test
image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID}
image: $GOSDN_TESTING_IMAGE
stage: test
variables:
GOSDN_LOG: "nolog"
GOSDN_CHANGE_TIMEOUT: "100ms"
before_script:
- go get gotest.tools/gotestsum
artifacts:
when: always
reports:
junit: report.xml
needs:
- build-testing-image
unit-test:
script:
- go test -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out
- gotestsum --junitfile report.xml --format testname -- -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out
# -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v
after_script:
- go tool cover -func=coverage.out
<<: *test
controller-test:
image: golang:1.16
script:
- go test -race -v -run TestRun
- gotestsum --junitfile report.xml --format testname -- -race -v -run TestRun
<<: *test
goplantuml:
image: golang:1.14
image: golang:$GOLANG_VERSION
stage: .post
only:
- develop
......
FROM golang:1.16-buster AS installer
ARG GITLAB_USER
ARG GITLAB_TOKEN
ARG GOLANG_VERSION=1.16
ARG BUILDARGS
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"
RUN go env -w GOPRIVATE=code.fbi.h-da.de/*
FROM golang:$GOLANG_VERSION-buster AS installer
WORKDIR /src/gosdn
COPY go.* ./
......@@ -13,17 +9,11 @@ RUN go mod download
FROM installer as builder
COPY *.go ./
COPY ./api ./api
COPY ./cmd ./cmd
COPY ./interfaces ./interfaces
COPY ./northbound ./northbound
COPY ./nucleus ./nucleus
COPY ./store ./store
COPY . ./
RUN GOOS=linux go build $BUILDARGS ./cmd/gosdn
FROM debian:latest
FROM debian:bullseye
EXPOSE 8080
EXPOSE 55055
COPY --from=builder /src/gosdn/gosdn .
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment