diff --git a/.travis.yml b/.travis.yml index 4b0b01b..ffbd6fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,14 @@ -sudo: required - -# trusty required for docker -# https://github.com/travis-ci/travis-ci/issues/5448 -dist: trusty - -services: - - docker - +sudo: false language: go +go: + - 1.6 -matrix: - include: - - go: 1.6 +env: + - PKG=kube-apiserver + - PKG=kube-controller-manager + - PKG=kube-scheduler + - PKG=kubectl + - PKG=kubelet addons: apt: @@ -28,22 +25,12 @@ install: script: - mkdir -p /tmp/out - - ./scripts/ci_build.py - -after_failure: + - hammer build --output=/tmp/out --stream-logs-for=$PKG $PKG - tail logs/* -before_deploy: - - docker login -e="$DOCKER_EMAIL" -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" - deploy: - provider: script skip_cleanup: true script: /bin/bash scripts/bintray.sh /tmp/out on: branch: master - - provider: script - skip_cleanup: true - script: /bin/bash scripts/docker.sh - on: - branch: master diff --git a/README.md b/README.md index 85afcb7..0d86831 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,41 @@ -# Mantl Packaging +# Kubernetes Packaging This repository contains [Hammer](https://github.com/asteris-llc/hammer) specs -for building generic Mantl utilities. +for building [Mustwin's fork of kubernetes](https://github.com/MustWin/kubernetes) **Table of Contents** -- [Mantl Packaging](#mantl-packaging) +- [Kubernetes Packaging](#kubernetes-packaging) - [Packages](#packages) - [Kubernetes](#kubernetes) + - [kube-apiserver](#kube-apiserver) + - [kube-controller-manager](#kube-controller-manager) + - [kube-proxy](#kube-proxy) + - [kube-scheduler](#kube-scheduler) + - [kubectl](#kubectl) + - [kubelet](#kubelet) - [Building](#building) + ## Packages ### Kubernetes -A script to generate certificates with a number of sensible defaults set. +#### kube-apiserver + +#### kube-controller-manager + +#### kube-proxy + +#### kube-scheduler + +#### kubectl + +#### kubelet ## Building diff --git a/kubernetes/build.sh b/kubernetes/build.sh new file mode 100644 index 0000000..928828e --- /dev/null +++ b/kubernetes/build.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -x + +pkg={{.Name}} + +install={{.BuildRoot}}/out +mkdir -p $install || true + +cd {{.BuildRoot}} + +# Fetch a branch with working consul-integration +git clone -q -b consul-integration --depth 1 --single-branch https://github.com/MustWin/kubernetes.git +cd kubernetes + +# Build all components +# If we are running inside vagrant... +if [ -e /home/vagrant/.gvm/scripts/gvm ] ; then + source /home/vagrant/.gvm/scripts/gvm + gvm use go1.6 || echo "Using go1.6" +fi + +go get github.com/tools/godep +./hack/install-etcd.sh + +case $pkg in + kube-apiserver) ;& + kube-controller-manager) ;& + kubectl) ;& + kubelet) WHAT=cmd/$pkg ;; + kube-scheduler) WHAT=plugin/cmd/kube-scheduler ;; +esac + +make all WHAT=$WHAT GOFLAGS=-v +mv $PWD/_output/local/bin/linux/amd64/* $install + +export PATH=$GOPATH/bin:./third_party/etcd:$PATH diff --git a/kubernetes/kubernetes/spec.yml b/kubernetes/kube-apiserver/spec.yml similarity index 64% rename from kubernetes/kubernetes/spec.yml rename to kubernetes/kube-apiserver/spec.yml index 7401f76..ad7edec 100644 --- a/kubernetes/kubernetes/spec.yml +++ b/kubernetes/kube-apiserver/spec.yml @@ -1,8 +1,8 @@ --- -name: kubernetes +name: kube-apiserver version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a license: ASL 2.0 -iteration: 3 +iteration: 1 vendor: Google architecture: x86_64 url: http://kubernetes.io/ @@ -10,14 +10,12 @@ description: Automated container deployment, scaling, and management type: rpm targets: - - src: '{{.BuildRoot}}/out/kubectl' - dest: /usr/bin/ - - src: '{{.BuildRoot}}/out/kubelet' + - src: '{{.BuildRoot}}/out/{{.Name}}' dest: /usr/bin/ scripts: build: | - {{includeTemplate (specFile "build.sh")}} + {{includeTemplate (specFile "../build.sh")}} extra-args: | --rpm-os linux diff --git a/kubernetes/kube-controller-manager/spec.yml b/kubernetes/kube-controller-manager/spec.yml new file mode 100644 index 0000000..1790ed9 --- /dev/null +++ b/kubernetes/kube-controller-manager/spec.yml @@ -0,0 +1,22 @@ +--- +name: kube-controller-manager +version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a +license: ASL 2.0 +iteration: 1 +vendor: Google +architecture: x86_64 +url: http://kubernetes.io/ +description: Automated container deployment, scaling, and management +type: rpm + +targets: + - src: '{{.BuildRoot}}/out/{{.Name}}' + dest: /usr/bin/ + +scripts: + build: | + {{includeTemplate (specFile "../build.sh")}} + +extra-args: | + --rpm-os linux + --rpm-auto-add-directories diff --git a/kubernetes/kube-proxy/spec.yml b/kubernetes/kube-proxy/spec.yml new file mode 100644 index 0000000..7d5304f --- /dev/null +++ b/kubernetes/kube-proxy/spec.yml @@ -0,0 +1,22 @@ +--- +name: kube-proxy +version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a +license: ASL 2.0 +iteration: 1 +vendor: Google +architecture: x86_64 +url: http://kubernetes.io/ +description: Automated container deployment, scaling, and management +type: rpm + +targets: + - src: '{{.BuildRoot}}/out/{{.Name}}' + dest: /usr/bin/ + +scripts: + build: | + {{includeTemplate (specFile "../build.sh")}} + +extra-args: | + --rpm-os linux + --rpm-auto-add-directories diff --git a/kubernetes/kube-scheduler/spec.yml b/kubernetes/kube-scheduler/spec.yml new file mode 100644 index 0000000..ba5df49 --- /dev/null +++ b/kubernetes/kube-scheduler/spec.yml @@ -0,0 +1,22 @@ +--- +name: kube-scheduler +version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a +license: ASL 2.0 +iteration: 1 +vendor: Google +architecture: x86_64 +url: http://kubernetes.io/ +description: Automated container deployment, scaling, and management +type: rpm + +targets: + - src: '{{.BuildRoot}}/out/{{.Name}}' + dest: /usr/bin/ + +scripts: + build: | + {{includeTemplate (specFile "../build.sh")}} + +extra-args: | + --rpm-os linux + --rpm-auto-add-directories diff --git a/kubernetes/kubectl/spec.yml b/kubernetes/kubectl/spec.yml new file mode 100644 index 0000000..7635a6c --- /dev/null +++ b/kubernetes/kubectl/spec.yml @@ -0,0 +1,22 @@ +--- +name: kubectl +version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a +license: ASL 2.0 +iteration: 1 +vendor: Google +architecture: x86_64 +url: http://kubernetes.io/ +description: Automated container deployment, scaling, and management +type: rpm + +targets: + - src: '{{.BuildRoot}}/out/{{.Name}}' + dest: /usr/bin/ + +scripts: + build: | + {{includeTemplate (specFile "../build.sh")}} + +extra-args: | + --rpm-os linux + --rpm-auto-add-directories diff --git a/kubernetes/kubelet/spec.yml b/kubernetes/kubelet/spec.yml new file mode 100644 index 0000000..8bc5fbf --- /dev/null +++ b/kubernetes/kubelet/spec.yml @@ -0,0 +1,22 @@ +--- +name: kubelet +version: 1.3.0-alpha.1.1977-a1e79e91b9fb6a +license: ASL 2.0 +iteration: 1 +vendor: Google +architecture: x86_64 +url: http://kubernetes.io/ +description: Automated container deployment, scaling, and management +type: rpm + +targets: + - src: '{{.BuildRoot}}/out/{{.Name}}' + dest: /usr/bin/ + +scripts: + build: | + {{includeTemplate (specFile "../build.sh")}} + +extra-args: | + --rpm-os linux + --rpm-auto-add-directories diff --git a/kubernetes/kubernetes/build.sh b/kubernetes/kubernetes/build.sh deleted file mode 100644 index 2a07b76..0000000 --- a/kubernetes/kubernetes/build.sh +++ /dev/null @@ -1,44 +0,0 @@ -set -ex - -## create an installation -INSTALL={{.BuildRoot}}/out -mkdir $INSTALL - -cd {{.BuildRoot}} - -# Fetch a branch with working consul-integration -git clone -q -b consul-integration --single-branch https://github.com/MustWin/kubernetes.git -cd kubernetes - -# Build all components -# If we are running inside vagrant... -if [ -e /home/vagrant/.gvm/scripts/gvm ] ; then - source /home/vagrant/.gvm/scripts/gvm - gvm use go1.6 || echo "Using go1.6" -fi - -go get github.com/tools/godep -./hack/install-etcd.sh -./build/run.sh hack/build-go.sh -export PATH=$GOPATH/bin:./third_party/etcd:$PATH || echo "Somethings wrong with export" && sleep 1 - -ls -l _output/dockerized/bin/* -cp _output/dockerized/bin/linux/amd64/kubelet _output/dockerized/bin/linux/amd64/kubectl $INSTALL - -# Build hypercube docker image -cd {{.BuildRoot}}/kubernetes -pushd ./cluster/images/hyperkube/ - -# hack to workaround sed syntax fixed in https://github.com/kubernetes/kubernetes/commit/cb11324cc32ffc58c022daef3278a0810c675778 -sed -i "s/sed -i \"\"/sed -i/g" Makefile - -ARCH=amd64 REGISTRY="ciscocloud" make VERSION=v{{.Version}} || echo "hypercube build failed" && sleep 1 -popd - -pushd ./cluster/addons/dns/kube2consul/ -# prevent `cannot enable tty mode on non tty input` when running under hammer -sed -i "s/docker run -it/docker run -i/g" Makefile -ARCH=amd64 REGISTRY="ciscocloud" TAG=v{{.Version}} make || echo "kube2consul build failed" && sleep 1 -popd - -sudo rm -rf _output diff --git a/scripts/bintray.sh b/scripts/bintray.sh old mode 100644 new mode 100755 diff --git a/scripts/build_dependencies.sh b/scripts/build_dependencies.sh old mode 100644 new mode 100755 index 0f1e4c0..bc170d2 --- a/scripts/build_dependencies.sh +++ b/scripts/build_dependencies.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -e ### Kubernetes @@ -11,24 +12,16 @@ gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF +useradd vagrant || true sudo yum update -y -sudo yum install -y tar git -sudo yum install -y epel-release -sudo yum update -y systemd -sudo yum install -y docker-engine -sudo groupadd docker -sudo usermod -a -G docker vagrant -sudo usermod -a -G dockerroot vagrant -sudo systemctl enable docker -sudo systemctl start docker +sudo yum install -y bison epel-release git go make sudo systemd tar which -# Install newer go Version -sudo -u vagrant bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) && \ -source /home/vagrant/.gvm/scripts/gvm && \ -gvm install go1.4 && \ -gvm use go1.4 && \ -export GOROOT_BOOTSTRAP=$GOROOT && \ +Install newer go Version +sudo -u vagrant bash < <(curl -sSL https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) +source /home/vagrant/.gvm/scripts/gvm +export GOROOT_BOOTSTRAP=$GOROOT gvm install go1.6 +gvm use go1.6 chmod -R +rwx /home/vagrant/.gvm chown -R vagrant /home/vagrant/.gvm diff --git a/scripts/ci_build.py b/scripts/ci_build.py deleted file mode 100755 index d2a6563..0000000 --- a/scripts/ci_build.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -import sys -import os -from os import path -from subprocess import check_call, check_output, CalledProcessError -from threading import Thread -import re -import time -from Queue import Queue - -DIR = path.abspath(path.dirname(__file__)) -ROOT = path.abspath(path.join(DIR, '..')) - -PATH_RE = re.compile(r'\|(.+?)\| (.+)') -PATHS = dict([ - PATH_RE.match(line.strip()).groups() - for line in open(path.join(DIR, 'paths')).readlines( - ) if PATH_RE.match(line) is not None -]) - -COMMIT_RANGE = os.environ['TRAVIS_COMMIT_RANGE'] -TRAVIS_COMMIT = os.environ['TRAVIS_COMMIT'] -TRAVIS_BRANCH = os.environ['TRAVIS_BRANCH'] - - -def ping(signal): - while signal.empty(): - sys.stdout.write("Still building...") - sys.stdout.flush() - time.sleep(60) - return - - -def build(names, stream_for=None): - print 'Building %s' % ', '.join(names) - args = ['hammer', 'build', '--output=/tmp/out'] - if stream_for: - args.append('--stream-logs-for=%s' % stream_for) - - args.extend(names) - stopper = Queue() - pinger = Thread(target=ping, args=(stopper, )) - pinger.start() - try: - check_call(args) - except Exception as e: - print(e) - stopper.put("STOP") - sys.stdout.flush() - sys.stderr.flush() - - -def main(args): - print 'Evaluating whether to build %s' % COMMIT_RANGE - - if COMMIT_RANGE: - old, new = filter(None, COMMIT_RANGE.split(".")) - try: - check_call(['git', 'merge-base', '--is-ancestor', old, new]) - except CalledProcessError: - # Branch rebased, "old" hash is previous head of same branch - print "Branch rebased, %s hash is previous head of same branch (%s)" % ( - old, TRAVIS_BRANCH) - ancestor = check_output(['git', 'merge-base', TRAVIS_BRANCH, new - ]).strip() - print "Common ancestor for merge: %s, check against it" % ( - ancestor) - commit_range = "%s..%s" % (ancestor, new) - else: - commit_range = COMMIT_RANGE - else: - # Single commit case - commit_range = "%s^1..%s" % (TRAVIS_COMMIT, TRAVIS_COMMIT) - print "Single commit, use '%s' as range" % commit_range - - if 'ci: all' in check_output(['git', 'log', '--pretty=full', - '--ancestry-path', commit_range]): - names = PATHS.keys() - else: - names = [ - name - for (name, path) in PATHS.items() - if 0 != len([ - line for line in check_output( - ['git', 'show', '--name-only', '--pretty=format:', - commit_range]).split() if line.startswith(path) - ]) - ] - - if 'mesos' in names: - stream_for = 'mesos' - elif 'marathon' in names: - stream_for = 'marathon' - elif len(names) == 1: - stream_for = names[0] - else: - stream_for = None - - if names: - try: - build(names, stream_for) - except CalledProcessError as e: - sys.stderr.write('`%s` returned non-zero exit code %d' % - (' '.join(e.cmd), e.returncode)) - return 1 - else: - print 'nothing to build, skipping' - - return 0 - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/scripts/docker.sh b/scripts/docker.sh deleted file mode 100755 index a7c45e4..0000000 --- a/scripts/docker.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -set -ex - -cat scripts/images -docker images - -while read image; do - docker images | grep "$image" | awk '{printf "%s:%s\n", $1, $2}' | xargs -r -n1 docker push -done < scripts/images diff --git a/scripts/images b/scripts/images deleted file mode 100644 index c51d0c5..0000000 --- a/scripts/images +++ /dev/null @@ -1,2 +0,0 @@ -ciscocloud/hyperkube* -ciscocloud/kube2consul-amd64* diff --git a/scripts/paths b/scripts/paths index f64e4a7..dc59776 100644 --- a/scripts/paths +++ b/scripts/paths @@ -1 +1,6 @@ -|kubernetes| kubernetes/kubernetes +|kube-apiserver| kubernetes/kube-apiserver +|kube-controller-manager| kubernetes/kube-controller-manager +|kube-proxy| kubernetes/kube-proxy +|kube-scheduler| kubernetes/kube-scheduler +|kubectl| kubernetes/kubectl +|kubelet| kubernetes/kubelet \ No newline at end of file