Fix incorrect tag in BuildConfig.

For services with build and image keys DeploymentConfig respects tag from docker-compose image key.
But BuildConfig image tag was always set to  'latest'.
Result of this was that deployment wasn't trigired after successful build.
This fixes it by setting BuildConfig output image tag to the same tag that is used for  DeploymentConfig (tag from docker-compose image key)
This commit is contained in:
Tomas Kral 2017-05-23 13:53:14 +02:00
parent f097b35854
commit c5fa9f7f2a
No known key found for this signature in database
GPG Key ID: E690DA7E4F291FA6
2 changed files with 55 additions and 31 deletions

View File

@ -245,7 +245,7 @@ func initBuildConfig(name string, service kobject.ServiceConfig, repo string, br
Output: buildapi.BuildOutput{
To: &kapi.ObjectReference{
Kind: "ImageStreamTag",
Name: name + ":latest",
Name: name + ":" + getImageTag(service.Image),
},
},
},

View File

@ -281,45 +281,69 @@ func TestGetAbsBuildContext(t *testing.T) {
// Test initializing buildconfig for a service
func TestInitBuildConfig(t *testing.T) {
dir := testutils.CreateLocalGitDirectory(t)
testutils.CreateSubdir(t, dir, "a/build")
defer os.RemoveAll(dir)
serviceName := "serviceA"
repo := "https://git.test.com/org/repo"
repo := "https://git.test.com/org/repo1"
branch := "somebranch"
buildArgs := []kapi.EnvVar{{Name: "name", Value: "value"}}
value := "value"
sc := kobject.ServiceConfig{
Build: filepath.Join(dir, "a/build"),
testDir := "a/build"
dir := testutils.CreateLocalGitDirectory(t)
testutils.CreateSubdir(t, dir, testDir)
defer os.RemoveAll(dir)
testCases := []struct {
Name string
ServiceConfig kobject.ServiceConfig
}{
{
Name: "Service config without image key",
ServiceConfig: kobject.ServiceConfig{
Build: filepath.Join(dir, testDir),
Dockerfile: "Dockerfile-alternate",
BuildArgs: map[string]*string{"name": &value},
},
},
{
Name: "Service config with image key",
ServiceConfig: kobject.ServiceConfig{
Build: filepath.Join(dir, testDir),
Dockerfile: "Dockerfile-alternate",
BuildArgs: map[string]*string{"name": &value},
Image: "foo:bar",
},
},
}
bc, err := initBuildConfig(serviceName, sc, repo, branch)
for _, test := range testCases {
bc, err := initBuildConfig(serviceName, test.ServiceConfig, repo, branch)
if err != nil {
t.Error(errors.Wrap(err, "initBuildConfig failed"))
}
testCases := map[string]struct {
assertions := map[string]struct {
field string
value string
}{
"Assert buildconfig source git URI": {bc.Spec.CommonSpec.Source.Git.URI, repo},
"Assert buildconfig source git Ref": {bc.Spec.CommonSpec.Source.Git.Ref, branch},
"Assert buildconfig source context dir": {bc.Spec.CommonSpec.Source.ContextDir, "a/build/"},
"Assert buildconfig output name": {bc.Spec.CommonSpec.Output.To.Name, serviceName + ":latest"},
"Assert buildconfig dockerfilepath": {bc.Spec.CommonSpec.Strategy.DockerStrategy.DockerfilePath, "Dockerfile-alternate"},
"Assert buildconfig source context dir": {bc.Spec.CommonSpec.Source.ContextDir, testDir + "/"},
// BuildConfig output image is named after service name. If image key is set than tag from that is used.
"Assert buildconfig output name": {bc.Spec.CommonSpec.Output.To.Name, serviceName + ":" + getImageTag(test.ServiceConfig.Image)},
"Assert buildconfig dockerfilepath": {bc.Spec.CommonSpec.Strategy.DockerStrategy.DockerfilePath, test.ServiceConfig.Dockerfile},
}
for name, test := range testCases {
t.Log("Test case: ", name)
if test.field != test.value {
t.Errorf("Expected: %#v, got: %#v", test.value, test.field)
for name, assertionTest := range assertions {
if assertionTest.field != assertionTest.value {
t.Errorf("%s Expected: %#v, got: %#v", name, assertionTest.value, assertionTest.field)
}
}
if !reflect.DeepEqual(bc.Spec.CommonSpec.Strategy.DockerStrategy.Env, buildArgs) {
t.Errorf("Expected: %#v, got: %#v", bc.Spec.CommonSpec.Strategy.DockerStrategy.Env, buildArgs)
}
}
}
// TestServiceWithoutPort this tests if Headless Service is created for services without Port.
func TestServiceWithoutPort(t *testing.T) {