diff --git a/pipeline/backend/docker/convert.go b/pipeline/backend/docker/convert.go index 1ca70b934..4ebbd360e 100644 --- a/pipeline/backend/docker/convert.go +++ b/pipeline/backend/docker/convert.go @@ -45,16 +45,16 @@ func (e *docker) toConfig(step *types.Step) *container.Config { configEnv := make(map[string]string) maps.Copy(configEnv, step.Environment) - if len(step.Commands) != 0 { + if len(step.Commands) > 0 { env, entry := common.GenerateContainerConf(step.Commands, e.info.OSType) for k, v := range env { configEnv[k] = v } - if len(step.Entrypoint) > 0 { - entry = step.Entrypoint - } config.Entrypoint = entry } + if len(step.Entrypoint) > 0 { + config.Entrypoint = step.Entrypoint + } if len(configEnv) != 0 { config.Env = toEnv(configEnv) diff --git a/pipeline/backend/kubernetes/pod.go b/pipeline/backend/kubernetes/pod.go index 4d66058d9..90507ac01 100644 --- a/pipeline/backend/kubernetes/pod.go +++ b/pipeline/backend/kubernetes/pod.go @@ -144,14 +144,14 @@ func podContainer(step *types.Step, podName, goos string, options BackendOptions container.ImagePullPolicy = v1.PullAlways } - if len(step.Commands) != 0 { + if len(step.Commands) > 0 { scriptEnv, command := common.GenerateContainerConf(step.Commands, goos) - if len(step.Entrypoint) > 0 { - command = step.Entrypoint - } container.Command = command maps.Copy(step.Environment, scriptEnv) } + if len(step.Entrypoint) > 0 { + container.Command = step.Entrypoint + } container.Env = mapToEnvVars(step.Environment) container.Ports = containerPorts(step.Ports) diff --git a/pipeline/backend/kubernetes/pod_test.go b/pipeline/backend/kubernetes/pod_test.go index 0f781f8eb..8cc087507 100644 --- a/pipeline/backend/kubernetes/pod_test.go +++ b/pipeline/backend/kubernetes/pod_test.go @@ -110,7 +110,7 @@ func TestTinyPod(t *testing.T) { }, { "name": "CI_SCRIPT", - "value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdncmFkbGUgYnVpbGQnCmdyYWRsZSBidWlsZAo=" + "value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiAICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdncmFkbGUgYnVpbGQnCmdyYWRsZSBidWlsZAo=" } ], "resources": {}, @@ -203,7 +203,7 @@ func TestFullPod(t *testing.T) { }, { "name": "CI_SCRIPT", - "value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiA+ICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdnbyBnZXQnCmdvIGdldAoKZWNobyArICdnbyB0ZXN0JwpnbyB0ZXN0Cg==" + "value": "CmlmIFsgLW4gIiRDSV9ORVRSQ19NQUNISU5FIiBdOyB0aGVuCmNhdCA8PEVPRiAICRIT01FLy5uZXRyYwptYWNoaW5lICRDSV9ORVRSQ19NQUNISU5FCmxvZ2luICRDSV9ORVRSQ19VU0VSTkFNRQpwYXNzd29yZCAkQ0lfTkVUUkNfUEFTU1dPUkQKRU9GCmNobW9kIDA2MDAgJEhPTUUvLm5ldHJjCmZpCnVuc2V0IENJX05FVFJDX1VTRVJOQU1FCnVuc2V0IENJX05FVFJDX1BBU1NXT1JECnVuc2V0IENJX1NDUklQVAoKZWNobyArICdnbyBnZXQnCmdvIGdldAoKZWNobyArICdnbyB0ZXN0JwpnbyB0ZXN0Cg==" }, { "name": "HOME", @@ -407,3 +407,49 @@ func TestPodPrivilege(t *testing.T) { assert.NoError(t, err) assert.Equal(t, true, *pod.Spec.SecurityContext.RunAsNonRoot) } + +func TestScratchPod(t *testing.T) { + expected := ` + { + "metadata": { + "name": "wp-01he8bebctabr3kgk0qj36d2me-0", + "namespace": "woodpecker", + "creationTimestamp": null, + "labels": { + "step": "curl-google" + } + }, + "spec": { + "containers": [ + { + "name": "wp-01he8bebctabr3kgk0qj36d2me-0", + "image": "quay.io/curl/curl", + "command": [ + "/usr/bin/curl", + "-v", + "google.com" + ], + "resources": {} + } + ], + "restartPolicy": "Never" + }, + "status": {} + }` + + pod, err := mkPod(&types.Step{ + Name: "curl-google", + Image: "quay.io/curl/curl", + Entrypoint: []string{"/usr/bin/curl", "-v", "google.com"}, + }, &config{ + Namespace: "woodpecker", + }, "wp-01he8bebctabr3kgk0qj36d2me-0", "linux/amd64", BackendOptions{}) + assert.NoError(t, err) + + podJSON, err := json.Marshal(pod) + assert.NoError(t, err) + + ja := jsonassert.New(t) + t.Log(string(podJSON)) + ja.Assertf(string(podJSON), expected) +}