This doc explains the development workflow so you can get started contributing to Kaniko!
First you will need to setup your GitHub account and create a fork:
Once you have those, you can iterate on kaniko:
When you're ready, you can create a PR!
The Go tools require that you clone the repository to the src/github.com/GoogleContainerTools/kaniko
directory
in your GOPATH
.
To check out this repository:
- Create your own fork of this repo
- Clone it to your machine:
mkdir -p ${GOPATH}/src/github.com/GoogleContainerTools
cd ${GOPATH}/src/github.com/GoogleContainerTools
git clone git@github.com:${YOUR_GITHUB_USERNAME}/kaniko.git
cd kaniko
git remote add upstream git@github.com:GoogleContainerTools/kaniko.git
git remote set-url --push upstream no_push
Adding the upstream
remote sets you up nicely for regularly syncing your
fork.
Images built with kaniko should be no different from images built elsewhere. While you iterate on kaniko, you can verify images built with kaniko by:
- Build the image using another system, such as
docker build
- Use
container-diff
to diff the images
kaniko has both unit tests and integration tests.
The unit tests live with the code they test and can be run with:
make test
These tests will not run correctly unless you have checked out your fork into your $GOPATH
.
The integration tests live in integration
and can be run with:
export GCS_BUCKET="gs://<your bucket>"
export IMAGE_REPO="gcr.io/somerepo"
make integration-test
If you want to run make integration-test
, you must override the project using environment variables:
GCS_BUCKET
- The name of your GCS bucketIMAGE_REPO
- The path to your docker image repo
You can also run tests with go test
, for example to run tests individually:
go test -v --bucket $GCS_BUCKET --repo $IMAGE_REPO -run TestLayers/test_layer_Dockerfile_test_copy_bucket
Requirements:
gcloud
gsutil
container-diff
- A bucket in GCS which you have write access to via
the user currently logged into
gcloud
- An image repo which you have write access to via the user currently logged into
gcloud
These tests will be kicked off by reviewers for submitted PRs.
The goal is for Kaniko to be at least as fast at building Dockerfiles as Docker is, and to that end, we've built
in benchmarking to check the speed of not only each full run, but also how long each step of each run takes. To turn
on benchmarking, just set the BENCHMARK_FILE
environment variable, and kaniko will output all the benchmark info
of each run to that file location.
docker run -v $(pwd):/workspace -v ~/.config:/root/.config \
-e BENCHMARK_FILE=/workspace/benchmark_file \
gcr.io/kaniko-project/executor:latest \
--dockerfile=<path to Dockerfile> --context=/workspace \
--destination=gcr.io/my-repo/my-image
Additionally, the integration tests can output benchmarking information to a benchmarks
directory under the
integration
directory if the BENCHMARK
environment variable is set to true.
BENCHMARK=true go test -v --bucket $GCS_BUCKET --repo $IMAGE_REPO
When you have changes you would like to propose to kaniko, you will need to:
- Ensure the commit message(s) describe what issue you are fixing and how you are fixing it (include references to issue numbers if appropriate)
- Create a pull request
Each PR must be reviewed by a maintainer. This maintainer will add the kokoro:run
label
to a PR to kick of the integration tests, which must pass for the PR
to be submitted.