diff --git a/cmd/kaniko-docker/main.go b/cmd/kaniko-docker/main.go index e8c7709..3ddc66b 100644 --- a/cmd/kaniko-docker/main.go +++ b/cmd/kaniko-docker/main.go @@ -181,6 +181,11 @@ func main() { Usage: "Allows to build with another default platform than the host, similarly to docker build --platform", EnvVar: "PLUGIN_PLATFORM", }, + cli.BoolFlag{ + Name: "skip-unused-stages", + Usage: "build only used stages", + EnvVar: "PLUGIN_SKIP_UNUSED_STAGES", + }, } if err := app.Run(os.Args); err != nil { @@ -201,28 +206,29 @@ func run(c *cli.Context) error { plugin := kaniko.Plugin{ Build: kaniko.Build{ - DroneCommitRef: c.String("drone-commit-ref"), - DroneRepoBranch: c.String("drone-repo-branch"), - Dockerfile: c.String("dockerfile"), - Context: c.String("context"), - Tags: c.StringSlice("tags"), - AutoTag: c.Bool("auto-tag"), - AutoTagSuffix: c.String("auto-tag-suffix"), - ExpandTag: c.Bool("expand-tag"), - Args: c.StringSlice("args"), - Target: c.String("target"), - Repo: buildRepo(c.String("registry"), c.String("repo"), c.Bool("expand-repo")), - Mirrors: c.StringSlice("registry-mirrors"), - Labels: c.StringSlice("custom-labels"), - SkipTlsVerify: c.Bool("skip-tls-verify"), - SnapshotMode: c.String("snapshot-mode"), - EnableCache: c.Bool("enable-cache"), - CacheRepo: buildRepo(c.String("registry"), c.String("cache-repo"), c.Bool("expand-repo")), - CacheTTL: c.Int("cache-ttl"), - DigestFile: defaultDigestFile, - NoPush: noPush, - Verbosity: c.String("verbosity"), - Platform: c.String("platform"), + DroneCommitRef: c.String("drone-commit-ref"), + DroneRepoBranch: c.String("drone-repo-branch"), + Dockerfile: c.String("dockerfile"), + Context: c.String("context"), + Tags: c.StringSlice("tags"), + AutoTag: c.Bool("auto-tag"), + AutoTagSuffix: c.String("auto-tag-suffix"), + ExpandTag: c.Bool("expand-tag"), + Args: c.StringSlice("args"), + Target: c.String("target"), + Repo: buildRepo(c.String("registry"), c.String("repo"), c.Bool("expand-repo")), + Mirrors: c.StringSlice("registry-mirrors"), + Labels: c.StringSlice("custom-labels"), + SkipTlsVerify: c.Bool("skip-tls-verify"), + SnapshotMode: c.String("snapshot-mode"), + EnableCache: c.Bool("enable-cache"), + CacheRepo: buildRepo(c.String("registry"), c.String("cache-repo"), c.Bool("expand-repo")), + CacheTTL: c.Int("cache-ttl"), + DigestFile: defaultDigestFile, + NoPush: noPush, + Verbosity: c.String("verbosity"), + Platform: c.String("platform"), + SkipUnusedStages: c.Bool("skip-unused-stages"), }, Artifact: kaniko.Artifact{ Tags: c.StringSlice("tags"), diff --git a/cmd/kaniko-ecr/main.go b/cmd/kaniko-ecr/main.go index c10a3c3..dc3c97f 100644 --- a/cmd/kaniko-ecr/main.go +++ b/cmd/kaniko-ecr/main.go @@ -12,7 +12,7 @@ import ( "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/ecr" "github.com/aws/aws-sdk-go-v2/service/ecrpublic" - "github.com/aws/smithy-go" + "github.com/aws/smithy-go" kaniko "github.com/drone/drone-kaniko" "github.com/drone/drone-kaniko/pkg/artifact" "github.com/drone/drone-kaniko/pkg/docker" @@ -204,6 +204,11 @@ func main() { Usage: "Allows to build with another default platform than the host, similarly to docker build --platform", EnvVar: "PLUGIN_PLATFORM", }, + cli.BoolFlag{ + Name: "skip-unused-stages", + Usage: "build only used stages", + EnvVar: "PLUGIN_SKIP_UNUSED_STAGES", + }, } if err := app.Run(os.Args); err != nil { @@ -267,27 +272,28 @@ func run(c *cli.Context) error { plugin := kaniko.Plugin{ Build: kaniko.Build{ - DroneCommitRef: c.String("drone-commit-ref"), - DroneRepoBranch: c.String("drone-repo-branch"), - Dockerfile: c.String("dockerfile"), - Context: c.String("context"), - Tags: c.StringSlice("tags"), - AutoTag: c.Bool("auto-tag"), - AutoTagSuffix: c.String("auto-tag-suffix"), - ExpandTag: c.Bool("expand-tag"), - Args: c.StringSlice("args"), - Target: c.String("target"), - Repo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("repo")), - Mirrors: c.StringSlice("registry-mirrors"), - Labels: c.StringSlice("custom-labels"), - SnapshotMode: c.String("snapshot-mode"), - EnableCache: c.Bool("enable-cache"), - CacheRepo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("cache-repo")), - CacheTTL: c.Int("cache-ttl"), - DigestFile: defaultDigestFile, - NoPush: noPush, - Verbosity: c.String("verbosity"), - Platform: c.String("platform"), + DroneCommitRef: c.String("drone-commit-ref"), + DroneRepoBranch: c.String("drone-repo-branch"), + Dockerfile: c.String("dockerfile"), + Context: c.String("context"), + Tags: c.StringSlice("tags"), + AutoTag: c.Bool("auto-tag"), + AutoTagSuffix: c.String("auto-tag-suffix"), + ExpandTag: c.Bool("expand-tag"), + Args: c.StringSlice("args"), + Target: c.String("target"), + Repo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("repo")), + Mirrors: c.StringSlice("registry-mirrors"), + Labels: c.StringSlice("custom-labels"), + SnapshotMode: c.String("snapshot-mode"), + EnableCache: c.Bool("enable-cache"), + CacheRepo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("cache-repo")), + CacheTTL: c.Int("cache-ttl"), + DigestFile: defaultDigestFile, + NoPush: noPush, + Verbosity: c.String("verbosity"), + Platform: c.String("platform"), + SkipUnusedStages: c.Bool("skip-unused-stages"), }, Artifact: kaniko.Artifact{ Tags: c.StringSlice("tags"), diff --git a/cmd/kaniko-gcr/main.go b/cmd/kaniko-gcr/main.go index a0c5504..74bb2e5 100644 --- a/cmd/kaniko-gcr/main.go +++ b/cmd/kaniko-gcr/main.go @@ -160,6 +160,11 @@ func main() { Usage: "Allows to build with another default platform than the host, similarly to docker build --platform", EnvVar: "PLUGIN_PLATFORM", }, + cli.BoolFlag{ + Name: "skip-unused-stages", + Usage: "build only used stages", + EnvVar: "PLUGIN_SKIP_UNUSED_STAGES", + }, } if err := app.Run(os.Args); err != nil { @@ -182,27 +187,28 @@ func run(c *cli.Context) error { plugin := kaniko.Plugin{ Build: kaniko.Build{ - DroneCommitRef: c.String("drone-commit-ref"), - DroneRepoBranch: c.String("drone-repo-branch"), - Dockerfile: c.String("dockerfile"), - Context: c.String("context"), - Tags: c.StringSlice("tags"), - AutoTag: c.Bool("auto-tag"), - AutoTagSuffix: c.String("auto-tag-suffix"), - ExpandTag: c.Bool("expand-tag"), - Args: c.StringSlice("args"), - Target: c.String("target"), - Repo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("repo")), - Mirrors: c.StringSlice("registry-mirrors"), - Labels: c.StringSlice("custom-labels"), - SnapshotMode: c.String("snapshot-mode"), - EnableCache: c.Bool("enable-cache"), - CacheRepo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("cache-repo")), - CacheTTL: c.Int("cache-ttl"), - DigestFile: defaultDigestFile, - NoPush: noPush, - Verbosity: c.String("verbosity"), - Platform: c.String("platform"), + DroneCommitRef: c.String("drone-commit-ref"), + DroneRepoBranch: c.String("drone-repo-branch"), + Dockerfile: c.String("dockerfile"), + Context: c.String("context"), + Tags: c.StringSlice("tags"), + AutoTag: c.Bool("auto-tag"), + AutoTagSuffix: c.String("auto-tag-suffix"), + ExpandTag: c.Bool("expand-tag"), + Args: c.StringSlice("args"), + Target: c.String("target"), + Repo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("repo")), + Mirrors: c.StringSlice("registry-mirrors"), + Labels: c.StringSlice("custom-labels"), + SnapshotMode: c.String("snapshot-mode"), + EnableCache: c.Bool("enable-cache"), + CacheRepo: fmt.Sprintf("%s/%s", c.String("registry"), c.String("cache-repo")), + CacheTTL: c.Int("cache-ttl"), + DigestFile: defaultDigestFile, + NoPush: noPush, + Verbosity: c.String("verbosity"), + Platform: c.String("platform"), + SkipUnusedStages: c.Bool("skip-unused-stages"), }, Artifact: kaniko.Artifact{ Tags: c.StringSlice("tags"), diff --git a/kaniko.go b/kaniko.go index 01528f1..9b222c4 100644 --- a/kaniko.go +++ b/kaniko.go @@ -15,28 +15,29 @@ import ( type ( // Build defines Docker build parameters. Build struct { - DroneCommitRef string // Drone git commit reference - DroneRepoBranch string // Drone repo branch - Dockerfile string // Docker build Dockerfile - Context string // Docker build context - Tags []string // Docker build tags - AutoTag bool // Set this to auto detect tags from git commits and semver-tagged labels - AutoTagSuffix string // Suffix to append to the auto detect tags - ExpandTag bool // Set this to expand the `Tags` into semver-tagged labels - Args []string // Docker build args - Target string // Docker build target - Repo string // Docker build repository - Mirrors []string // Docker repository mirrors - Labels []string // Label map - SkipTlsVerify bool // Docker skip tls certificate verify for registry - SnapshotMode string // Kaniko snapshot mode - EnableCache bool // Whether to enable kaniko cache - CacheRepo string // Remote repository that will be used to store cached layers - CacheTTL int // Cache timeout in hours - DigestFile string // Digest file location - NoPush bool // Set this flag if you only want to build the image, without pushing to a registry - Verbosity string // Log level - Platform string // Allows to build with another default platform than the host, similarly to docker build --platform + DroneCommitRef string // Drone git commit reference + DroneRepoBranch string // Drone repo branch + Dockerfile string // Docker build Dockerfile + Context string // Docker build context + Tags []string // Docker build tags + AutoTag bool // Set this to auto detect tags from git commits and semver-tagged labels + AutoTagSuffix string // Suffix to append to the auto detect tags + ExpandTag bool // Set this to expand the `Tags` into semver-tagged labels + Args []string // Docker build args + Target string // Docker build target + Repo string // Docker build repository + Mirrors []string // Docker repository mirrors + Labels []string // Label map + SkipTlsVerify bool // Docker skip tls certificate verify for registry + SnapshotMode string // Kaniko snapshot mode + EnableCache bool // Whether to enable kaniko cache + CacheRepo string // Remote repository that will be used to store cached layers + CacheTTL int // Cache timeout in hours + DigestFile string // Digest file location + NoPush bool // Set this flag if you only want to build the image, without pushing to a registry + Verbosity string // Log level + Platform string // Allows to build with another default platform than the host, similarly to docker build --platform + SkipUnusedStages bool // Build only used stages } // Artifact defines content of artifact file @@ -207,6 +208,10 @@ func (p Plugin) Exec() error { cmdArgs = append(cmdArgs, fmt.Sprintf("--customPlatform=%s", p.Build.Platform)) } + if p.Build.SkipUnusedStages { + cmdArgs = append(cmdArgs, "--skip-unused-stages") + } + cmd := exec.Command("/kaniko/executor", cmdArgs...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr