From 49f9944b86a2cc7e25967d27d89341c155403930 Mon Sep 17 00:00:00 2001 From: Vishal Date: Mon, 27 May 2019 12:51:00 +0530 Subject: [PATCH] Skaffold for Fission (#1172) Skaffold for development of Fission and switching to multi-stage Dockerfile for all components. --- .dockerignore | 15 +++++ .travis.yml | 2 +- builder/cmd/Dockerfile | 9 --- builder/cmd/Dockerfile.fission-builder | 26 +++++++++ builder/cmd/build.sh | 18 ------ environments/fetcher/cmd/Dockerfile | 5 -- .../fetcher/cmd/Dockerfile.fission-fetcher | 26 +++++++++ environments/fetcher/cmd/build.sh | 17 ------ executor/newdeploy/newdeploy.go | 2 +- executor/poolmgr/gp.go | 2 +- fission-bundle/Dockerfile | 3 - fission-bundle/Dockerfile.fission-bundle | 28 +++++++++ fission-bundle/build.sh | 17 ------ fission-bundle/main.go | 8 +++ hack/release-build.sh | 20 ++----- hack/release.sh | 1 + preupgradechecks/Dockerfile | 3 - .../Dockerfile.fission-preupgradechecks | 28 +++++++++ preupgradechecks/build.sh | 18 ------ skaffold.yaml | 58 +++++++++++++++++++ test/test_utils.sh | 32 +++++----- 21 files changed, 215 insertions(+), 123 deletions(-) create mode 100644 .dockerignore delete mode 100644 builder/cmd/Dockerfile create mode 100644 builder/cmd/Dockerfile.fission-builder delete mode 100755 builder/cmd/build.sh delete mode 100644 environments/fetcher/cmd/Dockerfile create mode 100644 environments/fetcher/cmd/Dockerfile.fission-fetcher delete mode 100755 environments/fetcher/cmd/build.sh delete mode 100644 fission-bundle/Dockerfile create mode 100644 fission-bundle/Dockerfile.fission-bundle delete mode 100755 fission-bundle/build.sh delete mode 100644 preupgradechecks/Dockerfile create mode 100644 preupgradechecks/Dockerfile.fission-preupgradechecks delete mode 100755 preupgradechecks/build.sh create mode 100644 skaffold.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..1fb49b5e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,15 @@ +*.md +*.sh +Documentation +charts +examples +environments/* +!environments/fetcher +demos +test +Makefile +LICENSE +glide.* +.travis.yml +.gitignore +.git \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index d9458258..7035f1fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,8 +37,8 @@ before_script: - hack/verify-govet.sh - helm lint charts/fission-all/ charts/fission-core/ - go mod download + - go mod vendor - go build -o fission/fission fission/*.go - - ./fission-bundle/build.sh - hack/runtests.sh script: diff --git a/builder/cmd/Dockerfile b/builder/cmd/Dockerfile deleted file mode 100644 index 31aae41a..00000000 --- a/builder/cmd/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine:3.5 - -RUN apk update -# Install some utility libraries for builders extending image -RUN apk add coreutils binutils findutils grep - -ADD builder /builder - -EXPOSE 8001 \ No newline at end of file diff --git a/builder/cmd/Dockerfile.fission-builder b/builder/cmd/Dockerfile.fission-builder new file mode 100644 index 00000000..edd9f2b0 --- /dev/null +++ b/builder/cmd/Dockerfile.fission-builder @@ -0,0 +1,26 @@ +FROM golang:1.11-alpine as fission-builder +RUN apk add bash ca-certificates git gcc g++ libc-dev + +ARG GITCOMMIT=unknown +# E.g. GITCOMMIT=$(git rev-parse HEAD) + +ARG BUILDVERSION=unknown +# E.g. BUILDVERSION=$(git rev-parse HEAD) + +ARG BUILDDATE=unknown +# E.g. BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + +ARG GOPKG=github.com/fission/fission +COPY . /go/src/${GOPKG} +WORKDIR /go/src/${GOPKG}/builder/cmd +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ + -o /go/bin/builder \ + -gcflags=-trimpath=$GOPATH \ + -asmflags=-trimpath=$GOPATH \ + -ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" + +FROM alpine:3.5 +COPY --from=fission-builder /go/bin/builder / +EXPOSE 8001 + +ENTRYPOINT ["/builder"] \ No newline at end of file diff --git a/builder/cmd/build.sh b/builder/cmd/build.sh deleted file mode 100755 index 8d438476..00000000 --- a/builder/cmd/build.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -version=$1 -if [ -z $version ]; then - version=$(git rev-parse HEAD) -fi - -date=$2 -if [ -z $date ]; then - date=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -fi - -gitcommit=$3 -if [ -z $gitcommit ]; then - gitcommit=$(git rev-parse HEAD) -fi - -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-X github.com/fission/fission.GitCommit=$gitcommit -X github.com/fission/fission.BuildDate=$date -X github.com/fission/fission.Version=$version" -o builder . - diff --git a/environments/fetcher/cmd/Dockerfile b/environments/fetcher/cmd/Dockerfile deleted file mode 100644 index f97e4ef2..00000000 --- a/environments/fetcher/cmd/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM alpine:3.4 - -ADD fetcher / - -EXPOSE 8000 diff --git a/environments/fetcher/cmd/Dockerfile.fission-fetcher b/environments/fetcher/cmd/Dockerfile.fission-fetcher new file mode 100644 index 00000000..8e149ae2 --- /dev/null +++ b/environments/fetcher/cmd/Dockerfile.fission-fetcher @@ -0,0 +1,26 @@ +FROM golang:1.11-alpine as builder +RUN apk add bash ca-certificates git gcc g++ libc-dev + +ARG GITCOMMIT=unknown +# E.g. GITCOMMIT=$(git rev-parse HEAD) + +ARG BUILDVERSION=unknown +# E.g. BUILDVERSION=$(git rev-parse HEAD) + +ARG BUILDDATE=unknown +# E.g. BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + +ARG GOPKG=github.com/fission/fission +COPY . /go/src/${GOPKG} +WORKDIR /go/src/${GOPKG}/environments/fetcher/cmd +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \ + -o /go/bin/fetcher \ + -gcflags=-trimpath=$GOPATH \ + -asmflags=-trimpath=$GOPATH \ + -ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" + +FROM alpine:3.4 +COPY --from=builder /go/bin/fetcher / +EXPOSE 8000 + +ENTRYPOINT ["/fetcher"] \ No newline at end of file diff --git a/environments/fetcher/cmd/build.sh b/environments/fetcher/cmd/build.sh deleted file mode 100755 index f1601908..00000000 --- a/environments/fetcher/cmd/build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -version=$1 -if [ -z $version ]; then - version=$(git rev-parse HEAD) -fi - -date=$2 -if [ -z $date ]; then - date=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -fi - -gitcommit=$3 -if [ -z $gitcommit ]; then - gitcommit=$(git rev-parse HEAD) -fi - -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-X github.com/fission/fission.GitCommit=$gitcommit -X github.com/fission/fission.BuildDate=$date -X github.com/fission/fission.Version=$version" -o fetcher . diff --git a/executor/newdeploy/newdeploy.go b/executor/newdeploy/newdeploy.go index cfc8be87..55cc519e 100644 --- a/executor/newdeploy/newdeploy.go +++ b/executor/newdeploy/newdeploy.go @@ -209,7 +209,7 @@ func (deploy *NewDeploy) getDeploymentSpec(fn *crd.Function, env *crd.Environmen PreStop: &apiv1.Handler{ Exec: &apiv1.ExecAction{ Command: []string{ - "sleep", + "/bin/sleep", fmt.Sprintf("%v", gracePeriodSeconds), }, }, diff --git a/executor/poolmgr/gp.go b/executor/poolmgr/gp.go index 142086fd..8195bd26 100644 --- a/executor/poolmgr/gp.go +++ b/executor/poolmgr/gp.go @@ -387,7 +387,7 @@ func (gp *GenericPool) createPool() error { PreStop: &apiv1.Handler{ Exec: &apiv1.ExecAction{ Command: []string{ - "sleep", + "/bin/sleep", fmt.Sprintf("%v", gracePeriodSeconds), }, }, diff --git a/fission-bundle/Dockerfile b/fission-bundle/Dockerfile deleted file mode 100644 index 9c9328a6..00000000 --- a/fission-bundle/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM alpine:3.4 -RUN apk add --update ca-certificates -ADD fission-bundle / diff --git a/fission-bundle/Dockerfile.fission-bundle b/fission-bundle/Dockerfile.fission-bundle new file mode 100644 index 00000000..a950fff2 --- /dev/null +++ b/fission-bundle/Dockerfile.fission-bundle @@ -0,0 +1,28 @@ +FROM golang:1.11-alpine as builder +RUN apk add bash ca-certificates git gcc g++ libc-dev + +ARG GITCOMMIT=unknown +# E.g. GITCOMMIT=$(git rev-parse HEAD) + +ARG BUILDVERSION=unknown +# E.g. BUILDVERSION=$(git rev-parse HEAD) + +ARG BUILDDATE=unknown +# E.g. BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + +ARG GOPKG=github.com/fission/fission +COPY . /go/src/${GOPKG} +RUN rm -f /go/src/${GOPKG}/Dockerfile* +WORKDIR /go/src/${GOPKG}/fission-bundle +ENV GO111MODULE=on +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -mod vendor \ + -o /go/bin/fission-bundle \ + -gcflags=-trimpath=$GOPATH \ + -asmflags=-trimpath=$GOPATH \ + -ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" + +FROM alpine:3.4 +RUN apk add --update ca-certificates +COPY --from=builder /go/bin/fission-bundle / + +ENTRYPOINT ["/fission-bundle"] \ No newline at end of file diff --git a/fission-bundle/build.sh b/fission-bundle/build.sh deleted file mode 100755 index c29ca820..00000000 --- a/fission-bundle/build.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -version=$1 -if [ -z $version ]; then - version=$(git rev-parse HEAD) -fi - -date=$2 -if [ -z $date ]; then - date=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -fi - -gitcommit=$3 -if [ -z $gitcommit ]; then - gitcommit=$(git rev-parse HEAD) -fi - -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-X github.com/fission/fission.GitCommit=$gitcommit -X github.com/fission/fission.BuildDate=$date -X github.com/fission/fission.Version=$version" diff --git a/fission-bundle/main.go b/fission-bundle/main.go index 81d2410b..1fb23af2 100644 --- a/fission-bundle/main.go +++ b/fission-bundle/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "log" "os" @@ -150,6 +151,13 @@ func registerTraceExporter(logger *zap.Logger, arguments map[string]interface{}) } func main() { + // From https://github.com/containous/traefik/pull/1817/files + // Tell glog to log into STDERR. Otherwise, we risk + // certain kinds of API errors getting logged into a directory not + // available in a `FROM scratch` Docker container, causing glog to abort + // hard with an exit code > 0. + flag.Set("logtostderr", "true") + usage := `fission-bundle: Package of all fission microservices: controller, router, executor. Use it to start one or more of the fission servers: diff --git a/hack/release-build.sh b/hack/release-build.sh index 5950345f..e3b0d1b5 100755 --- a/hack/release-build.sh +++ b/hack/release-build.sh @@ -52,13 +52,8 @@ build_fission_bundle_image() { local tag=fission/fission-bundle:$version - pushd $DIR/fission-bundle - - ./build.sh $version $date $gitcommit - docker build -t $tag . - docker tag $tag fission/fission-bundle:latest - - popd + docker build -t $tag -f $ROOT/fission-bundle/Dockerfile.fission-bundle --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version . + docker tag $tag fission/fission-bundle:latest } build_fetcher_image() { @@ -69,8 +64,7 @@ build_fetcher_image() { pushd $DIR/environments/fetcher/cmd - ./build.sh $version $date $gitcommit - docker build -t $tag . + docker build -t $tag -f $ROOT/environments/fetcher/cmd/Dockerfile.fission-fetcher --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version . docker tag $tag fission/fetcher:latest popd @@ -89,8 +83,7 @@ build_builder_image() { pushd $DIR/builder/cmd - ./build.sh $version $date $gitcommit - docker build -t $tag . + docker build -t $tag -f $ROOT/builder/cmd/Dockerfile.fission-builder --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version . docker tag $tag fission/builder:latest popd @@ -134,9 +127,8 @@ build_pre_upgrade_checks_image() { local tag=fission/pre-upgrade-checks:$version pushd $DIR/preupgradechecks - - ./build.sh $version $date $gitcommit - docker build -t $tag . + + docker build -t $tag -f $ROOT/preupgradechecks/Dockerfile.fission-preupgradechecks --build-arg GITCOMMIT=$gitcommit --build-arg BUILDDATE=$date --build-arg BUILDVERSION=$version . docker tag $tag fission/pre-upgrade-checks:latest popd diff --git a/hack/release.sh b/hack/release.sh index 738467b9..1e9d602f 100755 --- a/hack/release.sh +++ b/hack/release.sh @@ -324,6 +324,7 @@ fi release_environment_check $version $chartsrepo +go mod vendor # Build release-builder image docker build -t fission-release-builder -f $GOPATH/src/github.com/fission/fission/hack/Dockerfile . diff --git a/preupgradechecks/Dockerfile b/preupgradechecks/Dockerfile deleted file mode 100644 index 52187eb0..00000000 --- a/preupgradechecks/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM alpine:3.4 -RUN apk add --update ca-certificates -ADD pre-upgrade-checks / diff --git a/preupgradechecks/Dockerfile.fission-preupgradechecks b/preupgradechecks/Dockerfile.fission-preupgradechecks new file mode 100644 index 00000000..797a076d --- /dev/null +++ b/preupgradechecks/Dockerfile.fission-preupgradechecks @@ -0,0 +1,28 @@ +FROM golang:1.11-alpine as builder +RUN apk add bash ca-certificates git gcc g++ libc-dev + +ARG GITCOMMIT=unknown +# E.g. GITCOMMIT=$(git rev-parse HEAD) + +ARG BUILDVERSION=unknown +# E.g. BUILDVERSION=$(git rev-parse HEAD) + +ARG BUILDDATE=unknown +# E.g. BUILDDATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') + +ARG GOPKG=github.com/fission/fission +COPY . /go/src/${GOPKG} +WORKDIR /go/src/${GOPKG}/preupgradechecks +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a \ + -o /go/bin/pre-upgrade-checks \ + -gcflags=-trimpath=$GOPATH \ + -asmflags=-trimpath=$GOPATH \ + -ldflags "-X github.com/fission/fission.GitCommit=${GITCOMMIT} -X github.com/fission/fission.BuildDate=${BUILDDATE} -X github.com/fission/fission.Version=${BUILDVERSION}" + + +FROM alpine:3.4 +RUN apk add --update ca-certificates +COPY --from=builder /go/bin/pre-upgrade-checks / + +ENTRYPOINT ["/pre-upgrade-checks"] +EXPOSE 8001 \ No newline at end of file diff --git a/preupgradechecks/build.sh b/preupgradechecks/build.sh deleted file mode 100755 index 5918577e..00000000 --- a/preupgradechecks/build.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -version=$1 -if [ -z $version ]; then - version=$(git rev-parse HEAD) -fi - -date=$2 -if [ -z $date ]; then - date=$(date -u +'%Y-%m-%dT%H:%M:%SZ') -fi - -gitcommit=$3 -if [ -z $gitcommit ]; then - gitcommit=$(git rev-parse HEAD) -fi - - -CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -gcflags=-trimpath=$GOPATH -asmflags=-trimpath=$GOPATH -ldflags "-X github.com/fission/fission.GitCommit=$gitcommit -X github.com/fission/fission.BuildDate=$date -X github.com/fission/fission.Version=$version" -o pre-upgrade-checks diff --git a/skaffold.yaml b/skaffold.yaml new file mode 100644 index 00000000..331bd036 --- /dev/null +++ b/skaffold.yaml @@ -0,0 +1,58 @@ +#################################### +# This file can be used with Skaffold (https://github.com/GoogleContainerTools/skaffold) to +# build and deploy Fission to Kubernetes cluster. +# +############## Usage ############## +# Skaffold CLI should be installed on your machine. +# Change -> to your Dockerhub username +# Run `go mod vendor` so that all dependencies are downloaded +# Run `skaffold run` to build and deploy with helm. +# Run`skaffold build` to only build and push images +############## Current Limitations ############## +# 1) You can not refer to dynamically generated tag from build section in Helm values +# - hence you have to use "latest" tag +############### Possible enhancements ############## +# 1) Add profiles to suit various deployment needs +#################################### +apiVersion: skaffold/v1beta9 +kind: Config +build: + artifacts: + - image: /fission + context: . + docker: + dockerfile: fission-bundle/Dockerfile.fission-bundle + - image: /fetcher + docker: + dockerfile: environments/fetcher/cmd/Dockerfile.fission-fetcher + - image: /preupgradechecks + docker: + dockerfile: preupgradechecks/Dockerfile.fission-preupgradechecks + tagPolicy: + envTemplate: + template: "{{.IMAGE_NAME}}:skaffold-test" + +deploy: + helm: + releases: + - name: fission + chartPath: ./charts/fission-all + valuesFiles: + - ./charts/fission-all/values.yaml + namespace: "fission" + setValues: + image: /fission + imageTag: skaffold-test + fetcherImage: /fetcher + fetcherImageTag: skaffold-test + namespace: fission + preUpgradeChecksImage: /preupgradechecks + repository: index.docker.io + setValueTemplates: {} + wait: true + recreatePods: false + overrides: {} + packaged: null + imageStrategy: + fqn: null + helm: null diff --git a/test/test_utils.sh b/test/test_utils.sh index 358c34dd..e4e00d82 100755 --- a/test/test_utils.sh +++ b/test/test_utils.sh @@ -44,18 +44,27 @@ gcloud_login() { gcloud auth activate-service-account --key-file $KEY } +getVersion() { + echo $(git rev-parse HEAD) +} + +getDate() { + echo $(date -u +'%Y-%m-%dT%H:%M:%SZ') +} + +getGitCommit() { + echo $(git rev-parse HEAD) +} + build_and_push_pre_upgrade_check_image() { image_tag=$1 travis_fold_start build_and_push_pre_upgrade_check_image $image_tag - pushd $ROOT/preupgradechecks - ./build.sh - docker build -q -t $image_tag . + docker build -t $image_tag -f $ROOT/preupgradechecks/Dockerfile.fission-preupgradechecks --build-arg GITCOMMIT=$(getGitCommit) --build-arg BUILDDATE=$(getDate) --build-arg BUILDVERSION=$(getVersion) . gcloud_login gcloud docker -- push $image_tag - popd travis_fold_end build_and_push_pre_upgrade_check_image } @@ -63,14 +72,11 @@ build_and_push_fission_bundle() { image_tag=$1 travis_fold_start build_and_push_fission_bundle $image_tag - pushd $ROOT/fission-bundle - ./build.sh - docker build -q -t $image_tag . + docker build -q -t $image_tag -f $ROOT/fission-bundle/Dockerfile.fission-bundle --build-arg GITCOMMIT=$(getGitCommit) --build-arg BUILDDATE=$(getDate) --build-arg BUILDVERSION=$(getVersion) . gcloud_login gcloud docker -- push $image_tag - popd travis_fold_end build_and_push_fission_bundle } @@ -78,14 +84,11 @@ build_and_push_fetcher() { image_tag=$1 travis_fold_start build_and_push_fetcher $image_tag - pushd $ROOT/environments/fetcher/cmd - ./build.sh - docker build -q -t $image_tag . + docker build -q -t $image_tag -f $ROOT/environments/fetcher/cmd/Dockerfile.fission-fetcher --build-arg GITCOMMIT=$(getGitCommit) --build-arg BUILDDATE=$(getDate) --build-arg BUILDVERSION=$(getVersion) . gcloud_login gcloud docker -- push $image_tag - popd travis_fold_end build_and_push_fetcher } @@ -94,14 +97,11 @@ build_and_push_builder() { image_tag=$1 travis_fold_start build_and_push_builder $image_tag - pushd $ROOT/builder/cmd - ./build.sh - docker build -q -t $image_tag . + docker build -q -t $image_tag -f $ROOT/builder/cmd/Dockerfile.fission-builder --build-arg GITCOMMIT=$(getGitCommit) --build-arg BUILDDATE=$(getDate) --build-arg BUILDVERSION=$(getVersion) . gcloud_login gcloud docker -- push $image_tag - popd travis_fold_end build_and_push_builder }