From 0b6df61ecaf86e5b03ba914db88db25d72ebe771 Mon Sep 17 00:00:00 2001 From: danfengl Date: Tue, 8 Nov 2022 08:35:00 +0000 Subject: [PATCH] Upload Velero build package saved from build image to Google cloud storage Signed-off-by: danfengl --- .github/workflows/e2e-test-kind.yaml | 2 +- .github/workflows/push.yml | 33 +++++++++++++++++++++++++--- Makefile | 6 +++++ hack/ci/build_util.sh | 9 ++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 hack/ci/build_util.sh diff --git a/.github/workflows/e2e-test-kind.yaml b/.github/workflows/e2e-test-kind.yaml index c41c7ff47..c8dbef185 100644 --- a/.github/workflows/e2e-test-kind.yaml +++ b/.github/workflows/e2e-test-kind.yaml @@ -51,7 +51,7 @@ jobs: - name: Build Velero Image if: steps.image-cache.outputs.cache-hit != 'true' run: | - IMAGE=velero VERSION=pr-test make container + SAVE_IMAGE=false IMAGE=velero VERSION=pr-test make container docker save velero:pr-test -o ./velero.tar # Run E2E test against all kubernetes versions on kind run-e2e-test: diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 060dda2bd..da8a979de 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -21,8 +21,14 @@ jobs: go-version: 1.18 id: go - - name: Check out code into the Go module directory - uses: actions/checkout@v2 + - uses: actions/checkout@v3 + + - uses: google-github-actions/setup-gcloud@v0 + with: + version: '285.0.0' + service_account_key: ${{ secrets.GCP_SA_KEY }} + export_default_credentials: true + - run: gcloud info - name: Set up QEMU id: qemu @@ -53,8 +59,29 @@ jobs: - name: Publish container image if: github.repository == 'vmware-tanzu/velero' run: | + # Build and push Velero image to docker registry docker login -u ${{ secrets.DOCKER_USER }} -p ${{ secrets.DOCKER_PASSWORD }} - ./hack/docker-push.sh + VERSION=$(./hack/docker-push.sh | grep 'VERSION:' | awk -F: '{print $2}' | xargs) + + # Upload Velero image package to GCS + source hack/ci/build_util.sh + BIN=velero + RESTORE_HELPER_BIN=velero-restore-helper + GCS_BUCKET=velero-builds + VELERO_IMAGE=${BIN}-${VERSION} + VELERO_RESTORE_HELPER_IMAGE=${RESTORE_HELPER_BIN}-${VERSION} + VELERO_IMAGE_FILE=${VELERO_IMAGE}.tar.gz + VELERO_RESTORE_HELPER_IMAGE_FILE=${VELERO_RESTORE_HELPER_IMAGE}.tar.gz + VELERO_IMAGE_BACKUP_FILE=${VELERO_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz + VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE=${VELERO_RESTORE_HELPER_IMAGE}-'build.'${GITHUB_RUN_NUMBER}.tar.gz + + cp ${VELERO_IMAGE_FILE} ${VELERO_IMAGE_BACKUP_FILE} + cp ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE} + + uploader ${VELERO_IMAGE_FILE} ${GCS_BUCKET} + uploader ${VELERO_RESTORE_HELPER_IMAGE_FILE} ${GCS_BUCKET} + uploader ${VELERO_IMAGE_BACKUP_FILE} ${GCS_BUCKET} + uploader ${VELERO_RESTORE_HELPER_IMAGE_BACKUP_FILE} ${GCS_BUCKET} # Use the JSON key in secret to login gcr.io - uses: 'docker/login-action@v1' diff --git a/Makefile b/Makefile index 4e8e72865..f44fd6adb 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,7 @@ VERSION ?= main TAG_LATEST ?= false +SAVE_IMAGE ?= true ifeq ($(TAG_LATEST), true) IMAGE_TAGS ?= $(IMAGE):$(VERSION) $(IMAGE):latest else @@ -209,6 +210,11 @@ endif --build-arg=RESTIC_VERSION=$(RESTIC_VERSION) \ -f $(VELERO_DOCKERFILE) . @echo "container: $(IMAGE):$(VERSION)" +ifeq ($(SAVE_IMAGE), true) + @docker pull $(IMAGE):$(VERSION) + @docker save $(IMAGE):$(VERSION) -o $(BIN)-$(VERSION).tar + @gzip $(BIN)-$(VERSION).tar +endif SKIP_TESTS ?= test: build-dirs diff --git a/hack/ci/build_util.sh b/hack/ci/build_util.sh new file mode 100644 index 000000000..599c84b63 --- /dev/null +++ b/hack/ci/build_util.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -x + +set -e + +function uploader { + gsutil cp $1 gs://$2/$1 + gsutil -D setacl public-read gs://$2/$1 &> /dev/null +}