From e18d8236b864626e04ffb7d8e71d1a5334346456 Mon Sep 17 00:00:00 2001 From: Martin Treusch von Buttlar Date: Thu, 1 Oct 2020 01:44:43 +0200 Subject: [PATCH] Add support for Vagrant (#1428) * Add support for Vagrant Use the Vagrantfile to create a workable test machine in a few minutes to run the unit and most of the integration tests on non-Linux systems. * Vagrant: install jq and crane to help debugging --- .gitignore | 1 + DEVELOPMENT.md | 3 +++ Vagrantfile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 Vagrantfile diff --git a/.gitignore b/.gitignore index d80906dc9..6dee7552a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ out/ .idea *.iml +.vagrant diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 330d9ba56..8d19ce316 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -55,6 +55,9 @@ While you iterate on kaniko, you can verify images built with kaniko by: kaniko has both [unit tests](#unit-tests) and [integration tests](#integration-tests). +Please note that the tests require a Linux machine - use Vagrant to quickly set +up the test environment needed if you work with macOS or Windows. + ### Unit Tests The unit tests live with the code they test and can be run with: diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 000000000..72b4dc46f --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,50 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure("2") do |config| + config.vm.box = "generic/debian10" + config.vm.synced_folder ".", "/go/src/github.com/GoogleContainerTools/kaniko" + config.ssh.extra_args = ["-t", "cd /go/src/github.com/GoogleContainerTools/kaniko; bash --login"] + + config.vm.provision "shell", inline: <<-SHELL + apt-get update && apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + html-xml-utils \ + python \ + wget \ + ca-certificates \ + jq \ + software-properties-common + curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - + add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" + apt-get update + apt-get install -y docker-ce-cli docker-ce containerd.io + usermod -a -G docker vagrant + + curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 + chmod +x container-diff-linux-amd64 && mv container-diff-linux-amd64 /usr/local/bin/container-diff + + wget --quiet https://storage.googleapis.com/pub/gsutil.tar.gz + mkdir -p /opt/gsutil + tar xfz gsutil.tar.gz -C /opt/ + rm gsutil.tar.gz + ln -s /opt/gsutil/gsutil /usr/local/bin + + export GODLURL=https://golang.org/$(curl https://golang.org/dl/ | hxnormalize -x | hxselect -s "\n" "#page a.downloadBox" | cut -d = -f 3 | cut -d '"' -f 2 | grep linux) + wget --quiet $GODLURL + tar -C /usr/local -xzf go*.linux-amd64.tar.gz + echo 'export PATH=$PATH:/usr/local/go/bin:/go/bin' > /etc/profile.d/go-path.sh + echo 'export GOPATH=/go' >> /etc/profile.d/go-path.sh + chmod a+x /etc/profile.d/go-path.sh + chown vagrant /go + chown vagrant /go/bin + + docker run --rm -d -p 5000:5000 --name registry -e DEBUG=true registry:2 + echo 'export IMAGE_REPO=localhost:5000' > /etc/profile.d/local-registry.sh + chmod a+x /etc/profile.d/local-registry.sh + go get github.com/google/go-containerregistry/cmd/crane + SHELL +end