mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-11 22:10:11 +01:00
feat(build): support for multi arch container image (#233)
* support for multi arch container image via github actions * suffix amd64 arch tag in zfs driver image Signed-off-by: prateekpandey14 <prateek.pandey@mayadata.io>
This commit is contained in:
parent
64bc7cb1c9
commit
e52d6c7067
9 changed files with 389 additions and 29 deletions
88
.github/workflows/build.yml
vendored
Normal file
88
.github/workflows/build.yml
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
# Copyright 2020 The OpenEBS Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
name: build
|
||||
|
||||
on: ['push']
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Shellcheck
|
||||
uses: reviewdog/action-shellcheck@v1
|
||||
with:
|
||||
github_token: ${{ secrets.github_token }}
|
||||
reporter: github-pr-review
|
||||
path: '.'
|
||||
pattern: '*.sh'
|
||||
exclude: './.git/*,./vendor/*'
|
||||
|
||||
|
||||
unit-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Unit test
|
||||
run: make test
|
||||
|
||||
- name: Upload Coverage Report
|
||||
uses: codecov/codecov-action@v1
|
||||
|
||||
csi-driver:
|
||||
runs-on: ubuntu-latest
|
||||
needs: ['lint', 'unit-test']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set tag
|
||||
run: |
|
||||
BRANCH="${GITHUB_REF##*/}"
|
||||
CI_TAG=${BRANCH#v}-ci
|
||||
if [ ${BRANCH} = "master" ]; then
|
||||
CI_TAG="ci"
|
||||
fi
|
||||
echo "::set-env name=TAG::${CI_TAG}"
|
||||
echo "::set-env name=BRANCH::${BRANCH}"
|
||||
echo "BRANCH: ${BRANCH}"
|
||||
echo "TAG: ${CI_TAG}"
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
with:
|
||||
platforms: all
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build & Push Image
|
||||
env:
|
||||
IMAGE_ORG: ${{ secrets.IMAGE_ORG}}
|
||||
run: |
|
||||
make docker.buildx.csi-driver
|
||||
make buildx.push.csi-driver
|
||||
75
.github/workflows/pull_request.yml
vendored
Normal file
75
.github/workflows/pull_request.yml
vendored
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# Copyright 2020 The OpenEBS Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
name: ci
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
# on pull requests to master and release branches
|
||||
- master
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Shellcheck
|
||||
uses: reviewdog/action-shellcheck@v1
|
||||
with:
|
||||
github_token: ${{ secrets.github_token }}
|
||||
reporter: github-pr-review
|
||||
path: '.'
|
||||
pattern: '*.sh'
|
||||
exclude: './vendor/*'
|
||||
|
||||
|
||||
unit-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Unit test
|
||||
run: make test
|
||||
|
||||
- name: Upload Coverage Report
|
||||
uses: codecov/codecov-action@v1
|
||||
|
||||
|
||||
csi-driver:
|
||||
runs-on: ubuntu-latest
|
||||
needs: ['lint', 'unit-test']
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
with:
|
||||
platforms: all
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Build Image
|
||||
env:
|
||||
IMG_RESULT: cache
|
||||
run: make docker.buildx.csi-driver
|
||||
57
.github/workflows/release.yml
vendored
Normal file
57
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
# Copyright 2020 The OpenEBS Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
name: release
|
||||
|
||||
on:
|
||||
create:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
csi-driver:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v1
|
||||
|
||||
- name: Set Tag
|
||||
run: |
|
||||
TAG="${GITHUB_REF#refs/*/v}"
|
||||
echo "::set-env name=TAG::${TAG}"
|
||||
echo "::set-env name=RELEASE_TAG::${TAG}"
|
||||
echo "RELEASE_TAG ${TAG}"
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
with:
|
||||
platforms: all
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build & Push Image
|
||||
env:
|
||||
IMAGE_ORG: ${{ secrets.IMAGE_ORG}}
|
||||
run: |
|
||||
make docker.buildx.csi-driver
|
||||
make buildx.push.csi-driver
|
||||
4
Makefile
4
Makefile
|
|
@ -87,7 +87,7 @@ export XC_ARCH
|
|||
ARCH:=${XC_OS}_${XC_ARCH}
|
||||
export ARCH
|
||||
|
||||
export DBUILD_ARGS=--build-arg DBUILD_DATE=${DBUILD_DATE} --build-arg DBUILD_REPO_URL=${DBUILD_REPO_URL} --build-arg DBUILD_SITE_URL=${DBUILD_SITE_URL} --build-arg ARCH=${ARCH}
|
||||
export DBUILD_ARGS=--build-arg DBUILD_DATE=${DBUILD_DATE} --build-arg DBUILD_REPO_URL=${DBUILD_REPO_URL} --build-arg DBUILD_SITE_URL=${DBUILD_SITE_URL}
|
||||
|
||||
# Specify the name for the binary
|
||||
CSI_DRIVER=zfs-driver
|
||||
|
|
@ -259,3 +259,5 @@ license-check:
|
|||
fi
|
||||
@echo "--> Done checking license."
|
||||
@echo
|
||||
|
||||
include Makefile.buildx.mk
|
||||
|
|
|
|||
74
Makefile.buildx.mk
Normal file
74
Makefile.buildx.mk
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
|
||||
# Copyright 2018-2020 The OpenEBS Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# Build zfs-driver docker images with buildx
|
||||
# Experimental docker feature to build cross platform multi-architecture docker images
|
||||
# https://docs.docker.com/buildx/working-with-buildx/
|
||||
|
||||
ifeq (${TAG}, )
|
||||
export TAG=ci
|
||||
endif
|
||||
|
||||
# default list of platforms for which multiarch image is built
|
||||
ifeq (${PLATFORMS}, )
|
||||
export PLATFORMS="linux/amd64,linux/arm64"
|
||||
endif
|
||||
|
||||
# if IMG_RESULT is unspecified, by default the image will be pushed to registry
|
||||
ifeq (${IMG_RESULT}, load)
|
||||
export PUSH_ARG="--load"
|
||||
# if load is specified, image will be built only for the build machine architecture.
|
||||
export PLATFORMS="local"
|
||||
else ifeq (${IMG_RESULT}, cache)
|
||||
# if cache is specified, image will only be available in the build cache, it won't be pushed or loaded
|
||||
# therefore no PUSH_ARG will be specified
|
||||
else
|
||||
export PUSH_ARG="--push"
|
||||
endif
|
||||
|
||||
# Name of the multiarch image for csi-driver
|
||||
DOCKERX_IMAGE_CSI_DRIVER:=${IMAGE_ORG}/zfs-driver:${TAG}
|
||||
|
||||
.PHONY: docker.buildx
|
||||
docker.buildx:
|
||||
export DOCKER_CLI_EXPERIMENTAL=enabled
|
||||
@if ! docker buildx ls | grep -q container-builder; then\
|
||||
docker buildx create --platform ${PLATFORMS} --name container-builder --use;\
|
||||
fi
|
||||
@docker buildx build --platform "${PLATFORMS}" \
|
||||
-t "$(DOCKERX_IMAGE_NAME)" ${BUILD_ARGS} \
|
||||
-f $(PWD)/buildscripts/$(COMPONENT)/$(COMPONENT).Dockerfile \
|
||||
. ${PUSH_ARG}
|
||||
@echo "--> Build docker image: $(DOCKERX_IMAGE_NAME)"
|
||||
@echo
|
||||
|
||||
.PHONY: buildx.csi-driver
|
||||
buildx.csi-driver:
|
||||
@echo '--> Building csi-driver binary...'
|
||||
@pwd
|
||||
@PNAME=${CSI_DRIVER} CTLNAME=${CSI_DRIVER} BUILDX=true sh -c "'$(PWD)/buildscripts/build.sh'"
|
||||
@echo '--> Built binary.'
|
||||
@echo
|
||||
|
||||
.PHONY: docker.buildx.csi-driver
|
||||
docker.buildx.csi-driver: DOCKERX_IMAGE_NAME=$(DOCKERX_IMAGE_CSI_DRIVER)
|
||||
docker.buildx.csi-driver: COMPONENT=$(CSI_DRIVER)
|
||||
docker.buildx.csi-driver: BUILD_ARGS=$(DBUILD_ARGS)
|
||||
docker.buildx.csi-driver: docker.buildx
|
||||
|
||||
|
||||
.PHONY: buildx.push.csi-driver
|
||||
buildx.push.csi-driver:
|
||||
BUILDX=true DIMAGE=${IMAGE_ORG}/zfs-driver ./buildscripts/push
|
||||
|
|
@ -33,21 +33,21 @@ else
|
|||
fi
|
||||
|
||||
# Set BUILDMETA based on travis tag
|
||||
if [[ -n "$TRAVIS_TAG" ]] && [[ $TRAVIS_TAG != *"RC"* ]]; then
|
||||
if [[ -n "$RELEASE_TAG" ]] && [[ $RELEASE_TAG != *"RC"* ]]; then
|
||||
echo "released" > BUILDMETA
|
||||
fi
|
||||
|
||||
CURRENT_BRANCH=""
|
||||
if [ -z ${TRAVIS_BRANCH} ];
|
||||
if [ -z ${BRANCH} ];
|
||||
then
|
||||
CURRENT_BRANCH=$(git branch | grep \* | cut -d ' ' -f2)
|
||||
else
|
||||
CURRENT_BRANCH=${TRAVIS_BRANCH}
|
||||
CURRENT_BRANCH=${BRANCH}
|
||||
fi
|
||||
|
||||
# Get the version details
|
||||
if [ -n "$TRAVIS_TAG" ]; then
|
||||
VERSION="$TRAVIS_TAG"
|
||||
if [ -n "$RELEASE_TAG" ]; then
|
||||
VERSION="$RELEASE_TAG"
|
||||
else
|
||||
BUILDDATE=`date +%m-%d-%Y`
|
||||
SHORT_COMMIT="$(git rev-parse --short HEAD)"
|
||||
|
|
@ -72,15 +72,6 @@ elif [ "$UNAME" = "Linux" ] ; then
|
|||
XC_OS="linux"
|
||||
fi
|
||||
|
||||
if [ "${ARCH}" = "i686" ] ; then
|
||||
XC_ARCH='386'
|
||||
elif [ "${ARCH}" = "x86_64" ] ; then
|
||||
XC_ARCH='amd64'
|
||||
else
|
||||
echo "Unusable architecture: ${ARCH}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
if [ -z "${PNAME}" ];
|
||||
then
|
||||
|
|
@ -146,19 +137,6 @@ for F in $(find ${DEV_PLATFORM} -mindepth 1 -maxdepth 1 -type f); do
|
|||
cp ${F} ${MAIN_GOPATH}/bin/
|
||||
done
|
||||
|
||||
if [[ "x${DEV}" == "x" ]]; then
|
||||
# Zip and copy to the dist dir
|
||||
echo "==> Packaging..."
|
||||
for PLATFORM in $(find ./bin/${PNAME} -mindepth 1 -maxdepth 1 -type d); do
|
||||
OSARCH=$(basename ${PLATFORM})
|
||||
echo "--> ${OSARCH}"
|
||||
|
||||
pushd "$PLATFORM" >/dev/null 2>&1
|
||||
zip ../${PNAME}-${OSARCH}.zip ./*
|
||||
popd >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
|
||||
# Done!
|
||||
echo
|
||||
echo "==> Results:"
|
||||
|
|
|
|||
|
|
@ -22,7 +22,33 @@ then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
function pushBuildx() {
|
||||
BUILD_TAG="latest"
|
||||
TARGET_IMG=${DIMAGE}
|
||||
|
||||
# TODO Currently ci builds with commit tag will not be generated,
|
||||
# since buildx does not support multiple repo
|
||||
# if not a release build set the tag and ci image
|
||||
if [ -z "${RELEASE_TAG}" ]; then
|
||||
return
|
||||
# BUILD_ID=$(git describe --tags --always)
|
||||
# BUILD_TAG="${BRANCH}-${BUILD_ID}"
|
||||
# TARGET_IMG="${DIMAGE}-ci"
|
||||
fi
|
||||
|
||||
echo "Tagging and pushing ${DIMAGE}:${TAG} as ${TARGET_IMG}:${BUILD_TAG}"
|
||||
docker buildx imagetools create "${DIMAGE}:${TAG}" -t "${TARGET_IMG}:${BUILD_TAG}"
|
||||
}
|
||||
|
||||
# if the push is for a buildx build
|
||||
if [[ ${BUILDX} ]]; then
|
||||
pushBuildx
|
||||
exit 0
|
||||
fi
|
||||
|
||||
IMAGEID=$( sudo docker images -q ${DIMAGE}:ci )
|
||||
DIMAGE="${DIMAGE}-${XC_ARCH}"
|
||||
|
||||
echo "${DIMAGE}:ci -> $IMAGEID"
|
||||
if [ -z ${IMAGEID} ];
|
||||
then
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ RUN apt-get update; exit 0
|
|||
RUN apt-get -y install rsyslog libssl-dev xfsprogs ca-certificates
|
||||
RUN apt-get -y install btrfs-progs netcat
|
||||
|
||||
ARG ARCH
|
||||
ARG DBUILD_DATE
|
||||
ARG DBUILD_REPO_URL
|
||||
ARG DBUILD_SITE_URL
|
||||
|
|
|
|||
61
buildscripts/zfs-driver/zfs-driver.Dockerfile
Normal file
61
buildscripts/zfs-driver/zfs-driver.Dockerfile
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# Copyright 2019-2020 The OpenEBS Authors. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM golang:1.14.7 as build
|
||||
|
||||
ARG TARGETOS
|
||||
ARG TARGETARCH
|
||||
ARG TARGETVARIANT=""
|
||||
|
||||
ENV GO111MODULE=on \
|
||||
GOOS=${TARGETOS} \
|
||||
GOARCH=${TARGETARCH} \
|
||||
GOARM=${TARGETVARIANT} \
|
||||
DEBIAN_FRONTEND=noninteractive \
|
||||
PATH="/root/go/bin:${PATH}"
|
||||
|
||||
WORKDIR /go/src/github.com/openebs/zfs-localpv/
|
||||
|
||||
RUN apt-get update && apt-get install -y make git
|
||||
|
||||
COPY go.mod go.sum ./
|
||||
# Get dependancies - will also be cached if we won't change mod/sum
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN make buildx.csi-driver
|
||||
|
||||
FROM ubuntu:19.10
|
||||
|
||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
RUN apt-get update; exit 0
|
||||
RUN apt-get -y install rsyslog libssl-dev xfsprogs ca-certificates
|
||||
RUN apt-get -y install btrfs-progs netcat
|
||||
|
||||
ARG DBUILD_DATE
|
||||
ARG DBUILD_REPO_URL
|
||||
ARG DBUILD_SITE_URL
|
||||
|
||||
COPY --from=build /go/src/github.com/openebs/zfs-localpv/bin/zfs-driver/zfs-driver /usr/local/bin/zfs-driver
|
||||
|
||||
LABEL org.label-schema.name="zfs-driver"
|
||||
LABEL org.label-schema.description="OpenEBS ZFS LocalPV Driver"
|
||||
LABEL org.label-schema.schema-version="1.0"
|
||||
LABEL org.label-schema.build-date=$DBUILD_DATE
|
||||
LABEL org.label-schema.vcs-url=$DBUILD_REPO_URL
|
||||
LABEL org.label-schema.url=$DBUILD_SITE_URL
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/zfs-driver"]
|
||||
EXPOSE 7676 7777
|
||||
Loading…
Add table
Add a link
Reference in a new issue