From 5027f9c998758ba6e963cd9f95f1fccc3808cf13 Mon Sep 17 00:00:00 2001 From: Jim Ma Date: Tue, 25 Jan 2022 14:20:04 +0800 Subject: [PATCH] chore: use buildx to build docker images in e2e (#1018) * chore: build images concurrency Signed-off-by: Jim Ma --- .github/workflows/compatibility-e2e.yml | 10 +++++--- .github/workflows/e2e.yml | 15 ++++++++---- Makefile | 7 ++++++ build/images/base/README.md | 11 +++++++-- .../daemon/peer/peertask_piecetask_poller.go | 3 ++- client/daemon/storage/local_storage.go | 2 +- hack/build.sh | 14 +++++++++++ hack/docker-build.sh | 3 +-- hack/gen-buildx.sh | 24 +++++++++++++++++++ test/testdata/charts/config.yaml | 7 ++++++ 10 files changed, 82 insertions(+), 14 deletions(-) create mode 100755 hack/gen-buildx.sh diff --git a/.github/workflows/compatibility-e2e.yml b/.github/workflows/compatibility-e2e.yml index 6d819c4b8..64d23216b 100644 --- a/.github/workflows/compatibility-e2e.yml +++ b/.github/workflows/compatibility-e2e.yml @@ -45,6 +45,12 @@ jobs: mkdir -p /tmp/artifact go mod vendor + - name: Setup buildx + uses: docker/setup-buildx-action@v1 + id: buildx + with: + install: true + - name: Setup Kind uses: engineerd/setup-kind@v0.5.0 with: @@ -53,11 +59,9 @@ jobs: - name: Build images run: | + hack/gen-buildx.sh make docker-build docker-build-testing-tools docker pull dragonflyoss/${{ matrix.module }}:${{ env.DRAGONFLY_STABLE_IMAGE_TAG }} - - - name: Prepare kind environment - run: | make kind-load kind load docker-image dragonflyoss/${{ matrix.module }}:${{ env.DRAGONFLY_STABLE_IMAGE_TAG }} diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index a9f84b887..cb984f82f 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -38,7 +38,12 @@ jobs: go mod download github.com/go-task/slim-sprig go install github.com/onsi/ginkgo/v2/ginkgo@v2.1.0 mkdir -p /tmp/artifact - go mod vendor + + - name: Setup buildx + uses: docker/setup-buildx-action@v1 + id: buildx + with: + install: true - name: Setup Kind uses: engineerd/setup-kind@v0.5.0 @@ -47,10 +52,10 @@ jobs: config: ${{ env.KIND_CONFIG_PATH }} - name: Build images - run: make docker-build docker-build-testing-tools - - - name: Prepare kind environment - run: make kind-load + run: | + hack/gen-buildx.sh + make docker-build docker-build-testing-tools + make kind-load - name: Setup dragonfly run: | diff --git a/Makefile b/Makefile index 9ed76e3fa..740017887 100644 --- a/Makefile +++ b/Makefile @@ -127,6 +127,12 @@ build-manager: build-dirs ./hack/build.sh manager .PHONY: build-manager +# Build manager console +build-manager-console: build-dirs + @echo "Begin to build manager." + ./hack/build.sh manager-console +.PHONY: build-manager-console + # Install cdn install-cdn: @echo "Begin to install cdn." @@ -304,6 +310,7 @@ help: @echo "make build-dfget-linux build linux dfget" @echo "make build-scheduler build scheduler" @echo "make build-manager build manager" + @echo "make build-manager-console build manager console" @echo "make install-cdn install CDN" @echo "make install-dfget install dfget" @echo "make install-scheduler install scheduler" diff --git a/build/images/base/README.md b/build/images/base/README.md index fefa2790d..f9a594d9c 100644 --- a/build/images/base/README.md +++ b/build/images/base/README.md @@ -5,8 +5,15 @@ ### Build Base Image ```shell -BASE_IMAGE=dragonflyoss/base:bpftrace-v0.13.0-go-v1.16.6 +docker build -t dragonflyoss/base:bpftrace-v0.13.0-go-v1.17.4 -f Dockerfile . +``` +### Run Debug Container + +```shell +BASE_IMAGE=dragonflyoss/base:bpftrace-v0.13.0-go-v1.17.4 + +# run debug container docker run -ti -v /usr/src:/usr/src:ro \ -v /lib/modules/:/lib/modules:ro \ -v /sys/kernel/debug/:/sys/kernel/debug:rw \ @@ -22,7 +29,7 @@ export GOTAGS="debug" # gcflags for dlv export GOGCFLAGS="all=-N -l" # base image -export BASE_IMAGE=dragonflyoss/base:bpftrace-v0.13.0-go-v1.16.6 +export BASE_IMAGE=dragonflyoss/base:bpftrace-v0.13.0-go-v1.17.4 make docker-build ``` diff --git a/client/daemon/peer/peertask_piecetask_poller.go b/client/daemon/peer/peertask_piecetask_poller.go index 8011d72a4..bd8c9f810 100644 --- a/client/daemon/peer/peertask_piecetask_poller.go +++ b/client/daemon/peer/peertask_piecetask_poller.go @@ -94,7 +94,8 @@ retry: ptc.Debugf("try get piece task from peer %s, piece num: %d, limit: %d\"", peer.PeerId, request.StartNum, request.Limit) p, err := poller.getPieceTasksByPeer(span, curPeerPacket, peer, request) if err == nil { - ptc.Infof("got piece task from peer %s ok, pieces length: %d, totalPiece: %d", peer.PeerId, len(p.PieceInfos), p.TotalPiece) + ptc.Infof("got piece task from peer %s ok, pieces length: %d, totalPiece: %d, content length: %d, piece md5 sign: %s", + peer.PeerId, len(p.PieceInfos), p.TotalPiece, p.ContentLength, p.PieceMd5Sign) span.SetAttributes(config.AttributeGetPieceCount.Int(len(p.PieceInfos))) return p, nil } diff --git a/client/daemon/storage/local_storage.go b/client/daemon/storage/local_storage.go index 22d235b56..af8b220a8 100644 --- a/client/daemon/storage/local_storage.go +++ b/client/daemon/storage/local_storage.go @@ -174,7 +174,7 @@ func (t *localTaskStore) UpdateTask(ctx context.Context, req *UpdateTaskRequest) t.TotalPieces = req.TotalPieces t.Debugf("update total pieces: %d", t.TotalPieces) } - if len(t.PieceMd5Sign) == 0 { + if len(t.PieceMd5Sign) == 0 && len(req.PieceMd5Sign) > 0 { t.PieceMd5Sign = req.PieceMd5Sign t.Debugf("update piece md5 sign: %s", t.PieceMd5Sign) } diff --git a/hack/build.sh b/hack/build.sh index 93d210787..68d1b0e47 100755 --- a/hack/build.sh +++ b/hack/build.sh @@ -103,6 +103,14 @@ build-manager-docker() { build-docker ${MANAGER_BINARY_NAME} manager } +build-manager-console() { + set -x + consoleDir=$(echo $curDir | sed 's#hack#manager/console#') + docker run --workdir=/build \ + --rm -v ${consoleDir}:/build node:12-alpine \ + sh -c "npm install --loglevel warn --progress false && npm run build" +} + main() { create-dirs if [[ "1" == "${USE_DOCKER}" ]]; then @@ -120,6 +128,9 @@ main() { manager) build-manager-docker ;; + manager-console) + build-manager-console + ;; *) build-dfget-docker build-cdn-docker @@ -142,6 +153,9 @@ main() { manager) build-manager-local ;; + manager-console) + build-manager-console + ;; *) build-dfget-local build-cdn-local diff --git a/hack/docker-build.sh b/hack/docker-build.sh index 3ca726543..a8c410f1f 100755 --- a/hack/docker-build.sh +++ b/hack/docker-build.sh @@ -41,8 +41,6 @@ git-submodule() { } main() { - git-submodule - case "${1-}" in cdn) docker-build cdn @@ -54,6 +52,7 @@ main() { docker-build scheduler ;; manager) + git-submodule docker-build manager esac } diff --git a/hack/gen-buildx.sh b/hack/gen-buildx.sh new file mode 100755 index 000000000..822b77fab --- /dev/null +++ b/hack/gen-buildx.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +components="cdn scheduler manager" + +set -x + +for c in ${components}; do + file=build/images/"${c}"/Dockerfile + sed -i '1i# syntax=docker/dockerfile:1.3' "${file}" + sed -i "s#RUN make build-$c && make install-$c#RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/root/go/ export GOPATH=/root/go \&\& make build-$c \&\& make install-$c#" "${file}" +done + +# dfdaemon is subcommand, need to update alone +sed -i '1i# syntax=docker/dockerfile:1.3' build/images/dfdaemon/Dockerfile +sed -i "s#RUN make build-dfget && make install-dfget#RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/root/go/ export GOPATH=/root/go \&\& make build-dfget \&\& make install-dfget#" build/images/dfdaemon/Dockerfile + +# buildx need "--load" to export images to docker +sed -i 's/docker build/docker build --load/' hack/docker-build.sh +sed -i 's/docker build/docker build --load/' test/tools/no-content-length/build.sh + +# TODO build console in https://github.com/dragonflyoss/console, and build image with github action cache +# remove npm build, use "make build-manager-console" separated +# sed -i '12,18d' build/images/manager/Dockerfile +# sed -i 's#COPY --from=console-builder /build/dist /opt/dragonfly/manager/console/dist#COPY ./manager/console/dist /opt/dragonfly/manager/console/dist#' build/images/manager/Dockerfile \ No newline at end of file diff --git a/test/testdata/charts/config.yaml b/test/testdata/charts/config.yaml index f3e81216f..d44757621 100644 --- a/test/testdata/charts/config.yaml +++ b/test/testdata/charts/config.yaml @@ -13,6 +13,8 @@ scheduler: - name: artifact hostPath: path: /tmp/artifact + config: + verbose: true cdn: image: d7yio/cdn @@ -33,6 +35,8 @@ cdn: - name: artifact hostPath: path: /tmp/artifact + config: + verbose: true dfdaemon: image: d7yio/dfdaemon @@ -51,6 +55,7 @@ dfdaemon: config: verbose: true pprofPort: 9999 + metrics: 127.0.0.1:8888 scheduler: disableAutoBackSource: true proxy: @@ -84,3 +89,5 @@ manager: - name: artifact hostPath: path: /tmp/artifact + config: + verbose: true