Merge pull request #1049 from antechrestos/refactor/build_cache_in_integration_image_build
Refactor integration image built
This commit is contained in:
commit
fb0cfd7464
|
|
@ -152,18 +152,15 @@ func FindDockerFiles(dockerfilesPath string) ([]string, error) {
|
|||
// keeps track of which files have been built.
|
||||
type DockerFileBuilder struct {
|
||||
// Holds all available docker files and whether or not they've been built
|
||||
FilesBuilt map[string]bool
|
||||
filesBuilt map[string]struct{}
|
||||
DockerfilesToIgnore map[string]struct{}
|
||||
TestCacheDockerfiles map[string]struct{}
|
||||
}
|
||||
|
||||
// NewDockerFileBuilder will create a DockerFileBuilder initialized with dockerfiles, which
|
||||
// it will assume are all as yet unbuilt.
|
||||
func NewDockerFileBuilder(dockerfiles []string) *DockerFileBuilder {
|
||||
d := DockerFileBuilder{FilesBuilt: map[string]bool{}}
|
||||
for _, f := range dockerfiles {
|
||||
d.FilesBuilt[f] = false
|
||||
}
|
||||
func NewDockerFileBuilder() *DockerFileBuilder {
|
||||
d := DockerFileBuilder{filesBuilt: map[string]struct{}{}}
|
||||
d.DockerfilesToIgnore = map[string]struct{}{
|
||||
// TODO: remove test_user_run from this when https://github.com/GoogleContainerTools/container-diff/issues/237 is fixed
|
||||
"Dockerfile_test_user_run": {},
|
||||
|
|
@ -192,6 +189,9 @@ func addServiceAccountFlags(flags []string, serviceAccount string) []string {
|
|||
// The resulting image will be tagged with imageRepo. If the dockerfile will be built with
|
||||
// context (i.e. it is in `buildContextTests`) the context will be pulled from gcsBucket.
|
||||
func (d *DockerFileBuilder) BuildImage(config *integrationTestConfig, dockerfilesPath, dockerfile string) error {
|
||||
if _, present := d.filesBuilt[dockerfile]; present {
|
||||
return nil
|
||||
}
|
||||
gcsBucket, serviceAccount, imageRepo := config.gcsBucket, config.serviceAccount, config.imageRepo
|
||||
_, ex, _, _ := runtime.Caller(0)
|
||||
cwd := filepath.Dir(ex)
|
||||
|
|
@ -291,7 +291,7 @@ func (d *DockerFileBuilder) BuildImage(config *integrationTestConfig, dockerfile
|
|||
}
|
||||
}
|
||||
|
||||
d.FilesBuilt[dockerfile] = true
|
||||
d.filesBuilt[dockerfile] = struct{}{}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,9 +42,11 @@ import (
|
|||
|
||||
var config *integrationTestConfig
|
||||
var imageBuilder *DockerFileBuilder
|
||||
var allDockerfiles []string
|
||||
|
||||
const (
|
||||
daemonPrefix = "daemon://"
|
||||
integrationPath = "integration"
|
||||
dockerfilesPath = "dockerfiles"
|
||||
emptyContainerDiff = `[
|
||||
{
|
||||
|
|
@ -82,7 +84,7 @@ func getDockerMajorVersion() int {
|
|||
}
|
||||
return ver
|
||||
}
|
||||
func launchTests(m *testing.M, dockerfiles []string) (int, error) {
|
||||
func launchTests(m *testing.M) (int, error) {
|
||||
|
||||
if config.isGcrRepository() {
|
||||
contextFile, err := CreateIntegrationTarball()
|
||||
|
|
@ -104,7 +106,7 @@ func launchTests(m *testing.M, dockerfiles []string) (int, error) {
|
|||
} else {
|
||||
var err error
|
||||
var migratedFiles []string
|
||||
if migratedFiles, err = MigrateGCRRegistry(dockerfilesPath, dockerfiles, config.imageRepo); err != nil {
|
||||
if migratedFiles, err = MigrateGCRRegistry(dockerfilesPath, allDockerfiles, config.imageRepo); err != nil {
|
||||
RollbackMigratedFiles(dockerfilesPath, migratedFiles)
|
||||
return 1, errors.Wrap(err, "Fail to migrate dockerfiles from gcs")
|
||||
}
|
||||
|
|
@ -115,23 +117,24 @@ func launchTests(m *testing.M, dockerfiles []string) (int, error) {
|
|||
return 1, errors.Wrap(err, "Error while building images")
|
||||
}
|
||||
|
||||
imageBuilder = NewDockerFileBuilder(dockerfiles)
|
||||
imageBuilder = NewDockerFileBuilder()
|
||||
|
||||
return m.Run(), nil
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
var err error
|
||||
if !meetsRequirements() {
|
||||
fmt.Println("Missing required tools")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if dockerfiles, err := FindDockerFiles(dockerfilesPath); err != nil {
|
||||
if allDockerfiles, err = FindDockerFiles(dockerfilesPath); err != nil {
|
||||
fmt.Println("Coudn't create map of dockerfiles", err)
|
||||
os.Exit(1)
|
||||
} else {
|
||||
config = initIntegrationTestConfig()
|
||||
exitCode, err := launchTests(m, dockerfiles)
|
||||
exitCode, err := launchTests(m)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
|
@ -155,7 +158,7 @@ func buildRequiredImages() error {
|
|||
},
|
||||
{
|
||||
name: "Building onbuild base image",
|
||||
command: []string{"docker", "build", "-t", config.onbuildBaseImage, "-f", "dockerfiles/Dockerfile_onbuild_base", "."},
|
||||
command: []string{"docker", "build", "-t", config.onbuildBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_onbuild_base", dockerfilesPath), "."},
|
||||
},
|
||||
{
|
||||
name: "Pushing onbuild base image",
|
||||
|
|
@ -163,7 +166,7 @@ func buildRequiredImages() error {
|
|||
},
|
||||
{
|
||||
name: "Building hardlink base image",
|
||||
command: []string{"docker", "build", "-t", config.hardlinkBaseImage, "-f", "dockerfiles/Dockerfile_hardlink_base", "."},
|
||||
command: []string{"docker", "build", "-t", config.hardlinkBaseImage, "-f", fmt.Sprintf("%s/Dockerfile_hardlink_base", dockerfilesPath), "."},
|
||||
},
|
||||
{
|
||||
name: "Pushing hardlink base image",
|
||||
|
|
@ -182,7 +185,7 @@ func buildRequiredImages() error {
|
|||
}
|
||||
|
||||
func TestRun(t *testing.T) {
|
||||
for dockerfile := range imageBuilder.FilesBuilt {
|
||||
for _, dockerfile := range allDockerfiles {
|
||||
t.Run("test_"+dockerfile, func(t *testing.T) {
|
||||
dockerfile := dockerfile
|
||||
t.Parallel()
|
||||
|
|
@ -194,7 +197,6 @@ func TestRun(t *testing.T) {
|
|||
}
|
||||
|
||||
buildImage(t, dockerfile, imageBuilder)
|
||||
imageBuilder.FilesBuilt[dockerfile] = true
|
||||
|
||||
dockerImage := GetDockerImage(config.imageRepo, dockerfile)
|
||||
kanikoImage := GetKanikoImage(config.imageRepo, dockerfile)
|
||||
|
|
@ -238,7 +240,7 @@ func getGitRepo() string {
|
|||
|
||||
func TestGitBuildcontext(t *testing.T) {
|
||||
repo := getGitRepo()
|
||||
dockerfile := "integration/dockerfiles/Dockerfile_test_run_2"
|
||||
dockerfile := fmt.Sprintf("%s/%s/Dockerfile_test_run_2", integrationPath, dockerfilesPath)
|
||||
|
||||
// Build with docker
|
||||
dockerImage := GetDockerImage(config.imageRepo, "Dockerfile_test_git")
|
||||
|
|
@ -330,7 +332,7 @@ func TestLayers(t *testing.T) {
|
|||
"Dockerfile_test_add": 12,
|
||||
"Dockerfile_test_scratch": 3,
|
||||
}
|
||||
for dockerfile := range imageBuilder.FilesBuilt {
|
||||
for _, dockerfile := range allDockerfiles {
|
||||
t.Run("test_layer_"+dockerfile, func(t *testing.T) {
|
||||
dockerfile := dockerfile
|
||||
|
||||
|
|
@ -340,7 +342,6 @@ func TestLayers(t *testing.T) {
|
|||
}
|
||||
|
||||
buildImage(t, dockerfile, imageBuilder)
|
||||
imageBuilder.FilesBuilt[dockerfile] = true
|
||||
|
||||
// Pull the kaniko image
|
||||
dockerImage := GetDockerImage(config.imageRepo, dockerfile)
|
||||
|
|
@ -358,15 +359,10 @@ func TestLayers(t *testing.T) {
|
|||
}
|
||||
|
||||
func buildImage(t *testing.T, dockerfile string, imageBuilder *DockerFileBuilder) {
|
||||
if imageBuilder.FilesBuilt[dockerfile] {
|
||||
return
|
||||
}
|
||||
|
||||
if err := imageBuilder.BuildImage(config, dockerfilesPath, dockerfile); err != nil {
|
||||
t.Errorf("Error building image: %s", err)
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue