Merge branch 'master' of github.com:GoogleCloudPlatform/k8s-container-builder into snapshot

This commit is contained in:
Priya Wadhwa 2018-03-05 09:47:16 -08:00
commit 7456e9de9a
No known key found for this signature in database
GPG Key ID: 0D0DAFD8F7AA73AE
9 changed files with 4539 additions and 3 deletions

1
.gcloudignore Normal file
View File

@ -0,0 +1 @@
vendor/

2
Gopkg.lock generated
View File

@ -292,6 +292,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "c5933c09ead2842baa85dcb4321cef9623f4ab6ec4f6c84b6579071aa1baf3e4"
inputs-digest = "6e9d101389852c13c0a3dc486d69b0438b6518c42d9031e3bf0c41d7d1943438"
solver-name = "gps-cdcl"
solver-version = 1

View File

@ -23,20 +23,28 @@ GOOS ?= $(shell go env GOOS)
GOARCH = amd64
ORG := github.com/GoogleCloudPlatform
PROJECT := k8s-container-builder
REGISTRY?=gcr.io/kbuild-project
REPOPATH ?= $(ORG)/$(PROJECT)
GO_FILES := $(shell find . -type f -name '*.go' -not -path "./vendor/*")
GO_LDFLAGS := '-extldflags "-static"'
GO_BUILD_TAGS := "containers_image_ostree_stub containers_image_openpgp exclude_graphdriver_devicemapper exclude_graphdriver_btrfs"
EXECUTOR_PACKAGE = $(REPOPATH)/executor
KBUILD_PACKAGE = $(REPOPATH)/kbuild
out/executor: $(GO_FILES)
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=1 go build -o $@ $(EXECUTOR_PACKAGE)
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -tags $(GO_BUILD_TAGS) -o $@ $(EXECUTOR_PACKAGE)
out/kbuild: $(GO_FILES)
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=1 go build -o $@ $(KBUILD_PACKAGE)
GOOS=$* GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags $(GO_LDFLAGS) -tags $(GO_BUILD_TAGS) -o $@ $(KBUILD_PACKAGE)
.PHONY: test
test: out/executor out/kbuild
@ ./test.sh
.PHONY: integration-test
integration-test: out/executor out/kbuild
@ ./integration-test.sh

4308
files/ca-certificates.crt Normal file

File diff suppressed because it is too large Load Diff

19
integration-test.sh Executable file
View File

@ -0,0 +1,19 @@
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#!/bin/bash
set -e
echo "Running integration tests..."
go run integration_tests/integration_test_yaml.go | gcloud container builds submit --config /dev/fd/0 .

View File

@ -0,0 +1,15 @@
# Copyright 2018 Google, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
FROM gcr.io/google-appengine/debian9:latest

View File

@ -0,0 +1,46 @@
[
{
"Image1": "gcr.io/kbuild-test/docker-extract-filesystem:latest",
"Image2": "gcr.io/kbuild-test/kbuild-extract-filesystem:latest",
"DiffType": "File",
"Diff": {
"Adds": [
{
"Name": "/workspace",
"Size": 16271436
},
{
"Name": "/workspace/Dockerfile",
"Size": 0
},
{
"Name": "/workspace/executor",
"Size": 16271436
}
],
"Dels": [
{
"Name": "/dev",
"Size": 0
},
{
"Name": "/etc/hosts",
"Size": 109
},
{
"Name": "/etc/resolv.conf",
"Size": 38
},
{
"Name": "/proc",
"Size": 0
},
{
"Name": "/sys",
"Size": 0
}
],
"Mods": null
}
}
]

View File

@ -0,0 +1,19 @@
# Copyright 2018 Google, Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Builds the static Go image to execute in a Kubernetes job
FROM scratch
ADD out/executor /workspace/executor
ADD files/ca-certificates.crt /etc/ssl/certs/

View File

@ -0,0 +1,120 @@
/*
Copyright 2018 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
var tests = []struct {
description string
dockerfilePath string
configPath string
context string
repo string
}{
{
description: "test extract filesystem",
dockerfilePath: "/workspace/integration_tests/dockerfiles/Dockerfile_test_extract_fs",
configPath: "/workspace/integration_tests/dockerfiles/config_test_extract_fs.json",
context: "integration_tests/dockerfiles/",
repo: "extract-filesystem",
},
}
type step struct {
Name string
Args []string
Env []string
}
type testyaml struct {
Steps []step
}
var executorImage = "executor-image"
var executorCommand = "/workspace/executor"
var dockerImage = "gcr.io/cloud-builders/docker"
var ubuntuImage = "ubuntu"
var testRepo = "gcr.io/kbuild-test/"
var dockerPrefix = "docker-"
var kbuildPrefix = "kbuild-"
var daemonPrefix = "daemon://"
var containerDiffOutputFile = "container-diff.json"
func main() {
// First, copy container-diff in
containerDiffStep := step{
Name: "gcr.io/cloud-builders/gsutil",
Args: []string{"cp", "gs://container-diff/latest/container-diff-linux-amd64", "."},
}
containerDiffPermissions := step{
Name: ubuntuImage,
Args: []string{"chmod", "+x", "container-diff-linux-amd64"},
}
// Build executor image
buildExecutorImage := step{
Name: dockerImage,
Args: []string{"build", "-t", executorImage, "-f", "integration_tests/executor/Dockerfile", "."},
}
y := testyaml{
Steps: []step{containerDiffStep, containerDiffPermissions, buildExecutorImage},
}
for _, test := range tests {
// First, build the image with docker
dockerBuild := step{
Name: dockerImage,
Args: []string{"build", "-t", testRepo + dockerPrefix + test.repo, "-f", test.dockerfilePath, test.context},
}
// Then, buld the image with kbuild and commit it
var commitID = "test"
kbuild := step{
Name: dockerImage,
Args: []string{"run", "-v", test.dockerfilePath + ":/workspace/Dockerfile", "--name", commitID, executorImage, executorCommand},
}
commit := step{
Name: dockerImage,
Args: []string{"commit", commitID, testRepo + kbuildPrefix + test.repo},
}
dockerImage := daemonPrefix + testRepo + dockerPrefix + test.repo
kbuildImage := daemonPrefix + testRepo + kbuildPrefix + test.repo
// Run container diff on the images
args := "container-diff-linux-amd64 diff " + dockerImage + " " + kbuildImage + " --type=file -j > " + containerDiffOutputFile
containerDiff := step{
Name: ubuntuImage,
Args: []string{"sh", "-c", args},
Env: []string{"PATH=/workspace:/bin"},
}
// Compare output files
compareOutputs := step{
Name: ubuntuImage,
Args: []string{"cmp", test.configPath, containerDiffOutputFile},
}
y.Steps = append(y.Steps, dockerBuild, kbuild, commit, containerDiff, compareOutputs)
}
d, _ := yaml.Marshal(&y)
fmt.Println(string(d))
}