Skip to content

Commit

Permalink
add dockerignore as part of remote deploy (#3339)
Browse files Browse the repository at this point in the history
* add dockerignore as part of remote deploy

Signed-off-by: adripedriza <adripedriza@gmail.com>

* fix test

Signed-off-by: adripedriza <adripedriza@gmail.com>

* fix: unit tests

Signed-off-by: Javier López Barba <javier@okteto.com>

* refactor test

Signed-off-by: adripedriza <adripedriza@gmail.com>

Signed-off-by: adripedriza <adripedriza@gmail.com>
Signed-off-by: Javier López Barba <javier@okteto.com>
Co-authored-by: Javier López Barba <javier@okteto.com>
  • Loading branch information
AdrianPedriza and jLopezbarb committed Jan 17, 2023
1 parent 08037ef commit e0ab8d8
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 14 deletions.
2 changes: 1 addition & 1 deletion cmd/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ func (dc *DeployCommand) RunDeploy(ctx context.Context, deployOptions *Options)
return err
}

return nil
return err
}

func buildImages(ctx context.Context, build func(context.Context, *types.BuildOptions) error, getServicesToBuild func(context.Context, *model.Manifest, []string) ([]string, error), deployOptions *Options) error {
Expand Down
7 changes: 5 additions & 2 deletions cmd/deploy/deploy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ func TestCreateConfigMapWithBuildError(t *testing.T) {

clientProvider := test.NewFakeK8sProvider()

registry := test.NewFakeOktetoRegistry(nil)
builder := test.NewFakeOktetoBuilder(registry)
c := &DeployCommand{
GetManifest: getErrorManifest,
GetDeployer: func(manifest *model.Manifest, opts *Options, _ string, _ *buildv2.OktetoBuilder) (deployerInterface, error) {
Expand All @@ -237,6 +239,7 @@ func TestCreateConfigMapWithBuildError(t *testing.T) {
K8sClientProvider: clientProvider,
}, nil
},
Builder: buildv2.NewBuilder(builder, registry),
K8sClientProvider: clientProvider,
}

Expand Down Expand Up @@ -397,8 +400,8 @@ func TestDeployWithErrorBecauseOtherPipelineRunning(t *testing.T) {
assert.Error(t, err)
// No command was executed
assert.Len(t, e.executed, 0)
// Proxy started
assert.True(t, p.started)
// Proxy didn't start
assert.False(t, p.started)

// check if configmap has been created
fakeClient, _, err := c.K8sClientProvider.Provide(clientcmdapi.NewConfig())
Expand Down
48 changes: 37 additions & 11 deletions cmd/deploy/remote.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ package deploy

import (
"context"
"errors"
"fmt"
"math/rand"
"os"
Expand Down Expand Up @@ -80,11 +81,13 @@ type dockerfileTemplateProperties struct {

type remoteDeployCommand struct {
builder *buildv2.OktetoBuilder
fs afero.Fs
}

func newRemoteDeployer(builder *buildv2.OktetoBuilder) *remoteDeployCommand {
return &remoteDeployCommand{
builder: builder,
fs: afero.NewOsFs(),
}
}

Expand All @@ -95,12 +98,7 @@ func (rd *remoteDeployCommand) deploy(ctx context.Context, deployOptions *Option
return err
}

c, _, err := okteto.NewK8sClientProvider().Provide(okteto.Context().Cfg)
if err != nil {
return err
}

setDeployOptionsValuesFromManifest(ctx, deployOptions, cwd, c)
cwd = getOriginalCWD(cwd, deployOptions.ManifestPathFlag)

tmpl, err := template.New("dockerfile").Parse(dockerfileTemplate)
if err != nil {
Expand All @@ -122,15 +120,23 @@ func (rd *remoteDeployCommand) deploy(ctx context.Context, deployOptions *Option
DeployFlags: strings.Join(getDeployFlags(deployOptions), " "),
}

fs := afero.NewOsFs()
tmpDir, err := afero.TempDir(rd.fs, "", "")
if err != nil {
return err
}

dockerfile, err := rd.fs.Create(fmt.Sprintf("%s/deploy", tmpDir))
if err != nil {
return err
}

dockerfile, err := afero.TempFile(fs, "", "Dockerfile.okteto.deploy")
err = rd.createDockerignoreIfNeeded(cwd, tmpDir)
if err != nil {
return err
}

defer func() {
if err := fs.Remove(dockerfile.Name()); err != nil {
if err := rd.fs.Remove(dockerfile.Name()); err != nil {
oktetoLog.Infof("error removing dockerfile: %w", err)
}
}()
Expand All @@ -142,8 +148,6 @@ func (rd *remoteDeployCommand) deploy(ctx context.Context, deployOptions *Option
Dockerfile: dockerfile.Name(),
}

cwd = getOriginalCWD(cwd, deployOptions.ManifestPathFlag)

// undo modification of CWD for Build command
os.Chdir(cwd)

Expand All @@ -167,6 +171,28 @@ func (rd *remoteDeployCommand) cleanUp(ctx context.Context, err error) {
return
}

func (rd *remoteDeployCommand) createDockerignoreIfNeeded(cwd, tmpDir string) error {
dockerignoreName := "deploy.dockerignore"
dockerignoreFilePath := fmt.Sprintf("%s/%s", cwd, dockerignoreName)
if _, err := rd.fs.Stat(dockerignoreFilePath); err != nil {
if !errors.Is(err, os.ErrNotExist) {
return err
}
} else {
dockerignoreContent, err := afero.ReadFile(rd.fs, dockerignoreFilePath)
if err != nil {
return err
}

err = afero.WriteFile(rd.fs, fmt.Sprintf("%s/%s", tmpDir, dockerignoreName), dockerignoreContent, 0600)
if err != nil {
return err
}
}

return nil
}

func getDeployFlags(opts *Options) []string {
var deployFlags []string

Expand Down
2 changes: 2 additions & 0 deletions pkg/model/serializer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"testing"
"time"

"github.com/okteto/okteto/pkg/constants"
"github.com/okteto/okteto/pkg/externalresource"
"github.com/okteto/okteto/pkg/model/forward"
"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -1837,6 +1838,7 @@ func TestDeployInfoUnmarshalling(t *testing.T) {
Command: "okteto stack deploy",
},
},
Image: constants.OktetoCLIImageForRemote,
},
},
{
Expand Down

0 comments on commit e0ab8d8

Please sign in to comment.