diff --git a/.gitlab/ci/.build-container.yml b/.gitlab/ci/.build-container.yml index a2a782b8b51341d609e34b049cf50d97ded87b16..aa4fc2c1eb96853099d674aa94764e2655099d67 100644 --- a/.gitlab/ci/.build-container.yml +++ b/.gitlab/ci/.build-container.yml @@ -9,14 +9,14 @@ build-testing-image: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build -t "$GOSDN_TESTING_IMAGE" -f "${CI_PROJECT_DIR}/controller/Dockerfile" --target "installer" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . + - docker buildx build -t "$GOSDN_TESTING_IMAGE" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --target "builder" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . - docker push "$GOSDN_TESTING_IMAGE" <<: *build build-image: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build -t "$CI_REGISTRY_IMAGE:$TAG" -f "${CI_PROJECT_DIR}/controller/Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . + - docker buildx build -t "$CI_REGISTRY_IMAGE:$TAG" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . - docker push "$CI_REGISTRY_IMAGE:$TAG" # replace all slashes in the tag with hyphen, because slashes are not allowed in tags - NEWTAG=${CI_COMMIT_BRANCH//\//-} diff --git a/Makefile b/Makefile index 32c585e989c212701d80f39be3fa4caf4795920e..b21e5071db4cc659e76265740e152e1ebd7516ec 100644 --- a/Makefile +++ b/Makefile @@ -52,32 +52,49 @@ generate-csbi-yang-models: install-tools ../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\ go generate -build: pre - $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn +build: pre build-gosdn build-gosdnc build-orchestrator + +build-gosdn: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn + +build-gosdnc: pre CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdnc ./cli/ + +build-orchestrator: pre CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/ -start: build - ./$(BUILD_ARTIFACTS_PATH)/gosdn -l debug --config ./controller/configs/gosdn.toml +containerize-all: containerize-gosdn containerize-gosdnc containerize-orchestrator containerize-target + +containerize-gosdn: + docker buildx build --rm -t gosdn -f controller/controller.Dockerfile . + +containerize-gosdnc: + docker buildx build --rm -t gosdnc -f cli/cli.Dockerfile . -container: build - docker build -t gosdn -f controller/Dockerfile . - docker build -t gosdnc -f cli/Dockerfile . - docker build -t orchestrator -f csbi/Dockerfile . - docker build -t gnmi-target -f csbi/gnmi-target/Dockerfile . +containerize-orchestrator: + docker buildx build --rm -t orchestrator -f csbi/csbi.Dockerfile . -containerlab-start: container +containerize-target: + docker buildx build --rm -t gnmi-target -f csbi/gnmi-target/gnmitarget.Dockerfile . + +containerlab-start: containerize-all sudo containerlab deploy --topo gosdn.clab.yaml + containerlab-stop: sudo containerlab destroy --topo gosdn.clab.yaml + containerlab-graph: sudo containerlab graph --topo gosdn.clab.yaml shell-gosdn: docker exec -it clab-gosdn_csbi_arista_base-gosdn bash + shell-orchestrator: docker exec -it clab-gosdn_csbi_arista_base-orchestrator bash +start: build-gosdn + ./$(BUILD_ARTIFACTS_PATH)/gosdn -l debug --config ./controller/configs/gosdn.toml + clean: $(GOCLEAN) rm -rf $(BUILD_ARTIFACTS_PATH) diff --git a/cli/Dockerfile b/cli/Dockerfile deleted file mode 100644 index 873bf8d72c88454a430ce4c9d7af8ac3c4cb4023..0000000000000000000000000000000000000000 --- a/cli/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -ARG GOLANG_VERSION=1.18 -ARG BUILDARGS -ARG $GITLAB_PROXY - -FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-buster AS installer - -WORKDIR /gosdn/ -COPY go.* ./ -RUN go mod download - -FROM installer as builder -COPY . . -RUN make build - - -FROM scratch as gosdnc - -COPY --from=builder /gosdn/artifacts/gosdnc / - -ENTRYPOINT ["/gosdnc"] diff --git a/cli/cli.Dockerfile b/cli/cli.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..5787b748088a30b0b4849143b095ec654ebe665b --- /dev/null +++ b/cli/cli.Dockerfile @@ -0,0 +1,17 @@ +ARG GOLANG_VERSION=1.18 +ARG BUILDARGS +ARG $GITLAB_PROXY + +FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-alpine AS builder +WORKDIR /gosdn/ +RUN apk add build-base +COPY . . +RUN --mount=type=cache,target=/root/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + make build-gosdnc + +FROM scratch as gosdnc + +COPY --from=builder /gosdn/artifacts/gosdnc / + +ENTRYPOINT ["./gosdnc"] diff --git a/cli/cli.Dockerfile.dockerignore b/cli/cli.Dockerfile.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..5cd2977c806f4acb1116ab34e4bd60c9fe69e2cb --- /dev/null +++ b/cli/cli.Dockerfile.dockerignore @@ -0,0 +1,17 @@ +.git +.gitlab +build +documentation +mocks +test +clab-gosdn_csbi_arista_base +.cobra.yaml +*.dockerignore +.gitlab-ci.yaml +ARCHITECTURE.md +CONTRIBUTING.md +README.md +artifacts +build-tools +models +csbi diff --git a/controller/Dockerfile b/controller/Dockerfile deleted file mode 100644 index 0dd6c87560f54991fa895628fe0b6a4241d9dd97..0000000000000000000000000000000000000000 --- a/controller/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -ARG GOLANG_VERSION=1.18 -ARG BUILDARGS -ARG $GITLAB_PROXY - -FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-buster AS installer - -WORKDIR /gosdn/ -COPY go.* ./ -RUN go mod download - -FROM installer as builder -COPY . . -RUN make build - -FROM builder as gosdn -COPY controller/configs/development-gosdn.toml.example /gosdn/configs/development-gosdn.toml -COPY controller/configs/containerlab-gosdn.toml.example /gosdn/configs/containerlab-gosdn.toml -ENTRYPOINT ["/gosdn/artifacts/gosdn"] diff --git a/controller/Makefile b/controller/Makefile index b06c7ba44e2be6735c43710775caf7569845ce1d..172b33e0d35f2a4fa5ff234457f3c2fdaaca0005 100644 --- a/controller/Makefile +++ b/controller/Makefile @@ -36,16 +36,16 @@ start-insecure: clean build ENVIRONMENT=development ./$(BINARY_NAME) -l debug -s insecure unit-test: install-tools - ENVIRONMENT=testing ./$(TOOLS_DIR)/gotestsum --junitfile report.xml --format testname -- -short -race $$( go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out + ENVIRONMENT=testing ./$(TOOLS_DIR)/gotestsum --junitfile report.xml --format testname -- -short -race $$( go list ./... | grep -v /forks/ | grep -v /mocks ) -v -trimpath -coverprofile=coverage.out controller-test: install-tools ENVIRONMENT=testing ./$(TOOLS_DIR)/gotestsum --junitfile report.xml --format testname -- -race -v -run TestRun ci-unit-test: ci-install-tools - ENVIRONMENT=testing gotestsum --junitfile report.xml --format testname -- -short -race $$( go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out -covermode atomic -timeout 30m + ENVIRONMENT=testing gotestsum --junitfile report.xml --format testname -- -short -race $$( go list ./... | grep -v /forks/ | grep -v /mocks ) -v -trimpath -coverprofile=coverage.out -covermode atomic -timeout 30m ci-controller-test: ci-install-tools - ENVIRONMENT=testing gotestsum --junitfile report.xml --format testname -- -race -v -run TestRun -coverprofile=coverage.out + ENVIRONMENT=testing gotestsum --junitfile report.xml --format testname -- -race -v -run TestRun -trimpath -coverprofile=coverage.out integration-test-nucleus: ENVIRONMENT=testing &&\ diff --git a/controller/controller.Dockerfile b/controller/controller.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..344d7975dc1c8b1d85da6de18eabbf1045c1a423 --- /dev/null +++ b/controller/controller.Dockerfile @@ -0,0 +1,18 @@ +ARG GOLANG_VERSION=1.18 +ARG BUILDARGS +ARG $GITLAB_PROXY + +FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-alpine as builder +WORKDIR /gosdn/ +RUN apk add --no-cache build-base +RUN apk add --no-cache bash +COPY . . +RUN --mount=type=cache,target=/root/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + make build-gosdn + +# NOTE: We probably want to make this smaller +FROM builder as gosdn +COPY controller/configs/development-gosdn.toml.example ./configs/development-gosdn.toml +COPY controller/configs/containerlab-gosdn.toml.example ./configs/containerlab-gosdn.toml +ENTRYPOINT ["./artifacts/gosdn"] diff --git a/controller/controller.Dockerfile.dockerignore b/controller/controller.Dockerfile.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..111383275ecf5d879d3b7b6d0b3c73d9efe0a708 --- /dev/null +++ b/controller/controller.Dockerfile.dockerignore @@ -0,0 +1,17 @@ +.git +.gitlab +build +documentation +mocks +test +clab-gosdn_csbi_arista_base +.cobra.yaml +.dockeringore +.gitlab-ci.yaml +ARCHITECTURE.md +CONTRIBUTING.md +README.md +artifacts +build-tools +models/YangModels +models/arista diff --git a/controller/nucleus/plugin.go b/controller/nucleus/plugin.go index a2efabefbcaa263999b8a282471d273b3be11861..82e65626f4c59f2e8ccde923317243d4068ef930 100644 --- a/controller/nucleus/plugin.go +++ b/controller/nucleus/plugin.go @@ -27,6 +27,7 @@ func BuildPlugin(path string, sourceFileNames []string, args ...string) error { "go", "build", "-buildmode=plugin", + "-trimpath", "-o", pPath, } diff --git a/csbi/Dockerfile b/csbi/csbi.Dockerfile similarity index 60% rename from csbi/Dockerfile rename to csbi/csbi.Dockerfile index 01787be8f87af573f942e338c3fa4117303c16e7..b853e90c813b8db3b7f40e58a480976dcdce2de0 100644 --- a/csbi/Dockerfile +++ b/csbi/csbi.Dockerfile @@ -2,17 +2,19 @@ ARG GOLANG_VERSION=1.18 ARG BUILDARGS ARG $GITLAB_PROXY -FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-buster AS installer - +FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-alpine AS builder WORKDIR /gosdn/ +RUN apk add build-base +COPY ./models ./models +COPY ./forks ./forks +COPY ./Makefile . +COPY ./api ./api +COPY ./controller ./controller +COPY ./csbi ./csbi COPY go.* ./ -RUN go mod download - -FROM installer as builder - -COPY . . - -RUN make build +RUN --mount=type=cache,target=/root/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + make build-orchestrator FROM ${GITLAB_PROXY}golang:$GOLANG_VERSION-alpine RUN apk add --no-cache git make build-base diff --git a/csbi/csbi.Dockerfile.dockerignore b/csbi/csbi.Dockerfile.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..bc153b70b4e462fb428d76dd2a5cd19591324c47 --- /dev/null +++ b/csbi/csbi.Dockerfile.dockerignore @@ -0,0 +1,17 @@ +.git +.gitlab +build +documentation +mocks +test +clab-gosdn_csbi_arista_base +.cobra.yaml +.dockeringore +.gitlab-ci.yaml +ARCHITECTURE.md +CONTRIBUTING.md +README.md +artifacts +build-tools +models/YangModels/vendor +models/YangModels/experimental diff --git a/csbi/gnmi-target/Dockerfile b/csbi/gnmi-target/gnmitarget.Dockerfile similarity index 100% rename from csbi/gnmi-target/Dockerfile rename to csbi/gnmi-target/gnmitarget.Dockerfile diff --git a/csbi/gnmi-target/gnmitarget.Dockerfile.dockerignore b/csbi/gnmi-target/gnmitarget.Dockerfile.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..4e9a6933c180be822af54e684301a8af3608f96c --- /dev/null +++ b/csbi/gnmi-target/gnmitarget.Dockerfile.dockerignore @@ -0,0 +1,21 @@ +.git +.gitlab +build +documentation +mocks +test +clab-gosdn_csbi_arista_base +.cobra.yaml +*.dockerignore +.gitlab-ci.yaml +ARCHITECTURE.md +CONTRIBUTING.md +README.md +artifacts +build-tools +models +cli +controller +api +scripts +forks