Skip to content

Latest commit

 

History

History
 
 

builder

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

image-builder

This builder is sugar on top of gcloud builds submit. It offers the following features:

  • Automatically injecting the standard commit-based tag (e.g. 20190403-dddd315ad-dirty) as _GIT_TAG
  • Optionally blocking pushes of dirty builds
  • Uploading the working directory to GCS once and then reusing it for several builds
  • Building multiple variants simultaneously and optionally sending their output to files

A "variant" is a group of GCB substitutions grouped together to describe several ways to build a given image. They are optionally defined in variants.yaml in the same folder as the Dockerfile and cloudbuild.yaml. For example, a subset of the kubekins-e2e variants looks like this:

variants:
  '1.16':
    CONFIG: '1.16'
    GO_VERSION: 1.13.5
    K8S_RELEASE: stable-1.16
    BAZEL_VERSION: 0.23.2
  '1.15':
    CONFIG: '1.15'
    GO_VERSION: 1.12.12
    K8S_RELEASE: stable-1.15
    BAZEL_VERSION: 0.23.2

By default, the image builder will build both the 1.15 and 1.16 groups simultaneously. If --log-dir is specified, it will write the build logs for each to 1.15.log and 1.16.log.

Alternatively, you can use --variant to build only one variant, e.g. --variant 1.15.

If no variants.yaml is specified, cloudbuild.yaml will be run once with no extra substitutions beyond _GIT_TAG.

Usage

go run ./images/builder [options] path/to/build-directory/
  • --allow-dirty: If true, allow pushing dirty builds.
  • --log-dir: If provided, build logs will be sent to files in this directory instead of to stdout/stderr.
  • --project: If specified, use a non-default GCP project.
  • --scratch-bucket: If provided, the complete GCS path for Cloud Build to store scratch files (sources, logs). Necessary for upload reuse. If omitted, gcloud will create or reuse a bucket of its choosing.
  • --variant: If specified, build only the given variant. An error if no variants are defined.
  • --env-passthrough: Comma-separated list of specified environment variables to be passed to GCB as substitutions with an underscore (_) prefix. If the variable doesn't exist, the substitution will exist but be empty.
  • --build-dir: If provided, this directory will be uploaded as the source for the Google Cloud Build run.
  • --gcb-config: If provided, this will be used as the name of the Google Cloud Build config file.
  • --no-source: If true, no source will be uploaded with this build.
  • --with-git-dir: If true, upload the .git directory to GCB, so we can e.g. get the git log and tag.

A note about logging in Prow

Prow job logs can be viewed at a URI constructed as follows: https://prow.k8s.io/view/gs/kubernetes-jenkins/logs/<job-name>/<job-number> e.g., https://prow.k8s.io/view/gs/kubernetes-jenkins/logs/ci-kubernetes-prototype-build/1187171788975509509

When --log-dir is specified (which is the default case when running in Prow), the GCB build logs will be written to a set of log files, based on the variant(s).

For example:

For single-variant jobs where the preference is to log directly to stdout (so that the log is instead visible in https://prow.k8s.io/view/gs/kubernetes-jenkins/logs/<job-name>/<job-number>), LOG_TO_STDOUT="y" can be specified.