chore: use buildx to build docker images in e2e (#1018)

* chore: build images concurrency

Signed-off-by: Jim Ma <majinjing3@gmail.com>
This commit is contained in:
Jim Ma 2022-01-25 14:20:04 +08:00 committed by Gaius
parent cb2f9298ce
commit 5027f9c998
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
10 changed files with 82 additions and 14 deletions

View File

@ -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 }}

View File

@ -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: |

View File

@ -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"

View File

@ -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
```

View File

@ -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
}

View File

@ -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)
}

View File

@ -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

View File

@ -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
}

24
hack/gen-buildx.sh Executable file
View File

@ -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

View File

@ -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