Files
fission-src/hack/release-build.sh
T
Ta-Ching ChenandGitHub d358a29b17 Fix the namespace mismatch problem when deploying with a single YAML file (#1344)
If a user deploys fission in the namespace which is different from the one in the single YAML file generated by helm, fission components won't be able to talk to each other due to the wrong namespace appends after the service address.

This PR adds --namespace when generating the YAML file to prevent the mismatch problem.
2019-10-09 01:14:56 +08:00

301 lines
8.9 KiB
Bash
Executable File

#!/bin/bash
set -e
#set -x
DIR=`realpath $(dirname $0)/../`
BUILDDIR=$(realpath $DIR)/build
# Build CLI binaries for mac/linux/windows
build_all_cli() {
local version=$1
local date=$2
local gitcommit=$3
build_cli "linux" "linux" $version $date $gitcommit
build_cli "darwin" "osx" $version $date $gitcommit
build_cli "windows" "windows" $version $date $gitcommit
}
# Build cli binary for one OS, and put it in $BUILDDIR/cli/<os>/
build_cli() {
os=$1
osName=$2
local version=$3
local date=$4
local gitcommit=$5
arch="amd64" # parameterize if/when we need to
pushd $DIR/cmd/fission-cli
if [ "$osName" == "windows" ]
then
binary=fission-cli-${osName}.exe
else
binary=fission-cli-${osName}
fi
GOOS=$os GOARCH=$arch go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH \
-ldflags "-X github.com/fission/fission/pkg/info.GitCommit=$gitcommit -X github.com/fission/fission/pkg/info.BuildDate=$date -X github.com/fission/fission/pkg/info.Version=$version" -o $binary .
outdir=$BUILDDIR/cli/$osName/
mkdir -p $outdir
mv $binary $outdir
popd
}
# Build fission-bundle image
build_fission_bundle_image() {
local version=$1
local date=$2
local gitcommit=$3
local tag=fission/fission-bundle:$version
docker build -t $tag -f $DIR/cmd/fission-bundle/Dockerfile.fission-bundle --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker tag $tag fission/fission-bundle:latest
}
build_fetcher_image() {
local version=$1
local date=$2
local gitcommit=$3
local tag=fission/fetcher:$version
docker build -t $tag -f $DIR/cmd/fetcher/Dockerfile.fission-fetcher --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker tag $tag fission/fetcher:latest
}
push_fetcher_image() {
local version=$1
local tag=fission/fetcher:$version
}
build_builder_image() {
local version=$1
local date=$2
local gitcommit=$3
local tag=fission/builder:$version
docker build -t $tag -f $DIR/cmd/builder/Dockerfile.fission-builder --build-arg GITCOMMIT=$gitcommit \
--build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker tag $tag fission/builder:latest
}
build_env_image() {
local version=$1
local envdir=$2
local imgnamebase=$3
local imgvariant=$4
if [ -z "$imgvariant" ]
then
# no variant specified, just use the base name
imgname=$imgnamebase
dockerfile="Dockerfile"
else
# variant specified - append variant to image name and assume dockerfile
# exists with same suffix (e.g. image node-env-debian built from Dockerfile-debian)
imgname="$imgnamebase-$imgvariant"
dockerfile="Dockerfile-$imgvariant"
fi
echo "Building $envdir -> $imgname:$version using $dockerfile"
pushd $DIR/environments/$envdir
if [ -f build.sh ]
then
./build.sh
fi
docker build -t fission/$imgname:$version -f $dockerfile .
docker tag fission/$imgname:$version fission/$imgname:latest
popd
}
# Build pre-upgrade-checks image
build_pre_upgrade_checks_image() {
local version=$1
local date=$2
local gitcommit=$3
local tag=fission/pre-upgrade-checks:$version
docker build -t $tag -f $DIR/cmd/preupgradechecks/Dockerfile.fission-preupgradechecks \
--build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version $DIR
docker tag $tag fission/pre-upgrade-checks:latest
}
build_all_envs() {
local version=$1
# call with version, env dir, image name base, image name variant
build_env_image "$version" "nodejs" "node-env" ""
build_env_image "$version" "nodejs" "node-env" "debian"
build_env_image "$version" "binary" "binary-env" ""
build_env_image "$version" "dotnet" "dotnet-env" ""
build_env_image "$version" "dotnet20" "dotnet20-env" ""
build_env_image "$version" "go" "go-env" ""
build_env_image "$version" "go" "go-env" "1.11.4"
build_env_image "$version" "go" "go-env" "1.12"
build_env_image "$version" "perl" "perl-env" ""
build_env_image "$version" "php7" "php-env" ""
build_env_image "$version" "python" "python-env" ""
build_env_image "$version" "python" "python-env" "2.7"
build_env_image "$version" "ruby" "ruby-env" ""
build_env_image "$version" "jvm" "jvm-env" ""
build_env_image "$version" "tensorflow-serving" "tensorflow-serving-env" ""
}
build_env_builder_image() {
local version=$1
envdir=$2
imgnamebase=$3
imgvariant=$4
if [ -z "$imgvariant" ]
then
# no variant specified, just use the base name
imgname=$imgnamebase
dockerfile="Dockerfile"
else
# variant specified - append variant to image name and assume dockerfile
# exists with same suffix (e.g. image node-env-debian built from Dockerfile-debian)
imgname="$imgname-$imgvariant"
dockerfile="Dockerfile-$imgvariant"
fi
echo "Building $envdir -> $imgname:$version using $dockerfile"
pushd $DIR/environments/$envdir/builder
docker build -t fission/$imgname:$version -f $dockerfile .
docker tag fission/$imgname:$version fission/$imgname:latest
popd
}
build_all_env_builders() {
local version=$1
# call with version, env dir, image name base, image name variant
build_env_builder_image "$version" "python" "python-builder" ""
build_env_builder_image "$version" "binary" "binary-builder" ""
build_env_builder_image "$version" "go" "go-builder" ""
build_env_builder_image "$version" "go" "go-builder" "1.11.4"
build_env_builder_image "$version" "go" "go-builder" "1.12"
build_env_builder_image "$version" "jvm" "jvm-builder" ""
build_env_builder_image "$version" "nodejs" "node-builder" ""
build_env_builder_image "$version" "php7" "php-builder" ""
build_env_builder_image "$version" "ruby" "ruby-builder" ""
build_env_builder_image "$version" "dotnet20" "dotnet20-builder" ""
}
build_charts() {
local version=$1
mkdir -p $BUILDDIR/charts
pushd $DIR/charts
find . -iname *.~?~ | xargs -r rm
for c in fission-all fission-core
do
# https://github.com/kubernetes/helm/issues/1732
helm init --client-only
helm package -u $c/
mv *.tgz $BUILDDIR/charts/
done
popd
}
build_yamls() {
local version=$1
mkdir -p ${BUILDDIR}/yamls
pushd ${DIR}/charts
find . -iname *.~?~ | xargs -r rm
releaseName=fission-$(echo ${version} | sed 's/\./-/g')
helm init --client-only
for c in fission-all fission-core
do
# fetch dependencies
pushd ${c}
helm dependency update
popd
# for minikube and other environments that don't support LoadBalancer
helm template ${c} -n ${releaseName} --namespace fission --set analytics=false,analyticsNonHelmInstall=true,serviceType=NodePort,routerServiceType=NodePort > ${c}-${version}-minikube.yaml
# for environments that support LoadBalancer
helm template ${c} -n ${releaseName} --namespace fission --set analytics=false,analyticsNonHelmInstall=true > ${c}-${version}.yaml
# copy yaml files to build directory
mv *.yaml ${BUILDDIR}/yamls/
done
popd
}
build_all() {
local version=$1
if [ -z "$version" ]
then
echo "Version unspecified"
exit 1
fi
local date=$2
if [ -z "$date" ]
then
echo "Build date unspecified"
exit 1
fi
local gitcommit=$3
if [ -z "gitcommit" ]
then
echo "Git commit unspecified"
exit 1
fi
if [ -e $BUILDDIR ]
then
echo "Removing existing build dir ($BUILDDIR)."
rm -rf $BUILDDIR
fi
mkdir -p $BUILDDIR
# generate swagger (OpenApi 2.0) doc before building bundle image
generate_swagger_doc
build_fission_bundle_image $version $date $gitcommit
build_fetcher_image $version $date $gitcommit
build_builder_image $version $date $gitcommit
build_all_cli $version $date $gitcommit
build_pre_upgrade_checks_image $version $date $gitcommit
remove_generated_swagger_doc
}
generate_swagger_doc() {
pushd $DIR/pkg/apis/fission.io/v1/tool
./update-generated-swagger-docs.sh
popd
}
remove_generated_swagger_doc() {
rm $DIR/pkg/apis/fission.io/v1/types_swagger_doc_generated.go
}
version=${VERSION}
date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
gitcommit=$(git rev-parse HEAD)
build_all $version $date $gitcommit
build_all_envs $version
build_all_env_builders $version
build_charts $version
build_yamls $version