benchmark project added
This commit is contained in:
parent
e0f93578b6
commit
5d013626fc
|
|
@ -1,2 +1,3 @@
|
|||
out/
|
||||
.idea
|
||||
*.iml
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
FROM bash:4.4
|
||||
|
||||
ARG NUM
|
||||
COPY context.txt .
|
||||
COPY make.sh .
|
||||
RUN ls -al make.sh
|
||||
SHELL ["/usr/local/bin/bash", "-c"]
|
||||
RUN ./make.sh $NUM
|
||||
RUN ls -al /workdir | wc
|
||||
|
|
@ -0,0 +1 @@
|
|||
hello world
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#!/usr/local/bin/bash
|
||||
|
||||
mkdir /workdir
|
||||
|
||||
i=1
|
||||
while [ $i -le $1 ]
|
||||
do
|
||||
cat context.txt > /workdir/somefile$i
|
||||
i=$(( $i + 1 ))
|
||||
done
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
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 integration
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSnapshotBenchmark(t *testing.T) {
|
||||
cwd, err := os.Getwd()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
contextDir := filepath.Join(cwd, "benchmark")
|
||||
|
||||
nums := []int{10000, 50000, 100000, 200000, 300000, 500000, 700000, 800000}
|
||||
|
||||
for _, num := range nums {
|
||||
|
||||
t.Run("test_benchmark"+string(num), func(t *testing.T) {
|
||||
t.Parallel()
|
||||
dockerfile := "Dockerfile_FS_benchmark"
|
||||
kanikoImage := GetKanikoImage(config.imageRepo, dockerfile)
|
||||
buildArgs := []string{"--build-arg", fmt.Sprintf("NUM=%d", num)}
|
||||
if _, err := buildKanikoImage("", dockerfile,
|
||||
buildArgs, []string{}, kanikoImage, contextDir, config.gcsBucket, config.serviceAccount); err != nil {
|
||||
t.Errorf("could not run benchmark results for num %d", num)
|
||||
}
|
||||
})
|
||||
}
|
||||
if err := logBenchmarks("benchmark"); err != nil {
|
||||
t.Logf("Failed to create benchmark file: %v", err)
|
||||
}
|
||||
}
|
||||
|
|
@ -259,70 +259,25 @@ func (d *DockerFileBuilder) BuildImageWithContext(config *integrationTestConfig,
|
|||
}
|
||||
}
|
||||
|
||||
reproducibleFlag := ""
|
||||
additionalKanikoFlags := additionalDockerFlagsMap[dockerfile]
|
||||
additionalKanikoFlags = append(additionalKanikoFlags, contextFlag, contextPath)
|
||||
for _, d := range reproducibleTests {
|
||||
if d == dockerfile {
|
||||
reproducibleFlag = "--reproducible"
|
||||
additionalKanikoFlags = append(additionalKanikoFlags, "--reproducible")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
benchmarkEnv := "BENCHMARK_FILE=false"
|
||||
benchmarkDir, err := ioutil.TempDir("", "")
|
||||
kanikoImage := GetKanikoImage(imageRepo, dockerfile)
|
||||
out, err := buildKanikoImage(dockerfilesPath, dockerfile, buildArgs, additionalKanikoFlags, kanikoImage,
|
||||
contextDir, gcsBucket, serviceAccount)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if b, err := strconv.ParseBool(os.Getenv("BENCHMARK")); err == nil && b {
|
||||
benchmarkEnv = "BENCHMARK_FILE=/kaniko/benchmarks/" + dockerfile
|
||||
benchmarkFile := path.Join(benchmarkDir, dockerfile)
|
||||
fileName := fmt.Sprintf("run_%s_%s", time.Now().Format("2006-01-02-15:04"), dockerfile)
|
||||
dst := path.Join("benchmarks", fileName)
|
||||
defer UploadFileToBucket(gcsBucket, benchmarkFile, dst)
|
||||
}
|
||||
|
||||
// build kaniko image
|
||||
additionalFlags := append(buildArgs, additionalKanikoFlagsMap[dockerfile]...)
|
||||
kanikoImage := GetKanikoImage(imageRepo, dockerfile)
|
||||
fmt.Printf("Going to build image with kaniko: %s, flags: %s \n", kanikoImage, additionalFlags)
|
||||
|
||||
dockerRunFlags := []string{"run", "--net=host",
|
||||
"-e", benchmarkEnv,
|
||||
"-v", contextDir + ":/workspace",
|
||||
"-v", benchmarkDir + ":/kaniko/benchmarks",
|
||||
}
|
||||
|
||||
if env, ok := envsMap[dockerfile]; ok {
|
||||
for _, envVariable := range env {
|
||||
dockerRunFlags = append(dockerRunFlags, "-e", envVariable)
|
||||
}
|
||||
}
|
||||
|
||||
dockerRunFlags = addServiceAccountFlags(dockerRunFlags, serviceAccount)
|
||||
|
||||
kanikoDockerfilePath := path.Join(buildContextPath, dockerfilesPath, dockerfile)
|
||||
if dockerfilesPath == "" {
|
||||
kanikoDockerfilePath = path.Join(buildContextPath, "Dockerfile")
|
||||
}
|
||||
|
||||
dockerRunFlags = append(dockerRunFlags, ExecutorImage,
|
||||
"-f", kanikoDockerfilePath,
|
||||
"-d", kanikoImage, reproducibleFlag,
|
||||
contextFlag, contextPath)
|
||||
dockerRunFlags = append(dockerRunFlags, additionalFlags...)
|
||||
|
||||
kanikoCmd := exec.Command("docker", dockerRunFlags...)
|
||||
|
||||
timer = timing.Start(dockerfile + "_kaniko")
|
||||
out, err := RunCommandWithoutTest(kanikoCmd)
|
||||
timing.DefaultRun.Stop(timer)
|
||||
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to build image %s with kaniko command \"%s\": %s %s", kanikoImage, kanikoCmd.Args, err, string(out))
|
||||
}
|
||||
|
||||
if outputCheck := outputChecks[dockerfile]; outputCheck != nil {
|
||||
if err := outputCheck(dockerfile, out); err != nil {
|
||||
return fmt.Errorf("Output check failed for image %s with kaniko command \"%s\": %s %s", kanikoImage, kanikoCmd.Args, err, string(out))
|
||||
return fmt.Errorf("Output check failed for image %s with kaniko command : %s %s", kanikoImage, err, string(out))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -435,3 +390,58 @@ func (d *DockerFileBuilder) buildRelativePathsImage(imageRepo, dockerfile, servi
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func buildKanikoImage(dockerfilesPath string, dockerfile string, buildArgs []string, kanikoArgs []string, kanikoImage string,
|
||||
contextDir string, gcsBucket string, serviceAccount string) ([]byte, error) {
|
||||
benchmarkEnv := "BENCHMARK_FILE=false"
|
||||
benchmarkDir, err := ioutil.TempDir("", "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if b, err := strconv.ParseBool(os.Getenv("BENCHMARK")); err == nil && b {
|
||||
benchmarkEnv = "BENCHMARK_FILE=/kaniko/benchmarks/" + dockerfile
|
||||
benchmarkFile := path.Join(benchmarkDir, dockerfile)
|
||||
fileName := fmt.Sprintf("run_%s_%s", time.Now().Format("2006-01-02-15:04"), dockerfile)
|
||||
dst := path.Join("benchmarks", fileName)
|
||||
defer UploadFileToBucket(gcsBucket, benchmarkFile, dst)
|
||||
}
|
||||
|
||||
// build kaniko image
|
||||
additionalFlags := append(buildArgs, kanikoArgs...)
|
||||
fmt.Printf("Going to build image with kaniko: %s, flags: %s \n", kanikoImage, additionalFlags)
|
||||
|
||||
dockerRunFlags := []string{"run", "--net=host",
|
||||
"-e", benchmarkEnv,
|
||||
"-v", contextDir + ":/workspace",
|
||||
"-v", benchmarkDir + ":/kaniko/benchmarks",
|
||||
}
|
||||
|
||||
if env, ok := envsMap[dockerfile]; ok {
|
||||
for _, envVariable := range env {
|
||||
dockerRunFlags = append(dockerRunFlags, "-e", envVariable)
|
||||
}
|
||||
}
|
||||
|
||||
dockerRunFlags = addServiceAccountFlags(dockerRunFlags, serviceAccount)
|
||||
|
||||
kanikoDockerfilePath := path.Join(buildContextPath, dockerfilesPath, dockerfile)
|
||||
if dockerfilesPath == "" {
|
||||
kanikoDockerfilePath = path.Join(buildContextPath, "Dockerfile")
|
||||
}
|
||||
|
||||
dockerRunFlags = append(dockerRunFlags, ExecutorImage,
|
||||
"-f", kanikoDockerfilePath,
|
||||
"-d", kanikoImage)
|
||||
dockerRunFlags = append(dockerRunFlags, additionalFlags...)
|
||||
|
||||
kanikoCmd := exec.Command("docker", dockerRunFlags...)
|
||||
|
||||
timer := timing.Start(dockerfile + "_kaniko")
|
||||
out, err := RunCommandWithoutTest(kanikoCmd)
|
||||
timing.DefaultRun.Stop(timer)
|
||||
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to build image %s with kaniko command \"%s\": %s %s", kanikoImage, kanikoCmd.Args, err, string(out))
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,19 +21,6 @@ IMAGE_REPO="${IMAGE_REPO:-gcr.io/kaniko-test}"
|
|||
docker version
|
||||
|
||||
# Sets up a kokoro (Google internal integration testing tool) environment
|
||||
if [ -f "$KOKORO_GFILE_DIR"/common.sh ]; then
|
||||
echo "Installing dependencies..."
|
||||
source "$KOKORO_GFILE_DIR/common.sh"
|
||||
mkdir -p /usr/local/go/src/github.com/GoogleContainerTools/
|
||||
cp -r github/kaniko /usr/local/go/src/github.com/GoogleContainerTools/
|
||||
pushd /usr/local/go/src/github.com/GoogleContainerTools/kaniko
|
||||
echo "Installing container-diff..."
|
||||
mv $KOKORO_GFILE_DIR/container-diff-linux-amd64 $KOKORO_GFILE_DIR/container-diff
|
||||
chmod +x $KOKORO_GFILE_DIR/container-diff
|
||||
export PATH=$PATH:$KOKORO_GFILE_DIR
|
||||
cp $KOKORO_ROOT/src/keystore/72508_gcr_application_creds $HOME/.config/gcloud/application_default_credentials.json
|
||||
fi
|
||||
|
||||
echo "Running integration tests..."
|
||||
make out/executor
|
||||
make out/warmer
|
||||
|
|
|
|||
Loading…
Reference in New Issue