Skip to content

Commit

Permalink
gcb: Update k8s-cloud-builder image to support Kubernetes builds
Browse files Browse the repository at this point in the history
Signed-off-by: Stephen Augustus <saugustus@vmware.com>
  • Loading branch information
justaugustus committed Oct 17, 2019
1 parent a49231d commit bf1f451
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 31 deletions.
47 changes: 47 additions & 0 deletions gcb/build.yaml
@@ -0,0 +1,47 @@
# See https://cloud.google.com/cloud-build/docs/build-config
timeout: 7200s
steps:
- name: 'gcr.io/cloud-builders/git'
dir: 'go/src/k8s.io'
args:
- clone
- --branch=${_KUBERNETES_BRANCH}
- ${_KUBERNETES_REPO}

- name: 'gcr.io/cloud-builders/git'
dir: 'go/src/k8s.io'
args:
- clone
- --branch=${_RELEASE_TOOL_BRANCH}
- ${_RELEASE_TOOL_REPO}

- name: 'gcr.io/$PROJECT_ID/k8s-gcb-base'
dir: 'go/src/k8s.io/kubernetes'
args:
- make
- clean

- name: 'gcr.io/$PROJECT_ID/k8s-gcb-base'
dir: 'go/src/k8s.io/kubernetes'
args:
- make
- release-in-a-container

# TODO: Need ['--nomock', '--verbose', '--ci']
- name: 'gcr.io/$PROJECT_ID/k8s-gcb-base'
dir: 'go/src/k8s.io/release'
args:
- ./push-build.sh
- --allow-dup
#- --extra-publish-file=k8s-master
#- --hyperkube

options:
machineType: 'N1_HIGHCPU_32'
substitution_option: 'ALLOW_LOOSE'

substitutions:
_KUBERNETES_REPO: 'https://github.com/kubernetes/kubernetes.git'
_KUBERNETES_BRANCH: 'master'
_RELEASE_TOOL_REPO: 'https://github.com/kubernetes/release.git'
_RELEASE_TOOL_BRANCH: 'master'
57 changes: 36 additions & 21 deletions images/k8s-cloud-builder/Dockerfile
@@ -1,7 +1,4 @@
# To rebuild and publish this container run:
# gcloud builds submit --config update_build_container.yaml .

FROM ubuntu:18.04
FROM k8s.gcr.io/kube-cross:v1.12.10-1

ARG DEBIAN_FRONTEND=noninteractive

Expand Down Expand Up @@ -44,32 +41,50 @@ RUN apt-get -q update \
# Install gcloud
# common::set_cloud_binaries() looks for it in this path
RUN mkdir /opt/google
RUN curl -sSL https://sdk.cloud.google.com > /tmp/install.sh && \
bash /tmp/install.sh --install-dir=/opt/google --disable-prompts
RUN apt-get -y update && \
apt-get -y install gcc python2.7 python-dev python-setuptools wget ca-certificates \
# These are necessary for add-apt-respository
software-properties-common && \
# Install Git >2.0.1
apt-get -y update && \
apt-get -y install git && \
# Setup Google Cloud SDK (latest)
curl -sSL https://sdk.cloud.google.com > /tmp/install.sh && \
bash /tmp/install.sh --install-dir=/opt/google --disable-prompts \
# install crcmod: https://cloud.google.com/storage/docs/gsutil/addlhelp/CRC32CandInstallingcrcmod
&& pip install -U crcmod && \
# Clean up
apt-get -y remove gcc python-dev python-setuptools wget && \
rm -rf /var/lib/apt/lists/* && \
rm -rf ~/.config/gcloud

ENV PATH=/opt/google/google-cloud-sdk/bin:$PATH

# Install docker stuff
#---------------------
# Based on instructions from:
# https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/#uninstall-old-versions
RUN apt-get -y update \
&& apt-get install -y \
linux-image-extra-virtual \
# https://docs.docker.com/install/linux/docker-ce/debian/
RUN apt-get -y update && \
apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable edge" \
&& apt-get -y update

ARG DOCKER_VERSION=18.06.0~ce~3-0~ubuntu
RUN apt-get install -y \
docker-ce=${DOCKER_VERSION} \
make \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - && \
apt-key fingerprint 0EBFCD88 && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable" && \
apt-get -y update && \
apt-get -y install \
docker-ce \
docker-ce-cli \
containerd.io \
unzip

# Cleanup a bit
RUN rm -rf /var/lib/apt/lists/*

ENTRYPOINT []
8 changes: 4 additions & 4 deletions images/k8s-cloud-builder/cloudbuild.yaml
Expand Up @@ -6,14 +6,14 @@ steps:
- name: gcr.io/cloud-builders/docker
args:
- build
- --tag=gcr.io/$PROJECT_ID/k8s-cloud-builder:$_GIT_TAG
- --tag=gcr.io/$PROJECT_ID/k8s-cloud-builder:latest
- --tag=gcr.io/$PROJECT_ID/k8s-gcb-base:$_GIT_TAG
- --tag=gcr.io/$PROJECT_ID/k8s-gcb-base:latest
- .
substitutions:
# _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and
# can be used as a substitution
_GIT_TAG: '12345'
_PULL_BASE_REF: 'dev'
images:
- 'gcr.io/$PROJECT_ID/k8s-cloud-builder:$_GIT_TAG'
- 'gcr.io/$PROJECT_ID/k8s-cloud-builder:latest'
- 'gcr.io/$PROJECT_ID/k8s-gcb-base:$_GIT_TAG'
- 'gcr.io/$PROJECT_ID/k8s-gcb-base:latest'
18 changes: 12 additions & 6 deletions push-build.sh
Expand Up @@ -122,13 +122,19 @@ RELEASE_BUCKET=${FLAGS_bucket:-"kubernetes-release-dev"}
# This will canonicalize the path
KUBE_ROOT=$(pwd -P)

if [[ ! -f /.dockerenv ]]; then
OUTPUT_ROOT="_output/dockerized"
else
OUTPUT_ROOT="_output"
fi

USE_BAZEL=false
if release::was_built_with_bazel $KUBE_ROOT $FLAGS_release_kind; then
USE_BAZEL=true
bazel build //:version
LATEST=$(cat $KUBE_ROOT/bazel-genfiles/version)
else
LATEST=$(tar -O -xzf $KUBE_ROOT/_output/release-tars/$FLAGS_release_kind.tar.gz $FLAGS_release_kind/version)
LATEST=$(tar -O -xzf $KUBE_ROOT/$OUTPUT_ROOT/release-tars/$FLAGS_release_kind.tar.gz $FLAGS_release_kind/version)
fi

if [[ "$LATEST" =~ (${VER_REGEX[release]}(\.${VER_REGEX[build]})?(-dirty)?) ]]; then
Expand Down Expand Up @@ -195,14 +201,14 @@ common::stepheader COPY RELEASE ARTIFACTS
attempt=0
while ((attempt<max_attempts)); do
if $USE_BAZEL; then
release::gcs::bazel_push_build $GCS_DEST $LATEST $KUBE_ROOT/_output \
release::gcs::bazel_push_build $GCS_DEST $LATEST $KUBE_ROOT/$OUTPUT_ROOT \
$RELEASE_BUCKET && break
else
release::gcs::locally_stage_release_artifacts $GCS_DEST $LATEST \
$KUBE_ROOT/_output \
$KUBE_ROOT/$OUTPUT_ROOT \
$FLAGS_release_kind
release::gcs::push_release_artifacts \
$KUBE_ROOT/_output/gcs-stage/$LATEST \
$KUBE_ROOT/$OUTPUT_ROOT/gcs-stage/$LATEST \
gs://$RELEASE_BUCKET/$GCS_DEST/$LATEST && break
fi
((attempt++))
Expand All @@ -216,7 +222,7 @@ if [[ -n "${FLAGS_docker_registry:-}" ]]; then
# TODO: support Bazel too
# Docker tags cannot contain '+'
release::docker::release $FLAGS_docker_registry ${LATEST/+/_} \
$KUBE_ROOT/_output
$KUBE_ROOT/$OUTPUT_ROOT
fi

# If not --ci, then we're done here.
Expand All @@ -228,7 +234,7 @@ if ! ((FLAGS_noupdatelatest)); then
##############################################################################
attempt=0
while ((attempt<max_attempts)); do
release::gcs::publish_version $GCS_DEST $LATEST $KUBE_ROOT/_output \
release::gcs::publish_version $GCS_DEST $LATEST $KUBE_ROOT/$OUTPUT_ROOT \
$RELEASE_BUCKET $GCS_EXTRA_PUBLISH_FILE && break
((attempt++))
done
Expand Down

0 comments on commit bf1f451

Please sign in to comment.