mirror of https://github.com/kubernetes/kops.git
Build changes: Static compile, add 1.7, add crossbuild-in-docker, etc.
* Adds support for statically building * Adds crossbuild-in-docker * Reworks nodeup-in-docker to just use golang image (saves time vs rebuilding image) * Adds build rule for GCS upload * Adds go1.7 build check
This commit is contained in:
parent
2869c6a07d
commit
642c68c842
88
Makefile
88
Makefile
|
@ -1,20 +1,35 @@
|
|||
all: kops
|
||||
|
||||
DOCKER_REGISTRY=gcr.io/must-override/
|
||||
S3_BUCKET=s3://must-override/
|
||||
DOCKER_REGISTRY?=gcr.io/must-override/
|
||||
S3_BUCKET?=s3://must-override/
|
||||
GCS_LOCATION?=gs://must-override
|
||||
GOPATH_1ST=$(shell echo ${GOPATH} | cut -d : -f 1)
|
||||
UNIQUE:=$(shell date +%s)
|
||||
GOVERSION=1.7
|
||||
|
||||
TAG=1.3
|
||||
|
||||
ifndef VERSION
|
||||
VERSION := git-$(shell git rev-parse --short HEAD)
|
||||
VERSION := git-$(shell git describe --always)
|
||||
endif
|
||||
|
||||
# Go exports:
|
||||
|
||||
GO15VENDOREXPERIMENT=1
|
||||
export GO15VENDOREXPERIMENT
|
||||
|
||||
ifdef STATIC_BUILD
|
||||
CGO_ENABLED=0
|
||||
export CGO_ENABLED
|
||||
EXTRA_BUILDFLAGS=-installsuffix cgo
|
||||
EXTRA_LDFLAGS=-s
|
||||
endif
|
||||
|
||||
kops: gobindata
|
||||
GO15VENDOREXPERIMENT=1 go install -ldflags "-X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/...
|
||||
go install ${EXTRA_BUILDFLAGS} -ldflags "-X main.BuildVersion=${VERSION} ${EXTRA_LDFLAGS}" k8s.io/kops/cmd/kops/...
|
||||
|
||||
gobindata:
|
||||
GO15VENDOREXPERIMENT=1 go build -o ${GOPATH_1ST}/bin/go-bindata k8s.io/kops/vendor/github.com/jteeuwen/go-bindata/go-bindata
|
||||
go build ${EXTRA_BUILDFLAGS} -ldflags "${EXTRA_LDFLAGS}" -o ${GOPATH_1ST}/bin/go-bindata k8s.io/kops/vendor/github.com/jteeuwen/go-bindata/go-bindata
|
||||
cd ${GOPATH_1ST}/src/k8s.io/kops; ${GOPATH_1ST}/bin/go-bindata -o upup/models/bindata.go -pkg models -prefix upup/models/ upup/models/cloudup/... upup/models/config/... upup/models/nodeup/... upup/models/proto/...
|
||||
|
||||
# Build in a docker container with golang 1.X
|
||||
|
@ -29,13 +44,13 @@ check-builds-in-go17:
|
|||
docker run -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:1.7 make -f /go/src/k8s.io/kops/Makefile kops
|
||||
|
||||
codegen: gobindata
|
||||
GO15VENDOREXPERIMENT=1 go install k8s.io/kops/upup/tools/generators/...
|
||||
GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/awstasks
|
||||
GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/gcetasks
|
||||
GO15VENDOREXPERIMENT=1 PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/fitasks
|
||||
go install k8s.io/kops/upup/tools/generators/...
|
||||
PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/awstasks
|
||||
PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/cloudup/gcetasks
|
||||
PATH=${GOPATH_1ST}/bin:${PATH} go generate k8s.io/kops/upup/pkg/fi/fitasks
|
||||
|
||||
test:
|
||||
GO15VENDOREXPERIMENT=1 go test k8s.io/kops/upup/pkg/... -args -v=1 -logtostderr
|
||||
go test k8s.io/kops/upup/pkg/... -args -v=1 -logtostderr
|
||||
|
||||
godeps:
|
||||
# I think strip-vendor is the workaround for 25572
|
||||
|
@ -51,26 +66,37 @@ gofmt:
|
|||
|
||||
crossbuild:
|
||||
mkdir -p .build/dist/
|
||||
GOOS=darwin GOARCH=amd64 go build -o .build/dist/darwin/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/...
|
||||
GOOS=linux GOARCH=amd64 go build -o .build/dist/linux/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/...
|
||||
GOOS=darwin GOARCH=amd64 go build -a ${EXTRA_BUILDFLAGS} -o .build/dist/darwin/amd64/kops -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/...
|
||||
GOOS=linux GOARCH=amd64 go build -a ${EXTRA_BUILDFLAGS} -o .build/dist/linux/amd64/kops -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/kops/...
|
||||
#GOOS=windows GOARCH=amd64 go build -o .build/dist/windows/amd64/kops -ldflags "-X main.BuildVersion=${VERSION}" -v k8s.io/kops/cmd/kops/...
|
||||
|
||||
kops-dist: crossbuild
|
||||
crossbuild-in-docker:
|
||||
docker pull golang:${GOVERSION} # Keep golang image up to date
|
||||
docker run --name=kops-build-${UNIQUE} -e STATIC_BUILD=yes -e VERSION=${VERSION} -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:${GOVERSION} make -f /go/src/k8s.io/kops/Makefile crossbuild
|
||||
docker cp kops-build-${UNIQUE}:/go/.build .
|
||||
|
||||
kops-dist: crossbuild-in-docker
|
||||
mkdir -p .build/dist/
|
||||
(sha1sum .build/dist/darwin/amd64/kops | cut -d' ' -f1) > .build/dist/darwin/amd64/kops.sha1
|
||||
(sha1sum .build/dist/linux/amd64/kops | cut -d' ' -f1) > .build/dist/linux/amd64/kops.sha1
|
||||
|
||||
upload: nodeup-dist kops-dist
|
||||
rm -rf .build/s3
|
||||
mkdir -p .build/s3/kops/${VERSION}/linux/amd64/
|
||||
mkdir -p .build/s3/kops/${VERSION}/darwin/amd64/
|
||||
cp .build/dist/nodeup .build/s3/kops/${VERSION}/linux/amd64/nodeup
|
||||
cp .build/dist/nodeup.sha1 .build/s3/kops/${VERSION}/linux/amd64/nodeup.sha1
|
||||
cp .build/dist/linux/amd64/kops .build/s3/kops/${VERSION}/linux/amd64/kops
|
||||
cp .build/dist/linux/amd64/kops.sha1 .build/s3/kops/${VERSION}/linux/amd64/kops.sha1
|
||||
cp .build/dist/darwin/amd64/kops .build/s3/kops/${VERSION}/darwin/amd64/kops
|
||||
cp .build/dist/darwin/amd64/kops.sha1 .build/s3/kops/${VERSION}/darwin/amd64/kops.sha1
|
||||
aws s3 sync --acl public-read .build/s3/ ${S3_BUCKET}
|
||||
version-dist: nodeup-dist kops-dist
|
||||
rm -rf .build/upload
|
||||
mkdir -p .build/upload/kops/${VERSION}/linux/amd64/
|
||||
mkdir -p .build/upload/kops/${VERSION}/darwin/amd64/
|
||||
cp .build/dist/nodeup .build/upload/kops/${VERSION}/linux/amd64/nodeup
|
||||
cp .build/dist/nodeup.sha1 .build/upload/kops/${VERSION}/linux/amd64/nodeup.sha1
|
||||
cp .build/dist/linux/amd64/kops .build/upload/kops/${VERSION}/linux/amd64/kops
|
||||
cp .build/dist/linux/amd64/kops.sha1 .build/upload/kops/${VERSION}/linux/amd64/kops.sha1
|
||||
cp .build/dist/darwin/amd64/kops .build/upload/kops/${VERSION}/darwin/amd64/kops
|
||||
cp .build/dist/darwin/amd64/kops.sha1 .build/upload/kops/${VERSION}/darwin/amd64/kops.sha1
|
||||
|
||||
upload: version-dist
|
||||
aws s3 sync --acl public-read .build/upload/ ${S3_BUCKET}
|
||||
|
||||
|
||||
gcs-upload: version-dist
|
||||
gsutil -m rsync -r .build/upload/kops ${GCS_LOCATION}
|
||||
|
||||
push: nodeup-dist
|
||||
scp -C .build/dist/nodeup ${TARGET}:/tmp/
|
||||
|
@ -109,17 +135,13 @@ protokube-push: protokube-image
|
|||
nodeup: nodeup-dist
|
||||
|
||||
nodeup-gocode: gobindata
|
||||
go install -ldflags "-X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/nodeup
|
||||
go install ${EXTRA_BUILDFLAGS} -ldflags "${EXTRA_LDFLAGS} -X main.BuildVersion=${VERSION}" k8s.io/kops/cmd/nodeup
|
||||
|
||||
nodeup-builder-image:
|
||||
docker build -t nodeup-builder images/nodeup-builder
|
||||
|
||||
nodeup-build-in-docker: nodeup-builder-image
|
||||
docker run -it -e VERSION=${VERSION} -v `pwd`:/src nodeup-builder /onbuild.sh
|
||||
|
||||
nodeup-dist: nodeup-build-in-docker
|
||||
nodeup-dist:
|
||||
docker pull golang:${GOVERSION} # Keep golang image up to date
|
||||
docker run --name=nodeup-build-${UNIQUE} -e STATIC_BUILD=yes -e VERSION=${VERSION} -v ${GOPATH_1ST}/src/k8s.io/kops:/go/src/k8s.io/kops golang:${GOVERSION} make -f /go/src/k8s.io/kops/Makefile nodeup-gocode
|
||||
mkdir -p .build/dist
|
||||
cp .build/artifacts/nodeup .build/dist/
|
||||
docker cp nodeup-build-${UNIQUE}:/go/bin/nodeup .build/dist/
|
||||
(sha1sum .build/dist/nodeup | cut -d' ' -f1) > .build/dist/nodeup.sha1
|
||||
|
||||
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
FROM golang:1.6-alpine
|
||||
|
||||
ARG KOPS_SRC=_src
|
||||
COPY $KOPS_SRC/ /go/src/k8s.io/kops/
|
||||
|
||||
# KUBECTL_SOURCE: Change to kubernetes-dev/ci for CI
|
||||
ARG KUBECTL_SOURCE=kubernetes-release/release
|
||||
|
||||
# KUBECTL_TRACK: Currently latest from KUBECTL_SOURCE. Change to latest-1.3.txt, etc. if desired.
|
||||
ARG KUBECTL_TRACK=latest.txt
|
||||
|
||||
ARG KUBECTL_ARCH=linux/amd64
|
||||
|
||||
RUN apk add --no-cache --update build-base curl git mercurial --virtual .kops-deps && \
|
||||
cd "${GOPATH}/src/k8s.io/kops" && make && \
|
||||
MODELS=$(readlink "${GOPATH}/bin/models") && mv "${MODELS}" /usr/local/bin && rm "${GOPATH}/bin/models" && mv ${GOPATH}/bin/* /usr/local/bin && \
|
||||
GITISH=$(git describe --always) && \
|
||||
KUBECTL_VERSION=${KUBECTL_VERSION:-$(curl -SsL --retry 5 "https://storage.googleapis.com/${KUBECTL_SOURCE}/${KUBECTL_TRACK}")} && \
|
||||
echo "=== Fetching kubectl ${KUBECTL_VERSION} ===" && \
|
||||
curl -SsL --retry 5 "https://storage.googleapis.com/${KUBECTL_SOURCE}/${KUBECTL_VERSION}/${KUBECTL_ARCH}/kubectl" > /usr/local/bin/kubectl && \
|
||||
chmod +x /usr/local/bin/kubectl && \
|
||||
/usr/local/bin/kubectl version --client && \
|
||||
cd / && rm -rf "${GOPATH}" && rm -rf /usr/local/go && rm /usr/local/bin/go-wrapper && apk del .kops-deps && \
|
||||
echo "=== Built kops at ${GITISH}, fetched kubectl ${KUBECTL_VERSION} ==="
|
||||
|
||||
CMD "/go/bin/kops"
|
|
@ -1,15 +0,0 @@
|
|||
# Running Kops in Docker
|
||||
|
||||
The Dockerfile here is offered primarily as a way to build continuous
|
||||
integration versions of `kops` until we figure out how we want to
|
||||
release/package it.
|
||||
|
||||
To use it, e.g. (assumes your `$HOME` is correct and that `$KOPS_STATE_STORE` is correct):
|
||||
```shell
|
||||
$ docker build -t kops .
|
||||
$ KOPS="docker run -v $HOME/.aws:/root/.aws:ro -v $HOME/.ssh:/root/.ssh:ro -v $HOME/.kube:/root/.kube -it kops kops --state=$KOPS_STATE_STORE"
|
||||
```
|
||||
|
||||
This creates a shell variable that runs the `kops` container with `~/.aws` mounted in (for AWS credentials), `~/.ssh` mounted in (for SSH keys, for AWS specifically), and `~/.kube` mounted in (so `kubectl` can add newly created clusters).
|
||||
|
||||
After this, you can just use `$KOPS` where you would generally use `kops`, e.g. `$KOPS get cluster`.
|
|
@ -1,77 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
readonly DOCKER_ROOT=$(dirname "${BASH_SOURCE}")
|
||||
readonly GITISH="$(git describe --always)"
|
||||
readonly ARCH=${BUILD_ARCH:-"linux/amd64"}
|
||||
readonly NAME=${BUILD_NAME:-"ci-${GITISH}-${ARCH/\//-}"} # e.g. ci-bef7faf-linux-amd64
|
||||
readonly TMPNAME="${NAME}-$(date +%s)" # e.g. ci-bef7faf-linux-amd64-12345678
|
||||
readonly TAG=${BUILD_DOCKER_TAG:-"b.gcr.io/kops-ci/kops:${NAME}"}
|
||||
readonly PUSH_TAG=${BUILD_PUSH_TAG:-"no"}
|
||||
readonly CLEAN_TAG=${BUILD_CLEAN_TAG:-"yes"}
|
||||
readonly TMPTAG="${TAG}-$(date +%s)"
|
||||
readonly LINK=${BUILD_LINK:-} # Also pushes to e.g. ci-{BUILD_LINK}-linux-amd64, i.e. for "latest"
|
||||
readonly SYMBOLIC_TAG=${BUILD_SYMBOLIC_TAG:-"b.gcr.io/kops-ci/kops:ci-${LINK}-${ARCH/\//-}"}
|
||||
|
||||
if [[ "${ARCH}" != "linux/amd64" ]]; then
|
||||
echo "!!! Alternate architecture build not supported yet. !!!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${GITISH}" ]]; then
|
||||
echo "!!! git hash not found, are you sure you're in a git tree and git is installed? !!!"
|
||||
git config -l
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Copying src to docker/_src ==="
|
||||
echo
|
||||
|
||||
rsync -a --exclude=/docker/ "${DOCKER_ROOT}/.." "${DOCKER_ROOT}/_src"
|
||||
|
||||
echo
|
||||
echo "=== Building at ${GITISH} for ${ARCH} ==="
|
||||
echo
|
||||
|
||||
# Build -> $TMPTAG
|
||||
docker build -t "${TMPTAG}" --build-arg "KUBECTL_ARCH=${ARCH}" --force-rm=true --rm=true --pull=true --no-cache=true "${DOCKER_ROOT}"
|
||||
|
||||
# Squash -> $TAG
|
||||
docker create --name="${TMPNAME}" "${TMPTAG}"
|
||||
docker export "${TMPNAME}" | docker import - "${TAG}"
|
||||
|
||||
if [[ "${PUSH_TAG}" == "yes" ]]; then
|
||||
echo
|
||||
echo "=== Pushing ${TAG} ==="
|
||||
echo
|
||||
|
||||
gcloud docker push "${TAG}"
|
||||
fi
|
||||
|
||||
if [[ -n "${LINK}" ]]; then
|
||||
echo
|
||||
echo "=== Pushing ${SYMBOLIC_TAG} ==="
|
||||
echo
|
||||
docker tag "${TAG}" "${SYMBOLIC_TAG}"
|
||||
gcloud docker push "${SYMBOLIC_TAG}"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Cleaning up ==="
|
||||
echo
|
||||
docker rm "${TMPNAME}" || true
|
||||
docker rmi -f "${TMPTAG}" || true
|
||||
if [[ -n "${LINK}" ]]; then
|
||||
docker rmi -f "${SYMBOLIC_TAG}" || true
|
||||
fi
|
||||
if [[ "${CLEAN_TAG}" == "yes" ]]; then
|
||||
docker rmi -f "${TAG}" || true
|
||||
else
|
||||
echo
|
||||
echo "=== ${TAG} leaked (BUILD_CLEAN_TAG not set) ==="
|
||||
echo
|
||||
fi
|
|
@ -1,13 +0,0 @@
|
|||
FROM debian:jessie
|
||||
|
||||
# Install packages:
|
||||
# curl (to download golang)
|
||||
# git (for getting the current head)
|
||||
# gcc make (for compilation)
|
||||
RUN apt-get update && apt-get install --yes curl git gcc make
|
||||
|
||||
# Install golang
|
||||
RUN curl -L https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz | tar zx -C /usr/local
|
||||
ENV PATH $PATH:/usr/local/go/bin
|
||||
|
||||
COPY onbuild.sh /onbuild.sh
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
mkdir -p /go
|
||||
export GOPATH=/go
|
||||
|
||||
mkdir -p /go/src/k8s.io
|
||||
ln -s /src/ /go/src/k8s.io/kops
|
||||
|
||||
cd /go/src/k8s.io/kops/
|
||||
make nodeup-gocode
|
||||
|
||||
mkdir -p /src/.build/artifacts/
|
||||
cp /go/bin/nodeup /src/.build/artifacts/
|
Loading…
Reference in New Issue