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 mkdir -p /tmp/artifact
go mod vendor go mod vendor
- name: Setup buildx
uses: docker/setup-buildx-action@v1
id: buildx
with:
install: true
- name: Setup Kind - name: Setup Kind
uses: engineerd/setup-kind@v0.5.0 uses: engineerd/setup-kind@v0.5.0
with: with:
@ -53,11 +59,9 @@ jobs:
- name: Build images - name: Build images
run: | run: |
hack/gen-buildx.sh
make docker-build docker-build-testing-tools make docker-build docker-build-testing-tools
docker pull dragonflyoss/${{ matrix.module }}:${{ env.DRAGONFLY_STABLE_IMAGE_TAG }} docker pull dragonflyoss/${{ matrix.module }}:${{ env.DRAGONFLY_STABLE_IMAGE_TAG }}
- name: Prepare kind environment
run: |
make kind-load make kind-load
kind load docker-image dragonflyoss/${{ matrix.module }}:${{ env.DRAGONFLY_STABLE_IMAGE_TAG }} 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 mod download github.com/go-task/slim-sprig
go install github.com/onsi/ginkgo/v2/ginkgo@v2.1.0 go install github.com/onsi/ginkgo/v2/ginkgo@v2.1.0
mkdir -p /tmp/artifact mkdir -p /tmp/artifact
go mod vendor
- name: Setup buildx
uses: docker/setup-buildx-action@v1
id: buildx
with:
install: true
- name: Setup Kind - name: Setup Kind
uses: engineerd/setup-kind@v0.5.0 uses: engineerd/setup-kind@v0.5.0
@ -47,10 +52,10 @@ jobs:
config: ${{ env.KIND_CONFIG_PATH }} config: ${{ env.KIND_CONFIG_PATH }}
- name: Build images - name: Build images
run: make docker-build docker-build-testing-tools run: |
hack/gen-buildx.sh
- name: Prepare kind environment make docker-build docker-build-testing-tools
run: make kind-load make kind-load
- name: Setup dragonfly - name: Setup dragonfly
run: | run: |

View File

@ -127,6 +127,12 @@ build-manager: build-dirs
./hack/build.sh manager ./hack/build.sh manager
.PHONY: build-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
install-cdn: install-cdn:
@echo "Begin to install cdn." @echo "Begin to install cdn."
@ -304,6 +310,7 @@ help:
@echo "make build-dfget-linux build linux dfget" @echo "make build-dfget-linux build linux dfget"
@echo "make build-scheduler build scheduler" @echo "make build-scheduler build scheduler"
@echo "make build-manager build manager" @echo "make build-manager build manager"
@echo "make build-manager-console build manager console"
@echo "make install-cdn install CDN" @echo "make install-cdn install CDN"
@echo "make install-dfget install dfget" @echo "make install-dfget install dfget"
@echo "make install-scheduler install scheduler" @echo "make install-scheduler install scheduler"

View File

@ -5,8 +5,15 @@
### Build Base Image ### Build Base Image
```shell ```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 \ docker run -ti -v /usr/src:/usr/src:ro \
-v /lib/modules/:/lib/modules:ro \ -v /lib/modules/:/lib/modules:ro \
-v /sys/kernel/debug/:/sys/kernel/debug:rw \ -v /sys/kernel/debug/:/sys/kernel/debug:rw \
@ -22,7 +29,7 @@ export GOTAGS="debug"
# gcflags for dlv # gcflags for dlv
export GOGCFLAGS="all=-N -l" export GOGCFLAGS="all=-N -l"
# base image # 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 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) 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) p, err := poller.getPieceTasksByPeer(span, curPeerPacket, peer, request)
if err == nil { 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))) span.SetAttributes(config.AttributeGetPieceCount.Int(len(p.PieceInfos)))
return p, nil return p, nil
} }

View File

@ -174,7 +174,7 @@ func (t *localTaskStore) UpdateTask(ctx context.Context, req *UpdateTaskRequest)
t.TotalPieces = req.TotalPieces t.TotalPieces = req.TotalPieces
t.Debugf("update total pieces: %d", t.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.PieceMd5Sign = req.PieceMd5Sign
t.Debugf("update piece md5 sign: %s", t.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-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() { main() {
create-dirs create-dirs
if [[ "1" == "${USE_DOCKER}" ]]; then if [[ "1" == "${USE_DOCKER}" ]]; then
@ -120,6 +128,9 @@ main() {
manager) manager)
build-manager-docker build-manager-docker
;; ;;
manager-console)
build-manager-console
;;
*) *)
build-dfget-docker build-dfget-docker
build-cdn-docker build-cdn-docker
@ -142,6 +153,9 @@ main() {
manager) manager)
build-manager-local build-manager-local
;; ;;
manager-console)
build-manager-console
;;
*) *)
build-dfget-local build-dfget-local
build-cdn-local build-cdn-local

View File

@ -41,8 +41,6 @@ git-submodule() {
} }
main() { main() {
git-submodule
case "${1-}" in case "${1-}" in
cdn) cdn)
docker-build cdn docker-build cdn
@ -54,6 +52,7 @@ main() {
docker-build scheduler docker-build scheduler
;; ;;
manager) manager)
git-submodule
docker-build manager docker-build manager
esac 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 - name: artifact
hostPath: hostPath:
path: /tmp/artifact path: /tmp/artifact
config:
verbose: true
cdn: cdn:
image: d7yio/cdn image: d7yio/cdn
@ -33,6 +35,8 @@ cdn:
- name: artifact - name: artifact
hostPath: hostPath:
path: /tmp/artifact path: /tmp/artifact
config:
verbose: true
dfdaemon: dfdaemon:
image: d7yio/dfdaemon image: d7yio/dfdaemon
@ -51,6 +55,7 @@ dfdaemon:
config: config:
verbose: true verbose: true
pprofPort: 9999 pprofPort: 9999
metrics: 127.0.0.1:8888
scheduler: scheduler:
disableAutoBackSource: true disableAutoBackSource: true
proxy: proxy:
@ -84,3 +89,5 @@ manager:
- name: artifact - name: artifact
hostPath: hostPath:
path: /tmp/artifact path: /tmp/artifact
config:
verbose: true